动态规划算法(这个算法重点在于如何拆分问题,也就是找到你解决问题的有效子问题)

一.什么是动态规划?

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。

二.动态规划的核心是什么?

最优化原理”是动态规划的核心,所有动态规划问题的递推关系都是根据这个原理建立起来的,并且根据递推关系依次计算,最终可求得动态规划问题的解。

用例子说明说明如何用动态规划解决0.1背包问题:

有3个物品,背包容量为10,物品体积与如下:

先说划分子问题的方式:

(1)把第n-1块物品放入包后求背包的最大值问题当做把第n-1块物品放入包后求背包的最大值问题的子问题。(错误的)

(2)把n-1背包容量问题当成是n背包容量的子问题(正确的

那么可以发现第二种划分子问题的方式才是有效的划分了子问题方式。

 

现在我们就可以用第二种划分子问题的方式来求背包的最大值:

(1)第一步,求背包容量为1时,找出放入物品价值最大方案。

(2)第二步,求背包容量为2是找出放入物品价值最大方案。(我们拿背包容量为1的时候价值背包容量为1再放入物品后的价值比较,那个价值大,那个就是背包容量为2的放入物品价值最大方案)

(3)第三步,求背包容量为3是找出放入物品价值最大方案。(我们拿背包容量为2的时候价值背包容量为2再放入物品后的价值比较,那个价值大,那个就是背包容量为3的放入物品价值最大方案)

           ....

(4)第十步,求背包容量为10是找出放入物品价值最大方案。(我们拿背包容量为9的时候价值背包容量为9再放入物品后的价值比较,那个价值大,那个就是背包容量为9的放入物品价值最大方案)

 

此时我们的第十步就求出了背包容量为10,放入物品价值最大的方案,(下面具体用代码实现就很简单了,不列出)

 

三.动态规划数学模型:(一般使用动态规划不需要建立动态规划数学模型,感兴趣可以看看。动态规划数学模型转载:http://dec3.jlu.edu.cn/webcourse/t000048/yun/ch5_03.htm):

一般来说,利用动态规划求解实际问题需先建立问题的动态模型,具体步骤如下:

⒈将问题按时间或空间次序划分成若干阶段。有些问题不具有时空次序,也可以人为地引进时空次序,划分阶段。

⒉正确选择状态变量。这一步是形成动态模型的关键,状态变量是动态规划模型中最重要的参数。一般来说,状态变量应具有以下三个特性:

    ⑴要能够用来描述决策过程的演变特征。
    ⑵要满足无后效性。即如果某阶段状态已给定后,则以后过程的进展不受以前各状态的影响,也就是说,过去的历史只通过当前的状态去影响未来的发展。
    ⑶递推性。即由k阶段的状态变量及决策变量uk可以计算出k+1阶段的状态变量

⒊确定决策变量及允许决策变量集合Dk()。

⒋根据状态变量之间的递推关系,写出状态转移方程:

=T(())


⒌建立指标函数。一般用()描写阶段效应,)表示k—n阶段的最优子策略函数。 

⒍建立动态规划基本方程:
 

以上是建立动态规划模型的过程,这个过程是正确求解动态规划的基础。

    在动态规划基本方程中, (), =T()都是已知函数,最优子策略)与
)之间是递推关系,要求出)及(),需要先求出),这就决定了应用动态规划基本方程求最优策略总是逆着阶段的顺序进行的。由后向前逐步计算,最终可以算出全过程的最优策略函数值及最优策略。 
 
    另一方面,由于k+1阶段的状态=T()是由前面的状态和决策所形成的,在计算
)时还不能具体确定的值,所以,这就要求必须就k+1阶段的各个可能状态计算
),因此动态规划方法不但能求出整个问题的最优策略和最优目标值,而且还能求出决策过程中所有可能状态的最优策略及最优目标值。
    下面就按上述步骤求解例2。
例2(带回收的资源分配问题)某厂新购某种机床125台。据估计,这种设备5年后将被其它设备所代替。此机床如在高负荷状态下工作,年损坏率为1/2,年利润为10万元;如在低负荷状态下工作,年损坏率为1/5,年利润为6万元。问应如何安排这些机床的生产负荷,才能使5年内获得的利润最大?
    解:以年为阶段,k=1,2,3,4,5, 取k年初完好的机床数为状态变量, 以k年初投入高负荷运行的机床数为决策变量,则低负荷运行机床数是-,于是状态转移方程为:


以利润为目标函数,则k年利润为:


)为k年至5年末最大总利润,则动态规划基本方程为:

以上是建立动态模型的过程,下面具体求解。

注意动态规划基本方程为:
    
     
     
     
至此已算得最大总利润2790万元,再按与计算过程相反的顺序推回去,可得最优计划如下表所示:

    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值