随机动态规划,随机库存管理,matlab 代码, c 代码
2016-12-10 19:37
253 查看
与一般的动态规划相比,随机动态规划是指 下一阶段的状态是不确定的,每个状态有一定的概率。因此,在计算递推公式时,需要取期望。
确定的动态规划的递推公式:
\begin{equation}f(S_{i})=\max\limits_{x_{i}}\{V(S_{i},x_{i})+f(S_{i+1})\}\end{equation}
而随机的动态规划的递推公式为:
\begin{equation}f(S_{i})=\max\limits_{x_{i}}\{\sum p_{k}V(S_{i},x_{i})+\sum p_{k}f(S_{i+1})\}\end{equation}
其中, 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 代码为:
确定的动态规划的递推公式:
\begin{equation}f(S_{i})=\max\limits_{x_{i}}\{V(S_{i},x_{i})+f(S_{i+1})\}\end{equation}
而随机的动态规划的递推公式为:
\begin{equation}f(S_{i})=\max\limits_{x_{i}}\{\sum p_{k}V(S_{i},x_{i})+\sum p_{k}f(S_{i+1})\}\end{equation}
其中, 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(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 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
相关文章推荐
- python、matlab、c++的括号增加次序,以及图片存储方式
- matlab各种技巧笔记
- Matlab与线性代数 -- 矩阵的特征值与特征向量
- Matlab Tricks(二十六)—— 置乱(随机化)与恢复(shuffle/permutation & restore)
- matlab 高阶(一) —— assignin与evalin
- MATLAB中的共轭转置与转置
- 主成分分析(PCA)深入剖析+Matlab模拟
- 解决了java+matlab混编+web(jsp)调用Matlab,网页中显示Figure,详细实例
- Matlab for Mac 中文路径乱码解决
- matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
- 音频噪声抑制(3):维纳(Wiener)滤波器篇之有辅助观测数据
- matlab图加上箭头和标注实例
- K均值聚类算法的MATLAB实现
- Matlab Tricks(二十五) —— 二维图像的 shuffle
- Matlab与随机变量和样本的数字特征
- MATLAB分割小实验
- Matlab入门
- matlab虚拟现实之V-Realm Builder2使用NavigationInfo精确定位、建模
- matlab 傅立叶变化测试
- 集成学习(1)--Matlab/Python