Inver-over 算子 1998:Inver-over 算子可以看作是GA中交叉和变异的混合方法
Inver-over步骤:
- 随机初始化种群P
- 如果没达到temination,对每一个个体
,
,随机从
中选择一个city c
- 执行下面的循环,生成随机数,如果rand()<=p,从
剩余的city中随机选择一个
;如果rand()>p,从P中随机选择一个个体,然后选择c下一个位置的city。执行上面的循环,直到选择的
是c的下一个city则停止
- 计算eval(si)>eval(
),
更优则替换
。
举个例子:如果 如果选择的city c=3,产生的随机数小于p,则从
中选择另一个city
=8,将c下一个位置与
之间的数字全部逆序,则
;;另一种情况,如果产生的随机数大于p,则从种群P中随机选择一个个体,假设选择的个体是
,则选择c的下一个city,这里是5,作为
,然后将
中c下一个位置与
之间的数字全部逆序
,上面的过程执行多次,直到
是c的下一个city。比如当前个体是
,当前选中的city是6,不管随机数与p比较后选择那种方案生成
,如果
是8的话,循环结束。
实验部分:种群P=100,random inversion 概率p=0.02,结束条件是如果最后10次迭代最好的solution都没有得到改善。测试数据是TSPLIB。实验比较了simple inversion(p=1.0)和Lin-Kerninghan算法,前者时间和效果相差比较大,后者时间更短但是结果没有达到最优值。