改良圈算法(matlab+算法过程实例)

改良圈算法的目的是得到一个较好的初始解。在遗传算法中就应用到了该算法。

首先,本文介绍改良圈的背景是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

下面的手写片段帮助理解,该算法的原理与过程。

发布了50 篇原创文章 · 获赞 13 · 访问量 8821

猜你喜欢

转载自blog.csdn.net/weixin_43770577/article/details/99337237