基于论文: Tarim S A, Kingsman B G. The stochastic dynamic production/inventory lot-sizing problem with service-level constraints[J]. International Journal of Production Economics, 2004, 88(1): 105-119.
针对随机批量生产问题中的 static dynamic 情形,作者提出了定期补货策略 (R, T),其中 R 为补货上限,T 为补货节点。
其中 R 与 I,d 的关系如下:
订货量为:
增加应求解变量 Ptj。表示t阶段的上一个补货节点为 t-j+1. 它与 Ptj 的关系为:
再增加约束套件:
目标函数为:
构造成线性规划模型。matlab Yalmip工具箱 调用 CPLEX 求解,代码如下:
function TarimKingsman
n=10;a=2500;h=1;alpha=0.95;I0=0;C=0.333;v=4;M=5000;
d=[800,850,700,200,800,700,650,600,500,200];
sigma=C*d;
sigma_sum=zeros(n,n);
for t=1:n
for j=1:t
sigma_sum(t,j)=sqrt(sigma(t-j+1:t)*sigma(t-j+1:t)');
end
end
delta=binvar(n,1);
I=sdpvar(n,1);
P=binvar(n,n);
P=tril(P);
TC=a*sum(delta)+h*sum(I)+v*I(n)+v*sum(d(1:n))-v*I0;
assign(I,[1490;640;599;399;2033;1333;683;1142;642;442]);
assign(delta,[1;0;1;0;1;0;0;1;0;0]);
temp=zeros(n,n);temp(1,1)=1;temp(2,2)=1;temp(3,1)=1;temp(4,2)=1;temp(5,1)=1;
temp(6,2)=1;temp(7,3)=1;temp(8,1)=1;temp(9,2)=1;temp(10,3)=1;
assign(P,temp);
IC=[];PC=[];PC2=[];
Gd=zeros(n,n);Gdd=zeros(n,n);
%IC1=I(1)+d(1)>=I0;%IC2=I(1)-I0+d(1)<=M*delta(1);
for t=1:n
for j=1:t
Gd(t,j)=norminv(alpha)*sigma_sum(t,j)+sum(d(t-j+1:t));
Gdd(t,j)=Gd(t,j)-sum(d(t-j+1:t));
PC=[PC;P(t,j)>=delta(t-j+1)-sum(delta(t-j+2:t))];
end
IC=[IC;I(t)>=Gdd(t,1:t)*P(t,1:t)'];PC2=[PC2;sum(P(t,1:t))==1];
%if t>1
%IC1=[IC1;I(t)+d(t)>=I(t-1)];
%IC2=[IC2;I(t)+d(t)-I(t-1)<=M*delta(t)];
%end
end
constraints=[I(1)+d(1)>=I0;I(2:n)+d(2:n)'>=I(1:n-1)
I(1)-I0+d(1)<=M*delta(1);I(2:n)+d(2:n)'-I(1:n-1)<=M*delta(2:n);
IC;PC;PC2;I>=0];
options=sdpsettings('solver','cplex');
optimize(constraints,TC,options);
fprintf('各阶段库存量:\n');
for i=1:n
fprintf(' %.2f',value(I(i)));
end
fprintf('\n');
fprintf('各阶段补货上限:\n');
for i=1:n
fprintf(' %.2f',value(I(i)+d(i)));
end
fprintf('\n');
fprintf('各阶段是否生产:\n');
for i=1:n
fprintf(' %.2f',value(delta(i)));
end
fprintf('\n');
fprintf('生产总成本:');
fprintf('%.2f',value(TC));
fprintf('\n');
end