static dynamic 情形下的 (R, T)策略及 Matlab 代码

26 篇文章 50 订阅
18 篇文章 11 订阅

基于论文: 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值