✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)
⛄一、遗传算法路径规划问题
1 算法流程**
基于遗传算法的拣货路径问题优化算法流程如图3所示。
图3 求解拣货路径问题的遗传算法流程图
2 确定编码方案
对于一单一车的境况,采用自然数编码方式,先对订单上的货物对应在仓库中的存储位置(储位)按顺序依次进行自然数编号,然后用这些储位点编号所组成的自然数序列表示拣货路径。其具体表示方法如下:
设订单中的有4种货物需要从仓库中拣取,这4种货物分布在仓库中4个储位位置上。则可以用0表示仓库出入口,从1至4的4个自然数分别依次表示一个储位。假设该订单的拣货路径如下:
路径:出入口0→储位点1→储位点4→储位点2→储位点3→出入口0
遗传算法所表示的自然数系列为:{0 1 4 2 3 0}。
考虑到一单多车情况下拣货路径问题中订单上的拣取任务可能要通过多次车次才能完成,为了在可行解中体现出多车次的特点,将对应的自然数序列插入相应的零来体现多车特点。具体方法如下:
设订单中的有7种货物需要从仓库中拣取,这7种货物分布在仓库中7个储位位置上。则可以用0表示仓库出入口,从1至7的7个自然数分别依次表示一个储位。假设该订单的拣货路径如下:
路径1:出入口0→储位点1→储位点5→储位点7→储位点4→出入口0
路径2:出入口0→储位点2→储位点3→储位点6→出入口0
遗传算法所表示的自然数系列为:{0 1 5 7 4 0 2 3 6 0}。
其中0的作用有两点:一是表示实际的路程起始点(即本题中的仓库出入口IO),二是用来分隔GA编码。具体分隔的方法是:首先得到一个不含0的可行自然数序列{1 5 7 4 2 3 6},再从左边开始,每次加入一点,直到加入下一个点就超出车辆装载能力限制为止,按所加入的点的先后顺序排列,得到一条子路径,即就是得到第一次车次的拣货任务,比如{1 5 7 4}。再从未加入的点继续该过程,获得下一条子路径。重复此过程至所有点均被选入为止,比如{2 3 6}。再在可行自然数序列中插入相应的0将个子路径分隔开来,于是得到了染色体编码{01 5 7 4 0 2 3 6 0}。
当染色体要进行下面的交叉、变异和“进化逆转”操作时,可先将染色体编码中表示多车的0去掉,算子操作完成后再按上面分隔编码方法插入相应的0得到相应的染色体。
3 确定适应度函数
问题的适应度函数取为哈密尔顿圈的长度的倒数(无惩罚函数),但是为了避免适应度过小,本文将该函数乘上一个起调节作用的系数,系数值为:
处理后的新适应度函数如下:
其中maxdd为订单中待拣货物所在的储位点之间的最大距离,lchrom为编码后的染色体的长度,即路径中经过储位点数(包括出入口结点),X为对应可行解的拣货路径长度。
4 选择(或复制)算子和交叉算子的设计
在文中用随机生成方法产生初始解群。然后按适应度比例方法(轮盘赌选择)从父代中每次挑选两个个体,以相应的概率参加交叉变异操作。
具体的交叉操作如下:
(1)随机在串中选择一个交配区域,如两父串交配区选定为:
(2)将B的交配区域加到A的前面或后面,A的交配区域加到B的前面或后面得到:
(3)在A′中自交配区域后依次删除与交配区相同的储位号码,得到最终的两个子串为:
与其它方法相比,这种方法在两父串相同的情况下也能产生一定程度的变异效果,能维持群体的多样化特征。
5 变异算子的设计
由于后面将引入了“进化逆转”操作技术,为保持群体内个体的多样化,本文采用连续多次对换的变异技术,使可行解有较大的顺序排列上的变化,以抑制“进化逆转”的同化作用。变异操作发生的概率取值比较小(本文设计变异操作发生概率Pm的取值为0.008),一旦变异操作发生,则用随机方法产生交换次数为K(本文设计K的取值为1~100的随机整数),对所需变异操作的染色体进行K次对换(对换的两码位也是随机产生的)。最后为保持群体内个体的多样化,在文中还采用了一种对解的扰动策略——最好解连续50代不变时则随机产生新的个体20个来替换20个随机抽取的旧个体[16]。
6“进化逆转”算子的设计
本文使用的“进化逆转”是一种单方向的(朝着改进的方向)和连续多次的“逆转”操作,即对于给定的染色体,若“逆转”使染色体(可行解)的适应度提高,则执行逆转操作,否则就放弃。如此反复,直到不存在这样的逆转操作为止。这一操作实际上使给定的染色体改良到它的局部极点,这种局部爬山能力与基本遗传算法的全局搜索能力相结合在实验中显示了较好的效果。
为了尽量避免算法出现“早熟”现象,在进化初期,控制“进化逆转”算子使用概率,确保算法能在全局范围内寻优;但是到了进化后期,为了加快算法局部爬山能力,加大该算子的使用概率。具体在程序设计中处理如下:
其中Pm*为“进化逆转”算子的操作发生概率,gen表示遗传进化代数。
⛄二、部分源代码
% Genetic algorithm for path planning
%% 重要!!!!!!!!!!
% 在运行本文件之前,请预先安装MATLAB官方的Navigation toolbox,否则无法读取,
% 安装步骤:点击上方功能栏“主页”,点击“附加功能”,搜索“Navigation toolbox”,安装即可
%%
clear;
close all
imageprocess
global map source goal
load map
mapobj = binaryOccupancyMap(~map);
%case 1
% show(mapobj)
startp = [448 120];
endp = [40 201];
%case 2
% startp = [150 160];
% endp = [240 100];
[source, goal] = transco(startp, endp, mapobj); % reset coordinates
noOfPointsInSolution=2; % no. of points that represent a candidate path, excluding the source and goal. each point marks a robot turn.
NoOfGenerations=70;
PopulationSize=50;
% splineSmoothing=1; % use spline based smoothing. the code has a dependence on the resoultion, and may be set to false if large changes in resolution are made.
%%%%% parameters end here %%%%%
tic;
if ~feasiblePoint(source,map), error(‘source lies on an obstacle or outside map’); end
if ~feasiblePoint(goal,map), error(‘goal lies on an obstacle or outside map’); end
if noOfPointsInSolution<=0, error(‘noOfPointsInSolution should be greater than 1’); end
% currently the lower bounds and upper bounds are taken as 0 and 1 respectively,
% these would be re-scaled in phenotype generation to ensure that they lie inside map.
options=gaoptimset(‘Generations’,NoOfGenerations,‘PopulationSize’,PopulationSize);
[solution cost] = ga(@PathCostGA, noOfPointsInSolution2,[],[],[],[],zeros(noOfPointsInSolution2,1),ones(noOfPointsInSolution*2,1),[],options);
disp(‘click/press any key’);
if PathCostGA(solution)>size(map,1)*size(map,2) % indicating an infeasible path due to large cost due to penalties
error(‘no path found’);
end
fprintf(‘processing time=%d \nPath Length=%d \n\n’, toc,cost);
path=[source; [solution(1:2:end)‘*size(map,1) solution(2:2:end)’*size(map,2)]; goal]; % souce and goal is fixed. other points are from the GA individual representation
% reset the coordinates
path = trans(path, mapobj);
waypoints = path;
% Clothoid smoothing
[x, y, psi] = clothoidG2fit(waypoints);
path = calculateYaw(path);
figure
show(mapobj);
title(‘GA+Clothoid’);
hold on
plot(x,y, “b”);
scatter(waypoints(:, 1), waypoints(:, 2))
hold on
legend(‘GA+Clothoid’);
figure
set (gcf,‘Position’,[200,200,800,430]);
im = imread(‘img2.jpg’);
im = imresize(im,[255,502]);
im = flip(im, 1);
image(im)
hold on
axis xy
xlabel(‘X (m)’, ‘FontSize’,14,‘FontName’,‘Times New Roman’, ‘FontWeight’, ‘bold’);
ylabel(‘Y (m)’, ‘FontSize’,14,‘FontName’,‘Times New Roman’, ‘FontWeight’, ‘bold’);
plot(x,y, “r”, “Linewidth”, 1.5);
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]王宏,符卓,左武.基于遗传算法的双区型仓库拣货路径优化研究[J].计算机工程与应用. 2009,45(06)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化
2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化
5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置
9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长
10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合