当前位置 : 主页 > 编程语言 > python >

【优化选址】基于遗传算法求解多城市多应急物流中心选址问题含Matlab源码

来源:互联网 收集:自由互联 发布时间:2022-06-18
1 简介 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国 Michig

1 简介

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国 Michigan 大学 J.Holland 教授于 1975 年首先提出来的。在出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》之后,GA 这个名称才逐渐为人所知 [1]。算法的整个运算过程就是从任一初始的群体出发,通过随机选择、交叉和变异等遗传算子,使群体一代一代地进行到空间中最好的区域,直至达到最优点。 1.遗传算法的基本要素 

(1)确定编码方案 GA 在进行搜索前,先要将解空间的数据表示成为遗传空间的基因型串接数据,这些数据的不同组合就构成了不同的点,现阶段编码方式主要有:二进制编码、格雷码和浮点数编码。 

(2)确定适应度函数 遗传算法在进化搜索中基本不利用外部信息,仅以种群中每个个体的适应度函数值(fitness function)为依据进行搜索,因此适应度函数的选取至关重要。适应度函数将表明个体或解的优劣性,对于不同的问题,适应度函数的定义方式也不同。 在 GA 的算法中,适应度函数的确定常常运用两种方法:① 将目标函数直接作为适应度函数 ② 将待求解的的目标函数做适当处理后再转化为适应度函数。 

(3)确定遗传算子 在 GA 中,遗传算子主要包括:选择、交叉、变异三类算子。 ① 选择算子 选择的目的是为了从当前种群中,选出优良的个体,使它们有机会作为父带的下一代繁衍子孙。常用的选择算子的方案有:比例选择、轮盘式选择、确定式采样选择、无放回随机选择、无放回余数随机选择、排序选择、随机联赛选择等。 ② 交叉算子 交叉算子用于组合产生新的个体,它要求对个体编码串中的优良模式不能有太多的破坏并且能有效的产生出一些较好的新个体模式,以便在解空间中能进行有效搜索,且保证对有效模式的破坏概率较小。最常用的交叉方案有:单点交叉、双点交叉、多点交叉、均匀交叉和算术交叉等。 ③ 变异算子 在生物的遗传和进化过程中,生物的某些基因偶尔会发生变异,从而产生出新的个体,虽然其概率比较小,但对新物种的产生也是一个不可忽视的因素。模仿生物遗传和进化过程中的这种变异现象,在遗传算法中引入了变异算子来产生新的个体。变异算子的主要方式有:基本位变异、均匀变异、边界变异、非均匀变异、高斯变异等。 

(4)确定遗传算法运行参数 在遗传算法的运行中,有几个参数对遗传算法的运行有很大影响。它们分别是:个体编码串长度 L、群体大小 M、交叉概率 PC、变异概率 Pm、以及终止代数 T。 2.遗传算法的步骤 遗传算法解决问题的具体步骤如下: 

Step 1 确定编码,编码是遗传算法中的主要步骤,是用恰当的遗传形式来表示问题的可行解;

Step 2 确定适应度函数,根据实际问题选择适应函数;

Step 3 选择控制参数:控制参数主要包括种群规模,算法执行的最大迭代次数,执行不同遗传操作的概率及其他一些辅助性控制参数; 

Step 4 遗传算子的设计:主要包括选择、交叉和变异以及其他高等遗传操作; 

Step 5 确定算法的终止准则; 

Step 6 确定解码方式,根据该为问题最终所需导出的结果形式,确定解码方案; 

Step 7 统计整体结果,导出最终所求结果; 

Step 8 上机编程,完成上述步骤,并通过多次迭代得到可靠的最优解。 具体算法运算流程图如图所示。

【优化选址】基于遗传算法求解多城市多应急物流中心选址问题含Matlab源码_遗传算法

2 部分代码

function f=fit(popus,center,requirement,cost,P)%求适应度
%c1固定成本
c1=zeros(1,size(popus,2));
for i=1:size(popus,2)
a1=popus{i};
c1(i)=length(unique(a1))*cost.construction;
end
%c2运输成本
c2=zeros(1,size(popus,2));
for i=1:size(popus,2)
a2=popus{i};
for j=1:size(a2,2)
C2(i,j)=requirement.need(j)*cost.construction*sqrt((center.Station(a2(j),2)-requirement.Station(j,2))^2+(center.Station(a2(j),1)-requirement.Station(j,1))^2);
end
c2(i)=sum(C2(i,:));
end
%c3超出容量惩罚
c3=zeros(1,size(popus,2));
for i=1:size(popus,2)
a3=popus{i};
Aa=(1:size(a3,2));
ALL=zeros(1,size(center.chubei,2));
pan=zeros(1,size(center.chubei,2));
for j=1:size(center.chubei,2)
ch=Aa(a3==j);
ALL(j)=sum(requirement.need(ch));
pan(j)=max(ALL(j)-center.chubei(j),0);
end
c3(i)=sum(pan)*10^10;
end
f=c1+c2+c3;
% f=w1*(c1+c2+c3+c4+c5+c6+c7)+w2*c8;

3 仿真结果

【优化选址】基于遗传算法求解多城市多应急物流中心选址问题含Matlab源码_交叉算子_02

【优化选址】基于遗传算法求解多城市多应急物流中心选址问题含Matlab源码_交叉算子_03

4 参考文献

[1]胡莹. 基于MATLAB遗传算法的物流中心选址问题研究[J]. 中国水运:下半月, 2010(7):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


【优化选址】基于遗传算法求解多城市多应急物流中心选址问题含Matlab源码_搜索_04


网友评论