|
2-GA算法(遗传算法)的栅格路径寻优计算
链接:https://pan.baidu.com/s/150bjegoQh40S5HmfnQqGEQ 密码:f9tr
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
主程序:- clc,clear,close all
- warning off
- global nvar
- tic
- %% MAP
- load('data2.mat');
- K = 4; % 与节点自身相连的节点数
- [x,y,A,dij, citynum,a,b] = init_map(data2,K);
- %% 目标
- startpoint=39; % 起始节点
- endpoint=18; % 终止节点
- %% GA
- popmin = [1, 1, 1]; % Lb
- popmax =[ 51, 51, 51]; % Ub
- pc = 0.75; % 0-1之间
- pm = 0.05; % 0-1之间
- nvar = 3; % 3个未知数
- itermax = 30; % 迭代次数
- sizepop = 30; % 种群
- %% 初始化种群
- for i=1:sizepop
- pop(i,:) = code(popmin,popmax); % 实数编码
- [path{i}, fitness(i)] = fun_dijkstra([startpoint, pop(i,:), endpoint], A, dij ); % 目标函数值
- end
- [bestfitness,index] = min(fitness); % 极小值
- zbest.pop = pop(index,:); % 最佳个体
- fitnessgbest = fitness; % 个体最优
- gbest = pop; % 最优种群
- fitnesszbest = bestfitness; % 全局最优
- zbest.path = path{index}; % 最佳个体对应的最优路径
- %% 迭代寻优
- for i=1:itermax
- disp(['当前迭代次数:', num2str(i)])
- % 选择算子
- pop = select(sizepop,pop,fitness,popmin,popmax);
- % 交叉算子
- pop = cross(sizepop,pc,pop,popmin,popmax);
- % 变异
- pop = mut(sizepop,pm,pop,popmin,popmax);
-
- for j=1:sizepop
- [path{j}, fitness(j)] = fun_dijkstra( [startpoint, pop(j,:), endpoint], A, dij ); % 目标函数值
- if fitness(j)< fitnessgbest(j)
- fitnessgbest(j) = fitness(j);
- gbest(j,:) = pop(j,:);
- end
- if fitness(j)<fitnesszbest
- fitnesszbest = fitness(j);
- zbest.pop = pop(j,:); % 最佳个体
- zbest.path = path{j}; % 最佳个体对应的最优路径
- end
- end
- fitness_iter(i) = fitnesszbest;
- end
- %% 结果显示
- figure,
- plot(fitness_iter,'ro-','linewidth',2)
- toc
- disp('最优解')
- disp(zbest.pop)
- fprintf('\n')
- disp('最优解对应的最优路径')
- disp(zbest.path)
- fprintf('\n')
- %% 绘图
- figure(3)
- colormap([0 0 0;1 1 1]),pcolor(0.5:size(a,2)+0.5,0.5:size(a,1)+0.5,b)
- hold on
- % 节点网络结构初始化
- for i=1:citynum
- plot(x(i)+0.5,y(i)+0.5,'ro','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8);
- hold on;
- text(x(i)+0.5,y(i)+0.5+0.2,num2str(i),'Color',[1 0 0]);
- end
- % 连线
- for i=1:length(zbest.path)-1
- plot([x(zbest.path(i))+0.5,x(zbest.path(i+1))+0.5],[y(zbest.path(i))+0.5,y(zbest.path(i+1))+0.5],'b-','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8,'linewidth',2);
- end
- axis tight;
- axis off;
- hold off
复制代码
参考:
【1】基于穷举法的机器人避障路径寻优(免费)
【2】智能车辆局部避障路径规划及横向运动控制研究_陈东
【3】3-PSO算法(粒子群算法)的栅格路径寻优计算
|
|