1 简介
在考虑物流规划部门和客户双方利益的基础上,采用双层规划模型描述物流配送中心的选址问题。基于进化博弈与多目标优化的思想设计了层次遗传算法来求解该模型,通过两个遗传算法的交互迭代求解物流配送中心选址问题。最后通过算例验证了模型与算法的可行性。
2 部分代码
%% 遗传算法 优化函数
clc;close all;clear all;%清除变量
rand('seed', 100);
global XY p nodenumber maxlink;
filename='需求点分布.xlsx';
[adata,bdata,cdata]=xlsread(filename);
XY=adata(2:end,:)';
nodenumber=size(XY,1);
p=4;% 配送中心个数
maxlink=5;% 最大连接数
N=p*2;%优化问题
lb=[min(XY(:,1))*ones(1,p),min(XY(:,2))*ones(1,p)];
ub=[max(XY(:,1))*ones(1,p),max(XY(:,2))*ones(1,p)];
% 遗传算法参数
popsize=200;%遗传算法种群数
ga_max=500;%遗传算法迭代次数
PM=0.05;%变异概率
PC=0.8;%交叉概率
%% 遗传算法主程序
%性能跟踪
tracemat=zeros(ga_max,2);
gen=0;
tic;
Chrom=genChrome(popsize,N,lb,ub);% 建立种群
Value=decodingFun(Chrom,popsize);%解码染色体
%% 遗传算法优化的主循环
%进度条
wait_hand = waitbar(0,'run……', 'tag', 'TMWWaitbar');
while gen<ga_max
%% 遗传算法选择
FitnV=ranking(Value);%分配适应度值
Chrom=select('rws',Chrom,FitnV,1);%选择
Chrom=mutationGA(Chrom,popsize,PM,N,lb,ub);% 种群变异,单点变异
Chrom=crossGA(Chrom,popsize,PC,N);% 种群交叉,单点交叉
Value= decodingFun(Chrom,popsize);%解码染色体
%% 计算最优
[v1,index1]=min(Value);
gen=gen+1;
tracemat(gen,2)=mean(Value);
%% 记录最优
if gen==1
bestChrom1=Chrom(index1,:);%记录最优染色体
bestValue1=v1;%记录的最优值
end
if bestValue1>v1
bestValue1=v1;%记录的最优值
bestChrom1=Chrom(index1,:);
end
tracemat(gen,1)=bestValue1;% 保留最优
waitbar(gen/ga_max,wait_hand);%每循环一次更新一次进步条
end
delete(wait_hand);%执行完后删除该进度条
disp('算法运行时间');
runtime1=toc
% 显示结果
disp('遗传算法优化得到的最优目标函数值');
bestValue1
disp('遗传算法优化得到的最优染色体');
bestChrom1
figure;
plot(tracemat(:,1),'r-','linewidth',1);
hold on;
plot(tracemat(:,2),'b-','linewidth',1);
legend({'种群最优值','种群均值'},'fontname','宋体');
xlabel('迭代次数','fontname','宋体');
ylabel('目标函数','fontname','宋体');
title('遗传算法优化','fontname','宋体');
x=bestChrom1;
[y,XY2,E]=myfun(x);
XY2
title1='结果';
drawnodes(XY,XY2,E,title1);
x2=x;
x2(8)=x2(8)+3;
[y,XY2,E]=myfun(x2);
3 仿真结果
4 参考文献
[1]李昌兵, 杜茂康, & 曹慧英. (2012). 基于层次遗传算法的物流配送中心选址策略. 计算机应用研究, 29(001), 57-59,78.