应急物资分配的随机规划模型
2014-05-10 20:46阅读:

以地震为背景,考虑灾害发生时需求不确定的条件,建立基于情景分析的随机规划模型,将灾害发生后的情景划分为两个阶段的随机事件,前一个随机事件表示灾害发生后震源位置、震级大小的信息,后一个表示当震源和震级等信息确定后,各个灾区的需求量。下层模型是一个随机规划模型,但只要任何一种灾害情景发生了,那么这个模型就成为一个确定性的模型,而且这个模型的基本结构是供需匹配模型。上层模型的决策变量确定了物资的供应情况,灾害情景的发生确定了物资的需求情况,目标函数体现的意图是尽可能满足需求,同时使运输成本最小化。上层模型采用整数实数混合编码方式,包括仓库类型、仓库体积、各类物资的数量。下层模型采用多目标优化模型,包括灾害损失和运输成本。
%% 应急物资分配的随机规划模型
%% 基本参数设置
NumSZD=7;%受灾点个数
NumJYD=4;%救援点个数
NumRK=10000*[66.5,60.9,79.5,43.1,51.3,16,10.5];%受灾点总人口数
CKCB=[0,650,1100,135
0];%仓库设立成本
CKRL=10000*[0,10,20,30];%仓库容量
WZDWTJ=[0.015,0.1,0.259,0.100,0.01];%物资单位体积
WZDWCB=[0.1,0.3,40,20,3];%物资单位储存成本
DWRKXQ=[6,3,0.25,1,0.25];%单位受灾人口对物资的需求
WH=[10,8,6,4,2];%物资系数
TL=6;%应急运输时间限制
%标准通行时间
TIME=...
[
0, 1.07, 1.17, 1.88, 2.45, 2.85,
2.58;
1.07, 0, 0.92, 1.67,
2.08, 2.08, 1.72;
1.17, 0.92, 0, 0.82,
1.47, 1.47, 2.52;
1.88, 1.67, 0.82, 0,
0.75, 0.75, 3.25;
2.45, 2.08, 1.47, 0.75,
0, 1.15, 3.75;
2.85, 2.08, 1.47, 0.75, 1.15,
0, 4.05;
2.58, 1.72, 2.52, 3.25, 3.75, 4.05,
0;
];
%% 情景参数设置
%受灾比例
SZBL=...
[
0.01, 0.05, 0.20, 0.30, 0.35, 0.40, 0.35;
0.06, 0.13, 0.35, 0.50, 0.55, 0.65, 0.50;
0.01, 0.07, 0.24, 0.35, 0.40, 0.45, 0.38;
0.09, 0.15, 0.40, 0.55, 0.65, 0.72, 0.60;
0.20, 0.31, 0.35, 0.35, 0.12, 0.06, 0.01;
0.30, 0.45, 0.50, 0.47, 0.25, 0.12, 0.03;
0.22, 0.35, 0.40, 0.38, 0.15, 0.07, 0.01;
0.27, 0.48, 0.55, 0.50, 0.28, 0.14, 0.04;
];
%受灾点系数
SZDXS=...
[
1.01, 1.07, 1.33, 1.60, 1.70, 1.80, 1.70;
1.10, 1.20, 1.80, 2.00, 2.10, 2.30, 2.00;
1.01, 1.11, 1.45, 1.70, 1.80, 1.90, 1.76;
1.14, 1.25, 1.80, 2.10, 2.30, 2.44, 2.20;
1.33, 1.62, 1.70, 1.70, 1.20, 1.10, 1.01;
1.60, 1.90, 2.00, 1.94, 1.47, 1.20, 1.03;
1.40, 1.70, 1.80, 1.76, 1.26, 1.11, 1.01;
1.52, 1.96, 2.10, 2.00, 1.54, 1.24, 1.06;
];
%物资可用比例
WZKYBL=...
[
1.00, 0.98, 0.90, 0.81, 0.75, 0.65, 0.73;
0.97, 0.93, 0.76, 0.63, 0.60, 0.50, 0.64;
0.90, 0.83, 0.76, 0.76, 0.91, 0.96, 0.99;
0.84, 0.69, 0.65, 0.67, 0.81, 0.93, 0.98;
];
%应急运输时间与正常运输时间的比值
BETA1=...
[
0.00, 1.20, 1.30, 1.40, 1.50, 2.00, 1.70;
1.20, 0.00, 1.40, 1.50, 1.60, 2.30, 1.50;
1.30, 1.40, 0.00, 1.70, 1.90, 2.40, 1.80;
1.40, 1.50, 1.70, 0.00, 2.50, 3.00, 2.10;
1.50, 1.60, 1.90, 2.50, 0.00, 3.50, 2.50;
2.00, 2.30, 2.40, 3.00, 3.50, 0.00, 4.00;
1.70, 1.50, 1.80, 2.10, 2.50, 4.00, 0.00;
];
BETA2=...
[
0.00, 1.40, 1.60, 1.70, 1.90, 2.50, 2.10;
1.40, 0.00, 1.70, 1.80, 2.00, 2.80, 1.90;
1.60, 1.70, 0.00, 2.00, 2.30, 2.90, 2.20;
1.70, 1.80, 2.00, 0.00, 2.90, 3.50, 2.50;
1.90, 2.00, 2.30, 2.90, 0.00, 4.00, 2.90;
2.50, 2.80, 2.90, 3.50, 4.00, 0.00, 4.50;
2.10, 1.90, 2.20, 2.50, 2.90, 4.50, 0.00;
];
BETA3=...
[
0.00, 1.50, 1.60, 1.50, 1.50, 1.30, 1.40;
1.50, 0.00, 2.50, 1.70, 1.60, 1.40, 1.30;
1.60, 2.50, 0.00, 3.00, 3.00, 2.60, 2.40;
1.50, 1.70, 3.00, 0.00, 2.60, 2.40, 1.90;
1.50, 1.60, 3.00, 2.60, 0.00, 1.50, 1.70;
1.30, 1.40, 2.60, 2.40, 1.50, 0.00, 1.10;
1.40, 1.30, 2.40, 1.90, 1.70, 1.10, 0.00;
];
BETA4=...
[
0.00, 1.80, 2.00, 1.80, 1.80, 1.60, 1.70;
1.80, 0.00, 2.90, 2.00, 1.90, 1.70, 1.60;
2.00, 2.90, 0.00, 3.40, 3.40, 3.00, 2.80;
1.80, 2.00, 3.40, 0.00, 2.90, 2.70, 2.20;
1.80, 1.90, 3.40, 2.90, 0.00, 1.70, 1.90;
1.60, 1.70, 3.00, 2.70, 1.70, 0.00, 1.20;
1.70, 1.60, 2.80, 2.20, 1.90, 1.20, 0.00;
];
ALLBETA=cell(4,1);
ALLBETA{1}=BETA1;
ALLBETA{2}=BETA2;
ALLBETA{3}=BETA3;
ALLBETA{4}=BETA4;
%灾害情景概率分布
ZHQJGL=...
[
1,1,1,1,0.03300;
1,1,1,2,0.07700;
2,2,2,1,0.04950;
2,2,2,2,0.11550;
3,3,1,1,0.02700;
3,3,1,2,0.06300;
4,4,2,1,0.04050;
4,4,2,2,0.09450;
5,5,3,3,0.03850;
5,5,3,4,0.05775;
6,6,4,3,0.07150;
6,6,4,4,0.10725;
7,7,3,3,0.03150;
7,7,3,4,0.04725;
8,8,4,3,0.05850;
8,8,4,4,0.08775;
];
%% 自适应免疫克隆选择文化算法
K=100;%最大迭代次数
N=200;%初始种群规模
Alpha=0.3;
Beta=0.01;
Gamma=1;
[BESTX,BESTY,ALLX,ALLY]=AICSCAUCP(K,N,Alpha,Beta,Gamma);
%% 绘制收敛曲线
figure
plot(BESTY,'.-');
xlabel('迭代次数','FontName','Times New
Roman','FontSize',10);
ylabel('目标函数值','FontName','Times
New Roman','FontSize',10);
title('收敛曲线','FontName','Times New
Roman','FontSize',10);
grid on
%% 输出最优解
disp('最优解为');
disp(BESTY(K));
disp('最优解对应的决策变量为');
disp(BESTX{K,1});
%% 随机产生情景进行检验
Xup=BESTX{K,1};
[SSZRK,SSZDXS,SWZKYXS,STIME]=RandScenario(SZBL,SZDXS,WZKYBL,ALLBETA,ZHQJGL,NumRK,TIME);
disp('随机情景:受灾人口数');
disp(SSZRK);
disp('随机情景:受灾点系数');
disp(SSZDXS);
disp('随机情景:物资可用比例');
disp(SWZKYXS);
disp('随机情景:实际通行时间');
disp(STIME);
KYTIJI=SWZKYXS.*Xup(2,:).*CKRL(Xup(1,:)+1);%可用总体积
WZTIJI=zeros(5,7);%各种物资的体积
WZSLGY=zeros(5,7);%各种物资的数量
for i=1:5
WZTIJI(i,:)=Xup(i+2,:).*KYTIJI;
WZSLGY(i,:)=Xup(i+2,:).*KYTIJI./WZDWTJ(i);
end
WZSLXQ=DWRKXQ'*SSZRK;%各种物资的需求数量
disp('随机情景下的各类物资的供应量');
disp(WZSLGY);
disp('随机情景下的各类物资的需求量');
disp(WZSLXQ);
[SZDSS,YSLSJ,ALLYSL]=Distribute(WZSLGY,WZSLXQ,SSZDXS,WH,STIME,TL,WZDWTJ)
disp('受灾点损失');
disp(SZDSS);
disp('运输量时间');
disp(YSLSJ);
disp('调度方案(物资1)');
disp(ALLYSL{1});
disp('调度方案(物资2)');
disp(ALLYSL{2});
disp('调度方案(物资3)');
disp(ALLYSL{3});
disp('调度方案(物资4)');
disp(ALLYSL{4});
disp('调度方案(物资5)');
disp(ALLYSL{5});