动态计划求解方法的Matlab实现及应用[]

#\%& }\! ’, ., & < #\< #\,)% !\%& ), ’

’&,(, {

边界条件:!’%& < #’ %&

)!>或 !<’ #’ )! &<’ #’ ,$’ ) <&)

其中第

\阶段的状态为#\

,其决策变量 $\表示状

6 / 24

态处于 #\%&

的决策,< #\,

状态转移方程为 #\%& ! (\$\

)\阶段的允许决策集合记为 %\)&\ ,< #\,< #\,)

为指标函数。

当求解时,由边界条件从 \!

’开始,由后向

前逆推,逐阶段求出最优决策和过程的最优值,直

到最后求出 !<& #&

)即得到问题的最优解。

类似的,动态规划基本方程的顺序形式为

{ !\#\)!\$\

7 / 24

\#\) {&\#\,$\

)%!\’&< #\

)},\,(,.,’’&,’ )< #&

边界条件:!>!> <()

其中状态转移方程为 #\! (> \

)\阶段的 < #\%& ,,

允许决策集合为 %<>#\%&

)指标函数为 &\ ,< #\%& , $\

)。当求解时,由边界条件从 \

!&开始,由前向

后顺推,逐阶段求出最优决策和过程的最优值,直 到最后求出 !<’ #’

8 / 24

%&

)即得到问题的最优解。 \

(基本方程求解的 *+$,+-实现

动态规划没有统一的标准模型,对于基本方程

<&)和<()的求解也没有统一的标准算法。但是,我

们分析用动态规划解决问题的思想方法,会发现一

个共同的明显特征,这就是将所研究的问题分为关

联着的多个阶段后,每个阶段都有若干个对应的子

问题,求解问题的关键就是按阶段次序求解大量子

问题的最优解。而且对于每一个子问题的求解结

果都必须完整贮存下来,上一阶段子问题的结果将

对下一阶段产生一定的影响,即对全局最优决策也

产生影响。如何处理好所有各阶段的大量子问题 的求解及结果的贮存和调用等,这是编程求解动态 规划问题的难点所在,也是必须要解决的问题。 (* &

*+$,+-实现方法综述

在这里仅就动态规划基本方程的逆序形式进

行讨论,顺序形式也类似。对于各个阶段的子问题 的求解方法基本都是相同的,在当前阶段的所有子 问题求得最优决策以后,通过状态转移方程可以确 定出下一阶段的状态和允许状态集合,从而可以在 决策集合上来寻求这个新阶段的最优决策。从第 ’个阶段出发,直到第一个阶段为止,即可得到全 过程的最优决策。因此,在具体实现的过程中,针 对每一个状态编写一个相对通用的函数,然后在主 程序中循环调用该函数,以实现任意状态下的最优 决策。问题的主体程序框图如图

9 / 24

&所示。 图

&主程序框图 (*

(具体程序实现

按照如上的程序框图,编写相关程序,主要由 .个子程序构成:

#主函数

/012$3\[#+3,453]! +,-’<6,7) 输入状态向量 6和相关指标矩阵 7,返回最优策略

和相应指标值;用全局变量 8,88,888,分别记录指

标值、状态地址和相应决策。

$状态计算子函数 !.’/0-1’

//<1,66,9+,)计

算相应状态下的最优决策,并存储;1为目前阶段 数,66为前一阶段某个状态的最优决策,9+,为相应 指标值。

!辅助计算子函数

!.’/0-1’[6:。,<]! 2>32<6,

$\,1,6:。)确定变量

88;在某个阶段,对该阶段所 第

+期于斌等:动态规划求解方法的 9/#:/。实现及应用

10 / 24

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4