《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 37470|回复: 546
收起左侧

[源码] 【案例23】基于蚁群算法的二维路径规划算法

    [复制链接]
发表于 2010-12-29 11:47:58 | 显示全部楼层 |阅读模式
本贴只有预定书籍用户才能回复。

MATLAB书籍预定方法和优惠服务:http://www.matlabsky.com/thread-9258-1-1.html

非常重要:本书所有程序 均在Matlab R2009a 下调试通过,请注意您所使用的Matlab版本是否与此相符!


(有些程序需要额外的工具箱,请注意安装)


程序文件下载地址:

chapter23.rar (3.08 KB, 下载次数: 414)

评分

参与人数 1贝壳 +1 收起 理由
祗若昔 + 1

查看全部评分

发表于 2010-12-30 21:48:31 | 显示全部楼层
下载仔细研究一下思路~~~~~~~~~~~~~~
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-16 14:50:52 | 显示全部楼层
clear all;
citynum=[0.4 0.4439;0.2439 0.1463;0.1707 0.2293;0.2293 0.761;0.5171 0.9414;0.8732 0.6536;0.6878 0.5219;0.8488 0.3609;0.6683 0.2536;0.6195 0.2634;0.9125 0.9568];
n=11;
A=500;B=500;D=400;
C=200;
U0=0.2;
T=0.00001;
for W=1:10
    Vx=0.5+rand(11,11)*0.1;
    Ux=atanh(2*Vx-1)*U0;
time=clock;
display(['W is ',num2str(W),', current time is  ',num2str(time(1,4:6))])
for N=1:500
    %求导数
    %求导数公式中的第二项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:11
        for j=1:11
            sum=0;
            for k=1:11
                if k~=j
                   sum=sum+Vx(i,k);
                end
            end
            d2(i,j)=sum;
        end
    end
    d2=-A*d2;
    %求导数公式中的第三项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for j=1:11
        for i=1:11
            sum=0;
            for k=1:11
                if k~=i
                   sum=sum+Vx(k,j);
            end
         end
         d3(i,j)=sum;
        end
    end
    d3=-B*d3;
    %求导数公式中的第四项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    sum=0;
    for i=1:11
        for j=1:11
            sum=sum+Vx(i,j);
        end
    end
    d4=-C*(sum-n);
    d4=d4*ones(11,11);
    %求导数公式中的第五项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    d9=zeros(11,1);
    for j=1:11
        if j==1
            for i=1:11
                 sum1=0;
                for k=1:11
                    if k~=i
                     
                       sum1=sum1+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,2)+Vx(k,11));
                    end   
                end
                d6(i,j)=sum1;
               
            end
        elseif j==11
            for i=1:11
                sum2=0;
                for k=1:11
                    if k~=i
                       
                       sum2=sum2+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,1)+Vx(k,10));
                    end   
                end
                d7(i,1)=sum2;
            end
        else
            
            for i=1:11
                sum3=0;
                for k=1:11
                    if k~=i
                       
                       sum3=sum3+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,j-1)+Vx(k,j+1));
                    end   
                end
                d8(i,1)=sum3;
            end
            d9=[d9 d8];
        end
    end
    d10=d9(:,2:10);
    d5=[d6 d10 d7];
    d5=-D*d5;
    d=-Ux+d2+d3+d4+d5;
    Ux=Ux+T*d;
    X=Ux/0.02;
    Vx=[1+tanh(X)]/2;
end   
  for x=1:11
        for i=1:11
            if (Vx(x,i)<0.001)
                Vx(x,i)=0;
            end
            if (Vx(x,i)>0.05)
                Vx(x,i)=1;
            end   
        end
    end  
Vx
%fid = fopen('tsp7.txt','a+');

%fprintf(fid,'\n\nnext one\n');
%fprintf(fid,'%5.5f\n',W);
%fprintf(fid,'%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f\n',Vx);
%fclose(fid);
end
%time=clock;
%display(['end time is  ',num2str(time(1,4:6))])clear all;
citynum=[0.4 0.4439;0.2439 0.1463;0.1707 0.2293;0.2293 0.761;0.5171 0.9414;0.8732 0.6536;0.6878 0.5219;0.8488 0.3609;0.6683 0.2536;0.6195 0.2634;0.9125 0.9568];
n=11;
A=500;B=500;D=400;
C=200;
U0=0.2;
T=0.00001;
for W=1:10
    Vx=0.5+rand(11,11)*0.1;
    Ux=atanh(2*Vx-1)*U0;
time=clock;
display(['W is ',num2str(W),', current time is  ',num2str(time(1,4:6))])
for N=1:500
    %求导数
    %求导数公式中的第二项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:11
        for j=1:11
            sum=0;
            for k=1:11
                if k~=j
                   sum=sum+Vx(i,k);
                end
            end
            d2(i,j)=sum;
        end
    end
    d2=-A*d2;
    %求导数公式中的第三项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for j=1:11
        for i=1:11
            sum=0;
            for k=1:11
                if k~=i
                   sum=sum+Vx(k,j);
            end
         end
         d3(i,j)=sum;
        end
    end
    d3=-B*d3;
    %求导数公式中的第四项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    sum=0;
    for i=1:11
        for j=1:11
            sum=sum+Vx(i,j);
        end
    end
    d4=-C*(sum-n);
    d4=d4*ones(11,11);
    %求导数公式中的第五项
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    d9=zeros(11,1);
    for j=1:11
        if j==1
            for i=1:11
                 sum1=0;
                for k=1:11
                    if k~=i
                     
                       sum1=sum1+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,2)+Vx(k,11));
                    end   
                end
                d6(i,j)=sum1;
               
            end
        elseif j==11
            for i=1:11
                sum2=0;
                for k=1:11
                    if k~=i
                       
                       sum2=sum2+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,1)+Vx(k,10));
                    end   
                end
                d7(i,1)=sum2;
            end
        else
            
            for i=1:11
                sum3=0;
                for k=1:11
                    if k~=i
                       
                       sum3=sum3+distance(citynum(i,1),citynum(k,1),citynum(i,2),citynum(k,2))*(Vx(k,j-1)+Vx(k,j+1));
                    end   
                end
                d8(i,1)=sum3;
            end
            d9=[d9 d8];
        end
    end
    d10=d9(:,2:10);
    d5=[d6 d10 d7];
    d5=-D*d5;
    d=-Ux+d2+d3+d4+d5;
    Ux=Ux+T*d;
    X=Ux/0.02;
    Vx=[1+tanh(X)]/2;
end   
  for x=1:11
        for i=1:11
            if (Vx(x,i)<0.001)
                Vx(x,i)=0;
            end
            if (Vx(x,i)>0.05)
                Vx(x,i)=1;
            end   
        end
    end  
Vx
%fid = fopen('tsp7.txt','a+');

%fprintf(fid,'\n\nnext one\n');
%fprintf(fid,'%5.5f\n',W);
%fprintf(fid,'%3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f %3.3f\n',Vx);
%fclose(fid);
end
%time=clock;
%display(['end time is  ',num2str(time(1,4:6))])
回复 支持 反对

使用道具 举报

发表于 2017-12-10 23:15:24 | 显示全部楼层
老师您好,,我想要三十个案例分析第二十三章的完整代码,在你的书中,没有具体画出优化之后的图形,,我想拿来学习学习。谢谢老师百忙之中回复。谢谢
回复 支持 反对

使用道具 举报

发表于 2010-12-30 16:39:34 | 显示全部楼层
这个帖子不回对不起自己!
MATLAB技术论坛电子期刊的确不错,值得一看
发表于 2011-1-3 17:20:13 | 显示全部楼层
发表于 2011-2-8 15:37:51 | 显示全部楼层
还是先下了来再说吧!
发表于 2011-2-11 11:51:43 | 显示全部楼层
发表于 2011-2-19 17:50:22 | 显示全部楼层
对智能算法很感兴趣,希望学完后能应用于实际环境
发表于 2011-2-26 16:34:18 | 显示全部楼层
来看一下实际情况,自己好好的修改一下,应该就可以了.......
发表于 2011-3-6 13:41:44 | 显示全部楼层
【案例23】基于蚁群算法的二维路径规划算法
发表于 2011-3-7 19:35:54 | 显示全部楼层
谢谢,拿过来学习参考以下,希望能够有所帮助!
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-8-12 14:57 , Processed in 0.056409 second(s), 13 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表