QQ在线咨询
售前咨询热线
15821572819
售后咨询热线
15821572819

随机动态规划,随机库存管理,matlab 代码, c 代码


与一般的动态规划相比,随机动态规划是指 下一阶段的状态是不确定的,每个状态有一定的概率。因此,在计算递推公式时,需要取期望。

确定的动态规划的递推公式:


f(Si)=maxxi{V(Si,xi)+f(Si+1)}


而随机的动态规划的递推公式为:


f(Si)=maxxi{pkV(Si,xi)+pkf(Si+1)}


其中, p_{k} 表示随机变量取值 的概率, 在随机动态规划中,每一个决策 x_{i} 对应多个 S_{i+1}。


举例,库存管理问题:

3个阶段,初始库存为1,每个阶段的需求随机,需求量以均匀分区在 1 与2 两个数之间取值;最大生产量为4,不能缺货及延迟补货。成本包括:

库存持有成本,生产启动成本,可变生产成本。在第3阶段期末时,可以出售残值。单位残值价值2。其中,单位库存成本为1,生产成本的表达式如下:


c(x)={0x=03+2xx>0


 上式中,3 表示生产启动成本,2 表示单位可变生产成本。

因此递推公式为:


f(Si)={max2Sixi4{pkV(Si,xi)+pkf(Si+1)}i=1,2pkV(Si,xi)i=3


f(S_{i}) 表示当第 i 阶段初始库存为 S_{i} 时,i, i+1, ..,3 阶段的最小期望总成本。

逆推的 matlab 代码为:


[plain] view plain copy

  1. function sdp  

  2. T=3;  

  3. state=4;  

  4. d=[1,2];  

  5. prod_cost1=0;  

  6. prod_cost2=@(x)3+2*x;  

  7. hold_cost=@(i,x)0.5*(i+x-d(1))+0.5*(i+x-d(2));  

  8. salv_cost1=0;  

  9. salv_cost2=@(i,x)0.5*(i+x-d(1))+0.5*(i+x-d(1));  

  10.   

  11. xx=zeros(T,state);%记录每个阶段每个状态的最优决策  

  12. M=100;  

  13. CC=M*ones(T,state);%记录每个阶段每个状态的累计最优成本  

  14.   

  15.   

  16. for t=T:-1:1  

  17.     for temp_i=1:state  

  18.         i=temp_i-1;  

  19.         if t==1  

  20.             i=1;  

  21.         end  

  22.         minc=M;  

  23.         for x=2-i:4-i  

  24.             if t==3  

  25.                 salv_cost=salv_cost2(i,x);CC_next=0;  

  26.             else  

  27.                 salv_cost=salv_cost1;CC_next=0.5*CC(t+1,i+x-d(1)+1)+0.5*CC(t+1,i+x-d(2)+1);  

  28.             end  

  29.             if x==0  

  30.                 prod_cost=prod_cost1;  

  31.             else  

  32.                 prod_cost=prod_cost2(x);  

  33.             end  

  34.             temp_c=prod_cost+hold_cost(i,x)-salv_cost+CC_next;  

  35.             if temp_c<minc  

  36.                 minc=temp_c;CC(t,i+1)=minc; xx(t,i+1)=x;  

  37.             end  

  38.         end    

  39.         if t==1  

  40.             break;  

  41.         end  

  42.     end     

  43. end  

  44. [eOptimalCost,index]=min(CC(1,:));  

  45. fprintf('optimal expected total cost=%.4f\n',eOptimalCost);  

  46. fprintf('optimal production amount in period 1  =%d\n',xx(1,index));  

  47. end  




注:本文转载自https://blog.csdn.net/robert_chen1988/article/details/52865490,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

分享