python蚁群算法 路径规划_FPGA代做-蚁群算法的二维路径规划算法matlab源码程序

phePara = ones(pathCount,10)*pheUpPara(2);         %信息素

qfzPara1 = ones(10,1)*0.5;           %启发信息参数

qfzPara2 = 1.1;                      %启发信息参数

m=10;                                %种群数量

NC=500;                              %循环次数

pathk = zeros(pathCount,m);          %搜索结果记录

shortestpath = zeros(1,NC);          %进化过程记录

%% 初始最短路径

dijpathlen = 0;

vv = zeros(22,2);

vv(1,:) = S;

vv(22,:) = T;

vv(2:21,:) = v;

for i=1:pathCount-1

dijpathlen = dijpathlen + sqrt((vv(path(i),1)-vv(path(i+1),1))^2+(vv(path(i),2)-vv(path(i+1),2))^2);

end

LL = dijpathlen;

%% 经过的链接线

lines = zeros(pathCount,4);

for i = 1:pathCount

lines(i,1:2) = B(L(path(i+1)-1,1),:);

lines(i,3:4) = B(L(path(i+1)-1,2),:);

end

%% 循环搜索

for num = 1:NC

%% 蚂蚁迭代寻优一次

for i=1:pathCount

for k=1:m

q = rand();

qfz(i,:) = (qfzPara2-abs((1:10)'/10-qfzPara1))/qfzPara2; %启发信息

if q<=pheThres%选择信息素最大值

arg = phePara(i,:).*(qfz(i,:).^pheCacuPara);

j = find(arg == max(arg));

pathk(i,k) = j(1);

else  % 轮盘赌选择

arg = phePara(i,:).*(qfz(i,:).^pheCacuPara);

sumarg = sum(arg);

qq = (q-pheThres)/(1-pheThres);

qtemp = 0;

j = 1;

while qtemp < qq

qtemp = qtemp + (phePara(i,j)*(qfz(i,j)^pheCacuPara))/sumarg;

j=j+1;

end

j=j-1;

pathk(i,k) = j(1);

end

% 信息素更新

phePara(i,j) = (1-pheUpPara(1))*phePara(i,j)+pheUpPara(1)*pheUpPara(2);

end

end

%% 计算路径长度

len = zeros(1,k);

for k=1:m

Pstart = S;

Pend = lines(1,1:2) + (lines(1,3:4)-lines(1,1:2))*pathk(1,k)/10;

for l=1:pathCount

len(1,k) = len(1,k)+sqrt(sum((Pend-Pstart).^2));

Pstart = Pend;

if l

Pend = lines(l+1,1:2) + (lines(l+1,3:4)-lines(l+1,1:2))*pathk(l+1,k)/10;

end

end

Pend = T;

len(1,k) = len(1,k)+sqrt(sum((Pend-Pstart).^2));

end

%% 更新信息素

% 寻找最短路径

minlen = min(len);

minlen = minlen(1);

minant = find(len == minlen);

minant = minant(1);

% 更新全局最短路径

if minlen < LL

LL = minlen;

end

% 更新信息素

for i=1:pathCount

phePara(i,pathk(i,minant)) = (1-pheUpPara(1))* phePara(i,pathk(i,minant))+pheUpPara(1)*(1/minlen);

end

shortestpath(num) = minlen;

end

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值