改良圈算法的目的是得到一个较好的初始解。在遗传算法中就应用到了该算法。
首先,本文介绍改良圈的背景是TSP问题(旅行商问题),可参加《数学建模算法与应用》。
改良圈算法是基于最邻近算法的。比如,我们地图上有1,2,3,4这四个点,我们首选初始路径不妨为1->2->3->4。假设他们的权值矩阵是w,则初始路径的距离总和为w12+w23+w34,我们如果想要走最短的路径,可以让计算机自行搜索,也就是穷举法。那么,我们穷举的原则是什么,就是目前是1,2,3,4,那么下次状态是什么?而改良圈算法给予了计算机最邻近的原则,即让计算机下次搜索1,3,2,4。也就是交换2的临近的元素3.那么再下一状态就是1,4,2,3。
另外,需注意的是改良圈算法的解是一个较好的解,并不是最优解。因为,改良圈算法的搜索规则还是不够随机性,容易陷入局部最优解,从而退出算法。所以要得到尽可能的全局最优解,还是继续利用遗传算法继续求解。
下面是基于TSP问题中的改良圈算法的matlab的片段。
L=101;一共102个点
w;%距离矩阵
c=randperm(100);%生成100以内的随机序列,最为初始解
c1=(1,c+1,101);%1代表起点,101代表固定的终点。
for k=1:100
flag=0;
for m=1:L-3
for n=m+2:L-1
if w(c1(m),c1(n))+w(c1(m+1),c1(n+1))<w(c1(m),c1(m+1))+w(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1)%将m+1:n范围的元素旋转180度。
end
end
end
end
下面的手写片段帮助理解,该算法的原理与过程。