#\%& }\! ’, ., & < #\< #\,)% !\%& ), ’
’&,(, {
边界条件:!’%& < #’ %&
)!>或 !<’ #’ )! &<’ #’ ,$’ ) <&)
其中第
\阶段的状态为#\
,其决策变量 $\表示状
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