【优化求解】基于matlab遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】

该博客探讨了在偏远群岛环境下,如何利用遗传算法优化物流系统的中心岛屿选址、航线规划和船只选择。博主是一名Matlab仿真开发者,通过模拟生物进化过程,应用遗传算法解决多目标优化问题,如运输成本和存储成本的平衡。文章介绍了算法的基本原理,并展示了部分源代码,涉及种群、适应度、遗传算子等概念。最终,通过迭代和适应度评估,找到可能的最优解决方案。
摘要由CSDN通过智能技术生成

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、背景介绍

假定某群岛海域有20个小岛,每个岛屿各产不同种类的海鲜,现需对各岛屿的海鲜进行外向运输,选取一个中心岛屿作为中心枢纽,(以下称其为中心岛);各个岛屿的货物运送到中心枢纽岛屿,然后从中心岛运往大陆,其中参考各方因素确定最优的运送路线,各个岛屿到中心岛运送的船只有两种船型;并对船只进行选择。运用matlab编程,禁忌搜索方法。
鉴于偏远岛屿的地理特点,其交通网络一般由三个节点组成:大陆港口、中心岛和卫星岛。大陆港口是海岛依托大陆的物流运输通道;中心岛是收集周围岛屿输送物资的枢纽;卫星岛是供应生产物资到中心岛物资的末端岛屿。
首先,由于海上航行受台风影响很大,需要防止岛间运输物资中断,分析了该地区台风发生的统计资料,并结合各岛的生活资料,通过数据拟合得到台风影响时间的概率分布曲线。在一定的保证率下,每个岛屿的日平均生产量在不腐坏的前提下,建立运输模型。那么,对中心岛的位置和交通的优化是必须的。其中运输系统结构包括航线数量、运输组织形式及到达顺序、每条航线的船型及时刻表、各岛码头规模等;建立和优化存储系统(包括存储容量和周期性供应等)。
显然,运输系统成本和存储系统是优化目标统一成本的两个矛盾方面,即如果某一航线的船舶尽可能满载,则可以延长运输计划的间隔,从而降低运输计划运输成本,但同时也会增加货物储存和仓库建设成本;如果船型不变,增加航线上的供应岛它可以减少航线数量和船舶采购、集货周期和库存成本,以及库存引起的货物存储成本和仓库建设的成本,但是运输距离的增加和路线的延长会导致运输成本的增加,从而导致系统总成本的变化。此外,中心岛的位置将直接影响路径规划和运输组织形式的选择,从而间接影响仓储系统的优化。

在优化远洋集团货物海运系统的过程中,除了上述传统的LIRP问题外,还应考虑选址、运输和仓储的决策问题。除了相互作用外,我们还需要考虑航运系统本身的特点:①由于船舶的负荷一般远大于岛上的日生产量,所以双向装货路线与单方向运输相比,双向运输可以延长装货周期,大大降低运输频率。虽然运输距离有所增加,但运输成本可能会相对降低。即使库存和由此产生的货物储存成本和仓库建设成本增加,最终系统的总成本也可能降低。具体运输组织形式的选择应根据线路岛屿的数量和距离确定。

② 与小船型相比,如果选择航线,应根据航线中岛屿的数量和距离确定,大型船型可以成倍定期装货,延长输送周期,减少运输次数,降低运输成本,但船舶采购成本和码头总建设成本、库存及由此产生的货物储存成本和仓库建设成本都会增加,导致系统总成本的变化。

在运输系统中,无论有多少条线路,所有卫星岛的终端总数都是固定的,但由于不同航线的船型不同,所以卫星岛码头的规模不同和由此带来的码头建设成本也不尽相同,而且每增加一种船型,中心岛都需要配备更多相应的船型的码头。因此,它对码头的建设成本有很大的影响。综上所述,离岛海运物流系统的优化应基于以上特点选出中心岛,为卫星岛运输划分路线组,建立各条线路(循环运输)的运输组织形式,配置不同船型,制定航次。在线路换班时设置各岛的存储容量,以便在台风等影响下求得偏远岛屿的整个群岛物流系统总成本得最低。

2 算法描述及实现
2.1 遗传算法概述

遗传算法(GA,Genetic Algorithm),也称为进化算法。遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。其主要特点是直接对结构对象进行操作,因此不同于其他求解最优解的算法,遗传算法不存在求导和对函数连续性的限定,采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。

以上是对遗传算法相对抽象的总结,为了更具体形象的解释遗传算法的一般原理,我们首先介绍一些生物学上的概念:
①种群:不同生物个体形成的群体,生物的进化以群体的形式进行,这样的一个群体称为种群;
②个体:组成种群的单个生物;
③基因:带有遗传信息的DNA片段,可以通俗的将基因理解为一段信息,这段信息决定的生物个体的性状;
④表现型:根据基因形成的个体的外部表现;
⑤适应度:生物个体对于生存环境的适应程度,越适应那么其得以存活和繁衍的概率就越大;
⑥遗传:通过繁殖过程,子代将从父母双方各获取一部分基因,形成新的自己的基因,这个过程中,会发生基因的复制、交叉,也会以较低的概率发生基因突变;
⑦自然选择:物竞天择,适者生存的自然淘汰机制。具体为对环境适应度高的个体参与繁殖的机会比较多,后代就会越来越多。适应度低的个体参与繁殖的机会比较少,后代就会越来越少;
⑧进化:种群通过代际繁衍不断适应生存环境的过程,在这个过程中,以对外界环境的适应度为评判标准,生物的性状不断得到改良。

了解了这些术语的含义,我们就可以进一步说说生物进化的过程了。由于自然选择是客观存在的,即生物只能改变自己去适应环境,那么在自然选择的过程中,适应度低的个体会被淘汰,适应度高的个体被保留,高适应度的父体与母体又有更高的概率繁衍出适应度高的子代,因此在一代又一代的繁衍之后,高适应度的个体在种群中所占的比例越来越大,种群就这样完成了进化。

现在我们要参考生物进化的过程来设计算法解决求最优解的问题。对此,遗传算法的思路是,将要解决的问题模拟成一个生物进化的过程,通过进化来寻找最优解。以我们题目中寻找多峰函数的最大值这个问题为例:

将(x, y)这一可能的解作为一个个体;将多峰函数的函数值f(x, y)作为个体的适应度;对(x, y)进行编码作为个体的基因;以适应度为标准不断筛选生物个体;通过遗传算子(如复制、交叉、变异等)不断产生下一代。如此不断循环迭代,完成进化。最终,根据设定的迭代次数,可得到最后一代种群,该种群中的个体适应度都较高,而多峰函数的最大值就有比较大的概率存在于这一群解中,以种群中适应度最高的个体作为问题的解,则可以说该解有比较高的概率就是我们希望求得的最优解。

文字述说终究还是不如图表好理解,因此还是看图吧(下图将本题与自然遗传联系了起来):
在这里插入图片描述
通过以上描述,我们不难看出,遗传算法不能保证一定能求得最优解,而只能以一定的概率求最优解。但是使用遗传算法时,我们可以不用关心具体如何去找最优解,要做的只是简单的否定一些表现不好的个体。这一优点也是遗传算法能够取得广泛应用的原因之一。

2.2 算法的流程
通过上文的阐述,对于如何模拟自然进化来求题中多峰函数的最优解已经比较明晰了。这里我将列出遗传算法的主要步骤,并一一解析:
第一步:随机产生一个种群,作为问题的初代解(通常,初代解可能与最优解相差较大,这是可以容忍的,只要保证初代解是随机产生的,以确保个体基因的多样性即可);
第二步:寻找一种合适的编码方案对种群中的个体进行编码,可以选择如浮点数编码或二进制编码等常用编码方案(需要指出的是,不同的编码方案直接影响后续遗传算子的实现细节);
第三步:以多峰函数的函数值 作为个体的适应度,计算种群中每个个体的适应度(算出的适应度将为后续的个体选择提供依据);
第四步:根据适应度的高低选择参与繁衍的父体与母体,选择的原则是适应度越高的个体越可能被选中(以此不断淘汰适应度低的个体);
第五步:对被选出的父体与母体执行遗传操作,即复制父体与母体的基因,并采用交叉、变异等算子产生出子代(在较大程度保留优秀基因的基础上,变异增加了基因的多样性,从而提高找到最优解的概率);
第六步:根据一定的准则判断是继续执行算法,还是找出所有子代中适应度最高个体作为解返回并结束程序(判断的准则可以是设定的解的阈值、指定的迭代次数等)。
在这里插入图片描述

⛄二、部分源代码

clc
close all
clear all
%% 模型参数
n=20;
Axes=[35,44;13,36;22,59;30,79
39,60;31,26;25,21;40,16;52,38
63,17;66,71;62,50;41,29;71,35
91,37;25,33;82,74;52,80;49,11
22,11];
Land=[-8,65];
Dom=((Axes(1,1)-Land(1))2+(Axes(1,2)-Land(2))2)^0.5;
Dist=getdist(Axes);
Output=[122,77,75,68,87,96,90,110,127,…
155,141,135,103,163,170,81,147,145,129,95];
Ship.Cp=[1300000,2100000,1e15];
Ship.Ctr=[65,90,1e15];
Ship.V=[18,14,1e15];
T.all=15*365-1;
T.main=7;
%% Ga参数
GenMax=200;
Pc=0.5;
Pv=0.5;
Gen=0;
Popnum=100;
Chrom=struct;
NewChrom=struct;
%% 生成初始种群
for i =1:Popnum
Chrom(i).Index=randperm(n-1)+1;
Chrom(i).RouteNum=randi(n-1,1);
Chrom(i).Routes=getdivide(Chrom(i).RouteNum,Chrom(i).Index,n);
end
while Gen < GenMax
Gen=Gen+1;

for i=1:size(Chrom_all,2)
ship=[];
RouteL=[];
ShipNum=Chrom_all(i).RouteNum;
for j=1:ShipNum
EachL=0;
Route=Chrom_all(i).Routes{j};
EachOutput(j)=sum(Output(Route(2:end-1)));
if EachOutput(j)<=300
ship(j)=1;
elseif EachOutput(j)<=500
ship(j)=2;
else
ship(j)=3;
end
for k=1:length(Route)-1
EachL=EachL+Dist(Route(k),Route(k+1));
end
RouteL(j)=EachL;
end
Chrom_all(i).Ship=ship;
Chrom_all(i).Length=RouteL;
end
[bestC,ind]=getbest(Chrom_all,Ship,Dom,T);
Chrom=Chrom_all(ind(1:Popnum));
Best(Gen).Gen=Chrom_all(ind(1));
Best(Gen).C=bestC(1);
end
% %% 淘汰

plot([Best.C])

title(‘总成本进化曲线’);
xlabel(‘迭代次数’)
ylabel(‘总成本’)

%
% end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社

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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值