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算法,前者时间和效果相差比较大,后者时间更短但是结果没有达到最优值。