路径规划基于粒子群遗传求解多无人机三维路径规划matlab源码
Posted Matlab咨询QQ1575304183
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了路径规划基于粒子群遗传求解多无人机三维路径规划matlab源码相关的知识,希望对你有一定的参考价值。
1、遗传算法的基本思想
遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
遗传算法(Genetic Algorithm)遵循自然界“适者生存、优胜劣汰”的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。
达尔文进化论的主要观点是:物竞天择,适者生存。遗传算法(Genetic Algorithm)的基本思想就是模仿自然进化过程,通过对群体中具有某种结构形式的个体进行遗传操作,从而生成新的群体,逐渐逼近最优解。在求解过程中设定一个固定规模的种群,种群中的每个个体都表示问题的一个可能解,个体适应环境的程度用适应度函数判断,适应度差的个体被淘汰,适应度好的个体得以继续繁衍,繁衍的过程中可能要经过选择、交叉、变异,形成新的族群,如此往复,最后得到更多更好的解。
(1)编码:将问题的候选解用染色体表示,实现解空间向编码空间的映射过程。遗传算法不直接处理解空间的决策变量,而是将其转换成由基因按一定结构组成的染色体。编码方式有很多,如二进制编码、实数向量编码、整数排列编码、通用数据结构编码等等。本文将采用二进制编码的方式,将十进制的变量转换成二进制,用0和1组成的数字串模拟染色体,可以很方便地实现基因交叉、变异等操作。
(2)种群初始化:产生代表问题可能潜在解集的一个初始群体(编码集合)。种群规模设定主要有以下方面的考虑:从群体多样性方面考虑,群体越大越好,避免陷入局部最优;从计算效率方面考虑,群体规模越大将导致计算量的增加。应该根据实际问题确定种群的规模。产生初始化种群的方法通常有两种:一是完全随机的方法产生;二是根据先验知识设定一组必须满足的条件,然后根据这些条件生成初始样本。
(3)计算个体适应度:利用适应度函数计算各个个体的适应度大小。适应度函数(Fitness Function)的选取直接影响到遗传算法的收敛速度以及能否找到最优解,因为在进化搜索中基本不利用外部信息,仅以适应度函数为依据,利用种群每个个体的适应程度来指导搜索。
(4)进化计算:通过选择、交叉、变异,产生出代表新的解集的群体。选择(selection):根据个体适应度大小,按照优胜劣汰的原则,淘汰不合理的个体;交叉(crossover):编码的交叉重组,类似于染色体的交叉重组;变异(mutation):编码按小概率扰动产生的变化,类似于基因突变。
(5)解码:末代种群中的最优个体经过解码实现从编码空间向解空间的映射,可以作为问题的近似最优解。这是整个遗传算法的最后一步,经过若干次的进化过程,种群中适应度最高的个体代表问题的最优解,但这个最优解还是一个由0和1组成的数字串,要将它转换成十进制才能供我们理解和使用。
(1)种群的规模
种群不宜过大也不宜过小。种群规模的一个建议值为0-100。
(2)变异概率
变异概率也不宜过大或者过小。一般取值为0.0001-0.2。
(3)交换概率
不宜过大或者过小。一般取值 为0.4-0.99。
(4)进化代数
不宜过大或者过小。一般取值为100-500。
(5)种群初始化
初始种群的生成是随机的。在初始种群的赋予之前,尽量进行一个大概的区间估计,避免初始种群分布在远离最优解的编码空间,导致遗传算法的搜索范围受到限制。
粒子群算法是一种有效的全局寻优算法,是基于群体智能理论的优化算法,通过群体中粒子间的合作和竞争产生的群体智能指导优化搜索。与传统的进化算法相比,粒子群算法保留了基于种群的全局搜索策略,但是其采用的速度-位移模型,操作简单,避免了复杂的遗传操作,它特有的记忆使其可以动态跟踪当前的搜索情况调整其搜索策略。由于每代种群中的解具有“自我”学习提高和向“他人”学习的双重优点,从而能再较少的迭代次数内找到最优解。
clc;
clear;
close all;
model =CreateModel();
tic;
plotmap(model);
global_chromosome =Muti_Uav_Ga(model);
toc;
function [ cost,sol,costs ] = FitnessFunction( chromosome,model )
%UNTITLED2 Summary of this function goes here改进:用局部极值来进行交叉操作
% Detailed explanation goes here
for uav=1:model.UAV
x= zeros(1,model.dim);
y= zeros(1,model.dim);
z = zeros(1,model.dim);
%取第uav个航路的坐标
for i=1:model.dim
x(i) = chromosome.pos(i,1,uav);
y(i) = chromosome.pos(i,2,uav);
z(i) = chromosome.pos(i,3,uav);
end
sx = model.sx(uav);
sy = model.sy(uav);
sz = model.sz(uav);
ex = model.endp(1);
ey =model.endp(2);
ez=model.endp(3);
xobs = model.xobs;
yobs = model.yobs;
zobs = model.zobs;
robs = model.robs;
XS=[sx x ex];
YS=[sy y ey];
ZS=[sz z ez];
k =numel(XS);
TP =linspace(0,1,k);
tt =linspace(0,1,50);
xx =[];
yy =[];
zz=[];
for i=1:k-1
%每一段向量分成10个点
x_r = linspace(XS(i),XS(i+1),10);
y_r= linspace(YS(i),YS(i+1),10);
z_r =linspace(ZS(i),ZS(i+1),10);
xx = [xx,x_r];
yy = [yy,y_r];
zz =[zz ,z_r];
end
%calc L
dx =diff(xx);
dy =diff(yy);
dz = diff(zz);
Length = sum(sqrt(dx.^2+dy.^2+dz.^2));
nobs = numel(xobs);
violation=0;
for i=1:nobs
d = sqrt( (xx-xobs(i)).^2+(yy-yobs(i)).^2 );
v = max(1-d/robs(i),0);
violation = violation + mean(v);
end
sol(uav).TP=TP;
sol(uav).XS =XS;
sol(uav).YS=YS;
sol(uav).ZS=ZS;
sol(uav).tt=tt;
sol(uav).xx=xx;
sol(uav).yy=yy;
sol(uav).zz=zz;
sol(uav).dx=dx;
sol(uav).dy=dy;
sol(uav).dz=dz;
sol(uav).Length=Length;
sol(uav).violation=violation;
sol(uav).IsFeasible=(violation==0);
%计算协调适应值
% 3、飞行高度限制
high=0;
for k=1:numel(XS)
x=XS(k);
y=YS(k);
h=terrain(x,y);
if ZS(k)<=(h+10) %限制飞行最低高度
high=high+10000;
elseif ZS(k)>375 %限制飞行最高高度
high=high+10000;
else
high=high+abs(ZS(k)-287); %计算与理想高度差距和
end
end
%z
w1 =0.03;
w2=0.3;
w3=0.1;
w4=0.2;
%markov evaluatea
%获取所有维度的坐标
r_xx=[];r_yy=[];r_zz=[];
for i=2:numel(XS)-2
%每一段向量分成10个点
r_x = linspace(XS(i),XS(i+1),3);
r_y= linspace(YS(i),YS(i+1),3);
r_z =linspace(ZS(i),ZS(i+1),3);
r_xx = [r_xx,r_x];
r_yy = [r_yy,r_y];
r_zz =[r_zz ,r_z];
end
Allpos = [r_xx',r_yy',r_zz'];
[stateProbabilityProcess, expectedCostProcess]=MarkovEvaluate(Allpos,model);
sol(uav).MarkovState = stateProbabilityProcess;
sol(uav).MarkovCost = expectedCostProcess;
sol(uav).costs=[w1*Length,w3*high,w4*mean(expectedCostProcess)*1000];
single_cost(uav)= w1*Length +w3*high+w4*mean(expectedCostProcess)*1000;
sol(uav).cost =single_cost(uav);
end
cost =sum(single_cost);
costs=single_cost;
end
完整代码或者仿真咨询添加QQ1575304183
以上是关于路径规划基于粒子群遗传求解多无人机三维路径规划matlab源码的主要内容,如果未能解决你的问题,请参考以下文章
三维路径规划基于matlab粒子群算法无人机三维路径规划含Matlab源码 192期
三维路径规划基于matlab粒子群算法无人机山地三维路径规划含Matlab源码 1831期
三维路径规划基于matlab球面矢量粒子群算法无人机三维路径规划含Matlab源码 1682期