最近读几篇老论文, 发现 Wager-Whitin 算法 在初始库存不为 0 时仍然成立。自己没有想到如何证明。原 wagner whitin的论文上又看了看,似乎证明时没有考虑到初始库存不为0时定理 1 不成立的情况。但经过编程测试,用了五六百个算例,发现仍然成立。此时,最优解有如下特点:
第一个生产周期刚好将初始库存与生产量消化完,之后的阶段仍然满足“”零库存“”性质。
Matlab 代码在下面:
function MyWW % x表示各阶段生产决策,为0-1变量 % y表示各阶段生产的数量 % I为各阶段库存水平 % I0 initial inventory level I0=50; n=8; % d=randi([5 25],1,n); % S=randi([20 100],1,n); % h=randi([5 20],1,n); % c=randi([10 25],1,n); d=[9,12,9,25,9,20,20,25]; S=[100,100,100,100,100,100,100,100]; h=[5,5,5,5,5,5,5,5]; c=10*ones(1,n); x=zeros(1,n); y=zeros(1,n); I=zeros(1,n); C=1e4*ones(n,n); %成本矩阵 opt_cost=zeros(n,1); initial_I=zeros(n,1); for i=1:n if i>1 opt_cost=min(C(:,i-1)); end for j=i:n if I0>=sum(d(1:j)) if i==1 C(i,j)=h(1:j)*(I0-cumsum(d(i:j)))'; else C(i,j)=opt_cost+h(i:j)*(I0-cumsum(d(i:j)))'; end else initial_I(i)=I0; if i>1 if I0>sum(d(1:i-1)) initial_I(i)=I0-sum(d(1:i-1)); else initial_I(i)=0; end end prod_amount=sum(d(i:j))-initial_I(i); temp_I=initial_I(i)+prod_amount; h_sum=h(i:j)*(temp_I-cumsum(d(i:j)))'; if i>1 C(i,j)=opt_cost+S(i)+h_sum+c(i)*prod_amount; else C(i,j)=S(i)+h_sum+c(i)*prod_amount; end end end end %back track j=n; while j>=1 [~,index]=min(C(:,j)); if I0<sum(d(1:index)) x(index)=1; if i>1 y(index)=sum(d(index:j))-initial_I(index); else y(index)=sum(d(index:j))-initial_I(index); end end j=index-1; end for i=1:n if i==1 I(i)=I0+y(i)-d(i); else I(i)=I(i-1)+y(i)-d(i); end fprintf(' %d',I(i)); end fprintf('\n'); fprintf('各阶段生产量为:\n'); for i=1:n fprintf(' %d',y(i)); end fprintf('\n'); fprintf('各阶段是否生产:\n'); for i=1:n fprintf(' %d',x(i)); end fprintf('\n'); end
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74509.html