动态规划的matlab代码,随机动态规划,matlab 代码, c 代码

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

举例,库存管理问题:

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

因此递推公式为:

0818b9ca8b590ca3270a3433284dd417.png

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(1));

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=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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值