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

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

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

f(S_{i})=\max\limits_{x_{i}}\{V(S_{i},x_{i})+f(S_{i+1})\}

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

f(S_{i})=\max\limits_{x_{i}}\{\sum p_{k}V(S_{i},x_{i})+\sum p_{k}f(S_{i+1})\}

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

举例,库存管理问题:

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

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

\begin{equation}c(x)=\begin{cases} 0\quad &x=0\\ 3+2x &x>0 \end{cases}\end{equation}

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

因此递推公式为:

\begin{equation}f(S_{i})=\begin{cases} \max\limits_{2-S_{i}\leq x_{i}\leq 4}\big\{\sum p_{k}V(S_{i},x_{i})+\sum p_{k}f(S_{i+1})\big\}\quad &i=1,2\\ \sum p_{k}V(S_{i},x_{i}) &i=3 \end{cases}\end{equation}

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

逆推的 matlab 代码为:

function sdp
T=3;
state=4;
d=[1,2];
prod_cost1=0;
prod_cost2=@(x)3+2*x;
hold_cost=@(i,x)0.5*(i+x-d(1))+0.5*(i+x-d(2));
salv_cost1=0;
salv_cost2=@(i,x)0.5*(i+x-d(1))+0.5*(i+x-d(2));

xx=zeros(T,state);%记录每个阶段每个状态的最优决策
M=100;
CC=M*ones(T,state);%记录每个阶段每个状态的累计最优成本


for t=T:-1:1
    for temp_i=1:state
        i=temp_i-1;
        if t==1
            i=1;
        end
        minc=M;
        for x=2-i:4-i
            if t==3
                salv_cost=salv_cost2(i,x);CC_next=0;
            else
                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);
            end
            if x==0
                prod_cost=prod_cost1;
            else
                prod_cost=prod_cost2(x);
            end
            temp_c=prod_cost+hold_cost(i,x)-salv_cost+CC_next;
            if temp_c<minc
                minc=temp_c;CC(t,i+1)=minc; xx(t,i+1)=x;
            end
        end  
        if t==1
            break;
        end
    end   
end
[eOptimalCost,index]=min(CC(1,:));
fprintf('optimal expected total cost=%.4f\n',eOptimalCost);
fprintf('optimal production amount in period 1  =%d\n',xx(1,index));
end

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心态与习惯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值