请教一个实际问题向图论转化的问题{技术}{讨论}{图论}

3 views
Skip to first unread message

唐正华

unread,
Dec 14, 2009, 10:13:55 AM12/14/09
to TopLanguage, python

这个问题想了好久了,一直没有敲定最终方案,请各位帮忙看看,并说说你们的意见,谢谢啦~



一个系统由N个模块组成,每个模块有m个端口,通过将端口连线表示模块之间的连接关系。如图所示:(图在附件里)

模块内各端口之间关系由数学描述确定,如模块B端口123之间的关系式:231分别依赖,即已知了1端口的量,即可知道23端口的量;又如模块F端口123之间的关系:312同时依赖,即必须已知12的量,才能知道3的量。

 

问题:

1.       如何将此系统图论化?端口转化为顶点、模块间的连线转化为边、模块内部各端口之间的连线转化为边?还是将模块转化为顶点、模块间的连线转化为边?

 如果按端口转化为顶点这种方式转化:

2.       模块内端口之间的关系又如何转化为边?尤其对BF模块怎么转化?

3.       如何找出{CE}{BCDEF}等这样的子图?其特征是:子图{CE}与其他模块之间分别只有一条边相连,且子图内部存在环路。



qqq.png

Wu Yin

unread,
Dec 14, 2009, 10:04:59 PM12/14/09
to pon...@googlegroups.com
1. 可以考虑变为有向图。比如模块A中端口X需要依赖端口Y,那么就将X中的所有端口设为从A出发的边,Y中的所有端口设为到达A的边(即为输入和输出)
3. 搜索“强连通分支”或"strongly connected component"

2009/12/14 唐正华 <tangl...@gmail.com>



--
滚滚长江东逝水,浪花淘尽英雄。
是非成败转头空。
青山依旧在,几度夕阳红。
白发渔樵江渚上,惯看秋月春风。
一壶浊酒喜相逢。
古今多少事,都付笑谈中。

唐正华

unread,
Dec 14, 2009, 10:24:43 PM12/14/09
to pon...@googlegroups.com
有向图曾经考虑过,但是有些模块内部各端口之间是有向依赖,有些是无向即相互依赖的,无向的是否应该转化成双向的?
转化后的图是需要设置源点的,如果将图中A的1端口设为源S的话,那么根据之间的连线可以自动推导出一些模块的输入和输出端口,从而将图变成有向图。但,如果模块B的三个端口必须已知两个才能知道第三个的话,此时,连接B的2、3端口的边,要么之间有一种约束关系,要么其中一个由另一个源S'来确定,这时候又不能自动推导出有向图。
还有一个没有转化为有向图的原因就是,有时候方向是定不下来的,如模块F,可以是1->3,2->3,也可以是1->2,2->3,就是说模块内部关系导致了端口之间的依赖关系是变化的。

Sent from 北京市, 中国

2009/12/15 Wu Yin <wyw...@gmail.com>

唐正华

unread,
Dec 14, 2009, 11:16:29 PM12/14/09
to TopLanguage, python
或者转化成以端口为顶点、模块为一类连通分支,这样转化是否有利于整个系统的转化?

Sent from 北京市, 中国

2009/12/14 唐正华 <tangl...@gmail.com>

xinmin chen

unread,
Dec 14, 2009, 10:51:43 PM12/14/09
to pon...@googlegroups.com
我觉得可以考虑用Petri 网来描述。

2009/12/15 唐正华 <tangl...@gmail.com>

hao yuan

unread,
Dec 15, 2009, 2:02:06 AM12/15/09
to pon...@googlegroups.com
我的思路是:以模块b为例,模块a的输出可以等价于模块b的1端口输入,那么,模块a的输出和模块b的1端口抽象为一个结点;同理,模块a的2端口与模块c的1端口抽像为一个节点,模块a的3端口与模块d的1端口抽象为一个节点。那么,这个问题就可以简化,模块端口间的关系抽象为有向边,我们解决有向图的连通问题就行了。

2009/12/14 唐正华 <tangl...@gmail.com>

唐正华

unread,
Dec 15, 2009, 2:47:04 AM12/15/09
to pongba
不能这么等价的,因为模块间的连线还是有其自身含义的。
现在我是将模块间的连线抽象为一类边,模块内部各端口关系抽象为另一类边,这两类边不影响图的搜索算法的使用。
现在的问题在于,模块内部端口间的关系有几类,怎样将这关系抽象为边。

Sent from 北京市, 中国

2009/12/15 hao yuan <hao...@gmail.com>
330.gif

唐正华

unread,
Dec 15, 2009, 2:53:28 AM12/15/09
to pongba

Petri网是对离散并行系统的数学表示。Petri网是1960年代由C.A.佩特里发明的,适合于描述异步的、并发的计算机系统模型。Petri网既有严格的数学表述方式,也有直观的图形表达方式。

由于Petri网能表达并发的事件,被认为是自动化理论的一种。研究领域趋向认为Petri网是所有流程定义语言之母。


经典Petri网

经典的Petri网是简单的过程模型,由两种节点:库所和变迁,有向弧,以及令牌等元素组成的。

结构

Petri网的元素:

  • 库所(Place)圆形节点
  • 变迁(Transition)方形节点
  • 有向弧(Connection)是库所和变迁之间的有向弧
  • 令牌(Token)是库所中的动态对象,可以从一个库所移动到另一个库所。

Petri网的规则是:

  • 有向弧是有方向的
  • 两个库所或变迁之间不允许有弧
  • 库所可以拥有任意数量的令牌

行为

如果一个变迁的每个输入库所(input place)都拥有令牌,该变迁即为被允许(enable)。一个变迁被允许时,变迁将发生(fire),输入库所(input place)的令牌被消耗,同时为输出库所(output place)产生令牌。

注意:

  • 变迁的发生是原子的;
  • 有两个变迁都被允许的可能,但是一次只能发生一个变迁;
  • 如果出现一个变迁,其输入库所的个数与输出库所的个数不相等,令牌的个数将发生变化;
  • Petri网络是静态的;
  • Petri网的状态由令牌在库所的分布决定。

两个变迁争夺一个令牌的情形被称之为冲突

多个弧连接两个节点的情况。在输入库所和变迁之间的弧的个数决定了该变迁变为被允许需要的令牌的个数。弧的个数决定了消耗/产生的令牌的个数。



---

是一个新思路,有点像用量子力学的角度对分析系统。但“变迁”节点仍然不易去抽象的。

Sent from 北京市, 中国

2009/12/15 xinmin chen <ilove...@gmail.com>
Reply all
Reply to author
Forward
0 new messages