遗传算法求解图的最小生成树

1、最小生成树

  用n-2位自然数唯一地表达出一颗n个节点的生成树,而且交叉变异仍是一棵生成树。
有三个约束:

  1. 该树覆盖所有的顶点
  2. 概树是连通的
  3. 该树是一棵树,既没有回路
2、编码(prufer数编码)
  • 1、设节点i是标号最小的叶子
  • 2、若i 与j 相连,令j 是编码中的第一个数字,删去边(i, j)
  • 3、转步骤1,直到剩下一条边为止

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3、解码
  • 1、令Prufer数中的节点集为P,不包含在P中的节点集为P非
  • 2、若i为P非中标号最小的节点,j为P上最左边数字,连接边(i, j),并从P非去掉i,从P中去掉j ,若j 不再在P中,将j 加入P非中
  • 3、重复步骤2,直到P为空,P非中剩下(s, r)
  • 4、连接(s, r)
4、适应函数

e v a l ( T ) = C / W ( T ) eval(T)=C/W(T) eval(T)=C/W(T)其中C是一个常数, W ( T ) = ∑ e i j ∈ T W i j W(T)=\sum_{e_{ij}\in T}W_{ij} W(T)=eijTWij为生成数的权值

5、选择策略

 &emsp依然是经典的轮盘赌选择方法

6、遗传算子
交叉

 &emsp采用二进制编码中的单点交叉

变异

 &emsp在[1, n]产生某一位随机整数,代表父代中的某一位

7、修复策略

  针对度约束的最小生成树问题,由于度的约束,需要使用修复程序使得约束条件能够得到满足。
  修复程序:
  若个体B中的一个顶点v违反了度的约束,即v在B中出现的次数大于 d-1 (d是度的约束),则将多余的v随机替换为其他出现次数小于 d-1 的顶点,就可以满足约束条件。

8、伪代码

#遗传算法求解最小生成树

# date:2020年3月6日
# Author: Chauncy_xu
Begin
t = 0;
initializae(P(t));
Repair(P(t));
evaluate(P(t));
while (max_gen) do
	P1(t) = parent_select(P(t));
	P2(t) = crossover(P1(t));
	P(t+1) = mutate(P2(t));
	repair(P(t+1));
	evaluate(P(t+1));
	t +=1;
end while
retuen best_solution
end
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值