【优化布局-选址】matlab基于遗传算法实现物流选址代码

1,262 阅读2分钟

 1 简介

为了更好的提高物流中心选址的准确性,体现MATLAB的遗传算法在带有时效性的物流中心选址的问题中的计算优势。文中去掉了原有模型中对区域连续性要求的限制条件。利用简单算例,给出运用MATLAB的遗传算法求解的具体步骤,验证模型和算法的可行性。表明基于MATLAB遗传算法的优化算法是一种较其他算法更为有效的求解带有时效性约束的物流中心选址问题的算法。

2 部分代码

clear
clc
close all
tic
%% 输入信息
% 末端需求点位置
demand_pos=load('需求点位置.txt');
demand_num=size(demand_pos,1);
% 备选中心位置
center_pos=load('备选中心位置.txt');
center_num=size(center_pos,1);
%每个末端需求点的配送量
demand_amount=load('需求点对应的配送量.txt');
%固定投资
center_fixi=rand(10,2)*1000;
%% 计算备选中心到需求点的距离
vertexs=[demand_pos;center_pos];                                %所有点的坐标x和y
h=pdist(vertexs);
dist=squareform(h);                                             %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 遗传算法参数设置
NIND=2000;                                                       %种群大小
MAXGEN=400;                                                     %迭代次数
Pc=0.9;                                                         %交叉概率
Pm=0.05;                                                        %变异概率
GGAP=0.9;                                                       %代沟(Generation gap)
N=demand_num+center_num-1;                                      %染色体长度=需求点数目+备选中心数目-1
%% 初始化种群
rand('seed',1);                      
Chrom=InitPopCW(NIND,N);  %构造初始解
%% 遗传算法优化
gen=1;
figure;;
hold on;box on
xlim([0,MAXGEN])
ObjV=calObj(Chrom,demand_num,center_fixi,demand_amount,dist);             %计算种群目标函数值
preObjV=min(ObjV);
while gen<=MAXGEN
   %% 计算适应度
   ObjV=calObj(Chrom,demand_num,center_fixi,demand_amount,dist);%计算种群目标函数值
   subplot 211;
   line([gen-1,gen],[preObjV,min(ObjV)]);drawnow;
   title('优化过程');
   xlabel('代数');
   ylabel('最优值');
   preObjV=min(ObjV);
   FitnV=Fitness(ObjV);
   %% 选择
   SelCh=Select(Chrom,FitnV,GGAP);
   %% OX交叉操作
   SelCh=Recombin(SelCh,Pc);
   %% 变异
   SelCh=Mutate(SelCh,Pm);
   %% 重插入子代的新种群
   Chrom=Reins(Chrom,SelCh,ObjV);
   %% 删除种群中重复个体,并补齐删除的个体
   Chrom=(Chrom);
   %% 打印当前最优解
   ObjV=calObj(Chrom,demand_num,center_fixi,demand_amount,dist);             %计算种群目标函数值
  [minObjV,minInd]=min(ObjV);
   disp(['第',num2str(gen),'代最优化值:',num2str(minObjV)])
  [bestVC,bestNV]=decode(Chrom(minInd(1),:),demand_num);
   subplot 212;
   draw_Best_num(bestVC,bestNV,demand_pos,center_pos,vertexs);
   drawnow;
   %% 更新迭代次数
   gen=gen+1 ;
end
%% 画出最优解的路线图
ObjV=calObj(Chrom,demand_num,center_fixi,demand_amount,dist);             %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
%% 输出最优解的路线和总距离
disp('最优解:')
bestChrom=Chrom(minInd(1),:);
[bestVC,bestNV]=decode(bestChrom,demand_num);
%% 画出最终路线图
figure;draw_Best_num(bestVC,bestNV,demand_pos,center_pos,vertexs);
to

3 仿真结果

4 参考文献

[1]胡莹. (2010). 基于matlab遗传算法的物流中心选址问题研究. 中国水运月刊(07), 78-79+81.

5 MATLAB代码与数据下载地址

见博客主页