分享
 
 
 

路由模拟——论文算法设计部分(2)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

§3.2 演化路由算法设计

演化路由算法的基本思想是使用自适应的演化策略,来寻找两结点间的最佳路径。如图7中的网络,由0结点开始寻找到4结点的最佳路径,我们下给出如下定义:

1, 结点集合NodeSet,即是网络中路由器的集合,也是图中的结点集。

图7中NodeSet = { 0,1,2,3,4 }。但算法的实现过程中,我们总把NodeSet视为向量,即其元素的序是必须考虑的。

2, 基因gene,即是结点集合NodeSet的元素组成的字符串。对于预先设置起点与终点的基因gene,如果按字符串的顺序,所有元素能构成图的一条路径,我们称gene是完成的(COMPLETE),即处于成熟态。

图7中,一个不成熟的gene是:

gene = 014 ;

而一个成熟gene是:

gene = 0234 。

3, 在算法中,路由的起点与终点用from与to表示,而且,始终分别为非空gene的第一个和最后一个元素。注意,非空gene的rear-node定义为to的前驱。

图7中,若由0结点开始寻找到4结点的最佳路径,则 from = 0,to = 4。而且,此时gene’s rear-node = 0 。

在此基础上,我们有如下原操作:

原操作名称 作用

*RANDOM(node-set) 在node-set中随机取一个结点

*NEXTHOP(node) 取node的邻接结点集合

*NODE(gene) 取gene元素构成的结点集合

表6 演化路由算法原操作说明表

而对于每一个基因gene,在一个网络中(其结点集合为NodeSet),都存在一个gene的对立基因_gene,满足如下关系:

NODE(_gene) + NODE(gene) = NodeSet .

对于成为成熟态(COMPLETE)的基因gene,都存储于成熟的基因集合GeneSet中。我们定义GeneSet有如下操作:

操作名称 作用

*GeneSet.AddRear(); 在尾端增加gene

*GeneSet.GetFirst(); 获得第一个gene

*GeneSet.RemoveFirst(); 删除第一个gene

*GeneSet.Sort(); 从好到坏对所有的gene排序

*GeneSet.GetBest(); 获得最好的gene

*GeneSet.RemoveHalf(); 删除一半的gene

*GeneSet.RemoveAll(); 删除所有的gene

表7 GeneSet操作说明表

如上,若由0结点开始寻找到4结点的最佳路径,则演化路由算法的基本原理是,初始化基因gene = 04,我们通过演化的方法使gene成为成熟态,即一个完整的路径。最后对种群进行排序,我们可以获得一个好的gene,即好的路径,从而得到0结点至4结点的下一站路由器。演化的一个关键是,gene由不成熟的状态到成熟态的成长过程。这个成长过程,基于上述定义中的原操作。如:

获得gene的新片段(即新结点)若为 RANDOM( NODE(_gene)),则可能新的 gene = 034;若新片段为 RANDOM( NEXTHOP(gene’s rear-node )-NODE(gene) ),则可能新的 gene = 014。新片段总是作为gene的 rear-node的后继加入gene中。

有一种情况是,NODE(gene)已经等于NodeSet,但gene仍然不是成熟态,此时我们应从gene的rear-node开始向前驱方向随机删除一段,然后让gene从新开始成长,从而使算法收敛。

此即演化路由算法寻找最佳路径的基本原理。现在定义演化路由算法。

Algorithm 1. Gene-Init.

//基因gene的初始化

BEGIN

NODE(gene) = { from , to };

END.

Algorithm 2. RANDOM( node-set ).

//从node-set中随机取出一个元素

BEGIN

以0.1的概率可能性返回操作失败;

SIZE = node-set 的集合基数;

从0到SIZE间随机返回node-set的一个结点;

END.

演化路由算法中,gene的成长策略是复合的,而基本的成长过程为保守成长、开明成长。分别定义如下:

Algorithm 3. Gene-Builder1.

//基因gene的保守成长

BEGIN

newNode = RANDOM( NEXTHOP(gene’s rear-node)-NODE(gene) );

If( RANDOM没有失败 )

增加newNode作为gene中to的新前驱元素,gene的长度增1;

END.

Algorithm 4. Gene-Builder2.

//基因gene的开明成长

BEGIN

newNode = RANDOM( NODE( _gene ) );

If( RANDOM没有失败 )

增加newNode作为gene中to的新前驱元素,gene的长度增1;

EDN.

Algorithm 5. Gene-Builder.

//基因gene的成长

BEGIN

p = 一个0到1之间的概率值;

If( p < PBUILDER ) //PBUILDER是预设的一个值

Gene-Builder1;

Else

Gene-Builder2;

END.

接下来的算法,将判断gene是否无法收敛;如果是将对gene片段进行随机删除而解除演化路由算法的死循环。

Algorithm 6. Gene-DECOMPLETE.

//判断gene是否已经不可能成为COMPLETE的了

BEGIN

If( gene IS NOT COMPLETE AND _gene IS NIL )

Return TRUE;

Else

Return FALSE;

END.

Algorithm 7. Gene-RANDOMDELETE.

//基因gene随机删除部分片段

BEGIN

SIZE = gene的长度;

randInteger = 在0到SIZE-2之间的一个随机整数;

For I = 0 To randInteger-1 Do

BEGIN

删除gene中to元素的前驱;

END;

END.

其中对GeneSet.Sort()的操作中,有gene的好与坏的比较。我们定义较好的gene,即是gene所代表路由路径在网络中耗散较少,此即gene的评价函数定义。假设网络的耗散信息由矩阵ValArray[ ][ ]存储。

Algorithm 8. Gene-Distance-Function.

//计算gene的耗散值(类于距离)

BEGIN

distance = 0;

node-set = NODE( gene );

SIZE = node-set 的集合基数;

For i = 0 To SIZE-2 Do

BEGIN

row = node-set[ i ];

col = node-set[ i +1 ];

distance = distance + ValArray[ row ][ col ];

END;

返回distance;

END.

Algorithm 9. Gene-Evolution.

//基因gene成熟后的再演化

BEGIN

{ //保守变异

Randomly select two adjacent node XY in NODE(gene) where Y != to;

node = RANDOM( NEXTHOP( X));

Change Y with node;

} & { //开明变异

Randomly select two adjacent node XY in NODE(gene) where Y != to;

node = RANDOM( NODE( _gene ) );

Change Y with node;

} & { //自舍一段

Gene-RANDOMDELETE(gene);

};

While ( gene IS NOT COMPLETE )

{ // gene成长至成熟

Gene-Builder;

If ( Gene-DECOMPLETE )

Gene-RANDOMDELETE;

};

END.

注释: Algorithm 9. 中 & 是一种按概率进行选择的策略。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有