1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y52Xk5pp
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。
4.部分源码
Lgrid = 3;
Speed1 = 0.75;
Speed2 = Speed1/2;
Navg = 1;
%GA种群
Pop = 100*Navg;%每个AVG分配100个种群
%最大进化代数
Iteration = 200;
%交叉概率
P1 = 0.99;
%变异概率
P2 = 0.01;
%起点
Sp1 = 3;
%终点
Ep1 = 313;
%栅格地图,可以自己修改,这个图是要求中的示意图
G_matrix = zeros(20,20);
[RG,CG] = size(G_matrix);
for i1 = 1:5
for j = 1:5
G_matrix([5:6]+(i1-1)*3,[5:6]+(j-1)*3)=1;
end
end
Xstart = Sp1-CG*floor(Sp1/CG)+1;
Ystart = floor(Sp1/CG);
Xend = Ep1-CG*floor(Ep1/CG)+1;
Yend = floor(Ep1/CG);
func_maps(G_matrix);
hold on
plot(Xstart,Ystart+1,'r*');
hold on
plot(Xend,Yend+1,'bs');
%由于转弯速度不一样,所以需要对转弯作为单独的目标进行优化
% %路径长度权值
% W1 = 1;
% %转弯权重
% W2 = 4;
cnt = 1;
%路径变量
Paths_save= {};
[R1,C1] = size(G_matrix);
if G_matrix(Xstart+1,Ystart+1)==1 | G_matrix(Xend+1,Yend+1)==1
msgbox('起点或者终点和障碍物重合');
else
%初始化
Path_cnt = Yend - Ystart + 1;
pop = zeros(Pop, Path_cnt);
for i1 = 1:Pop
pop(i1,1) = Sp1;
j = 1;
for i2 = Ystart+1:Yend-1
j = j + 1;
OK = [];
for i3 = 1:C1
%栅格
idx = (i3-1) + (i2-1)*C1;
if G_matrix(i2,i3) == 0
OK = [OK,idx];
end
end
OK_idx = length(OK);
index = randi(OK_idx);%随机整数
pop(i1,j) = OK(index);
end
pop(i1,end) = Ep1;
%构成路径
new_pop2 = func_genpath(pop(i1,:),G_matrix,C1);
if isempty(new_pop2)==0
Paths_save(cnt,1) = {new_pop2};
cnt = cnt + 1;
end
end
%路径长度
[Len_path,Len_time] = func_pathlength(Paths_save,C1);
%目标值
fitness = 1./Len_time;
minLens = zeros(1,Iteration);
for i1 = 1:Iteration
i1
%选择
new_pop2 = func_sel(Paths_save,fitness);
%交叉
new_pop2 = func_cross(new_pop2,P1);
%变异
new_pop2 = func_mut(new_pop2, P2, G_matrix, C1);
%更新
Paths_save = new_pop2;
%计算适应度值
[Len_path,Len_time] = func_pathlength(Paths_save,C1);
fitness = 1./Len_time;
[RR,CC] = max(fitness);
minLens(1,i1) = Len_time(1,CC);
end
figure;
plot(minLens, 'b')
xlabel('迭代');
ylabel('总时间');
[V,min_index] = max(fitness);
minp = Paths_save{min_index,1};
figure
func_maps(G_matrix);
hold on;
[V,Iss] = size(minp);
for i1 = 1:Iss
Xmin(1,i1) = mod(minp(1,i1),C1)+1;
Ymin(1,i1) = fix(minp(1,i1)/C1)+1;
end
hold on;
plot(Xmin,Ymin,'b','linewidth',2);
xlabel('x');
ylabel('y');
end
02_104m