您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做|FPGA代做|python代做-PSO算法

时间:2019-11-1 18:31:58 点击:

  核心提示:MATLAB代做|FPGA代做|python代做-PSO算法...
function PSOforTSP 
%初始化
Alpha=0.25; %个体经验保留概率
Beta=0.25; %全局经验保留概率 
NC_max=200; %最大迭代次数
m=80;  %微粒数
CityNum=10;  %问题的规模(城市个数)
[dislist,Clist]=tsp(CityNum);

NC=1;%迭代计数器
R_best=zeros(NC_max,CityNum); %各代最佳路线
L_best=inf.*ones(NC_max,1);%各代最佳路线的长度
L_ave=zeros(NC_max,1);%各代路线的平均长度

%产生微粒的初始位置
for i=1:m
    x(i,:)=randperm(CityNum);
    L(i)=CalDist(dislist,x(i,:));
end
p=x; %p为个体最好解
pL=L;
[L_best(1,1) n_best]=min(L);
R_best(1,:)=x(n_best,:);
L_ave(1,1)=mean(L);

%初始交换序
v=ones(CityNum-1,2,m)*(round(rand*(CityNum-1))+1);

figure(1);
while NC<=NC_max %停止条件之一:达到最大迭代次数
    for i=1:m
        xnew(i,:)=changeFun(x(i,:),v(:,:,i));
        A=changeNum(x(i,:),p(i,:));
        Arand=randFun(A,Alpha);
        xnew(i,:)=changeFun(xnew(i,:),Arand);
        B=changeNum(x(i,:),R_best(NC,:));
        Brand=randFun(B,Beta);
        xnew(i,:)=changeFun(xnew(i,:),Brand);
        v(:,:,i)=changeNum(x(i,:),xnew(i,:));
        L(i)=CalDist(dislist,xnew(i,:));
        if L(i)<pL(i)
            p(i,:)=xnew(i,:);
            pL(i)=L(i);
        end
    end
    [L_bestnew n_best]=min(L);
    R_bestnew=xnew(n_best,:);
    L_ave(NC+1,1)=mean(L);
    if L_bestnew<L_best(NC,1)
        L_best(NC+1,1)=L_bestnew;
        R_best(NC+1,:)=R_bestnew;
    else
        L_best(NC+1,1)=L_best(NC,1);
        R_best(NC+1,:)=R_best(NC,:);
    end
    x=xnew;
    drawTSP10(Clist,R_best(NC,:),L_best(NC,1),NC,0);
    %pause;
    NC=NC+1;
end

%输出结果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:);
Shortest_Length=L_best(Pos(1));
figure(2);
plot([L_best L_ave]);
legend('最短距离','平均距离');
end

function xnew=changeFun(x,C);
changeLen=size(C,1);
xnew=x;
for i=1:changeLen
    a=xnew(C(i,1));
    xnew(C(i,1))=xnew(C(i,2));
    xnew(C(i,2))=a;
end
end

function C=changeNum(x,y);
CityNum=size(x,2);
C=ones(CityNum-1,2);
for i=1:CityNum-1
    pos=find(x==y(i));
    C(i,:)=[i pos];
    x=changeFun(x,C(i,:));
end
end

function v=randFun(v,w);
randLen=size(v,1);

for i=1:randLen
    if rand>w
        v(i,2)=v(i,1);
    end
end    
end

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

Tags:PSO算法 
作者:PSO算法 来源:PSO算法
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment