动态规划算法

一、算法思想

     动态规划方法是处理分段过程最优化问题的一类及其有效的方法。在实际生活中,

有一类问题的活动过程可以分成若干个阶段,而且在任阶段后的行为依赖于该阶段的状态,

与该阶段之前的过程是如何达到这种状态的方式无关。这类问题的解决是多阶段的决策问题,是多阶段的决策过程。

1“最优先原则”,多阶段过程的最优决策序列应具有以下性质:

无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策,所产生的状态构成一个最优先决策序列。

(这要求原问题最优解包含了其子问题的一个最优解,此为最优结构性质。

2动态规划算法采用最优原则来建立递归关系式(求最优值),在求解问题时有必要验证该递归关系式是原保持最优原则。

若不保持,则不能用动态规划算法。在得到最优值递归方程之后,需要逆推构造最优先解,

在使用动态规划算法从前往后求解时,每次产生的子问题总是之前就有的子问题,有些子问题反复计算多次,

子问题重叠。对每一个子问题之计算一次,然后将其解保存在一个表格中,当再次要解此问题时,

只是简单地调用一下已有结果。

  ③一般情况下,子问题随规模呈多项增长,因此,动态规划算法通常只需要多项式时间,从而获得较高的解题效率。

最优子结构性质和子问题重叠性质是采用动态规划算法的两个基本要素。

④ 此次采用动态规划的解决问题的一种,就是资源动态分配问题,就像农村的农田一样,上一块水田积满水,

水就向较低的下一块水田流,水一直在流动,但不会溢出田边。

二.实例演示

目的(解决员工加班问题和库存问题,使公司这段时期具有最佳效益)

某化妆品公司根据市场调查,估计在明年四个主要阶段堆本公司主产品需求如图一表示:

预算各阶段对本公司产品需求

阶段 x(单位)

市场需求数L(X) (单位)

1

3

2

4

3

4

4

5

 已知: 生产每批产品固定资金G=6千元,每个产品成本是C=3千元,并且每个产品每阶段库存费为F=20元;

最初库存量为K(1)=1,仓库容量最大为R=6,计划阶段末期k=0,任意阶段的最大生产量为Z=7;

1.首先建立动态规划基本方程

                             Y(x)K(x)=min{ G+D*S(x)+F*(K+S(x)-L(x)  ) +Y(x+1)K(x+1) }………………………

[   Y(x)K(x)表示x时期最优生产储存-----计划的费用;D表示生产单个产品的费用;

S(x)表示X阶段产品的最优产量;K(x+1)表示x+1阶段的初始库存量; ]

状态转移方程为:

                        K(x+1)= K(x)+S(x)-L(x)……………………………………….

 2.动态规划的解一般是从最后一个阶段向前追踪求解,逆推求得结果。因此首先考虑第四阶段的最低费用:

X=4,Y(5)K(5)=0, Y(4)K(4)={   6+3*S(4)  }=min{ 6+3*( 5 - S(4) ) }=21-3K(4) (千元)

0≤K(4)≤min{ R ,L(4) }=L(4)=5(单位),当K(4)分别取0,1,2,3,4,5时Y(4)k(4)及L(4)-k(4)的值如下表:

 

阶段存货K(4)(单位)

Y(4)K(4) (千元)

L(4)-K(4)(单位)

0

21

5

1

18

4

2

15

3

3

12

2

4

9

1

5

6

0

X=3时,K(4)=K(3)+S(3)-L(3)

0≤K(3)≤{ R, L(3)+L(4)}=R=6 (单位)

5-K(3)≤S(3)≤min{ Z, k(3)+k(4)-K(3)}=min{ 7,9-K(3) }

21+0+2124+2+1827+4+16

Y(3)K(3)={G+C*s(3)+F(s(3)+K(3)-L(3) )+Y(3)K(3)= =min{ 6+3*S(3)+2*(S(3)-5)+Y(3)*(S(3)-5) }

=min                        =42(千元)

 

 

L(3)-k(3)=5

同理 K(3)=1,2,3,4,5时,Y(3)K(3)和L(3)-k(3)的值如下(第三阶段的最低费用):

K(3)\S(3)

0

1

2

3

4

5

6

7

Y(3)k(3)(千元)

L(3)-K(3)  (单位)

0

1

2

3

4

5

 

 

 

 

 

6+0+21

 

 

 

 

9+0+21

9+2+18

 

 

 

12+0+21

12+2+18

12+4+15

 

 

15+0+21

15+2+18

15+4+15

15+6+12

 

18+0+21

18+2+18

18+4+15

18+6+12

18+8+9

21+0+21

21+2+18

21+4+15

21+6+12

21+8+9

21+10+6

24+2+18

24+4+15

24+6+12

24+8+9

24+10+6

 

27+4+12

27+6+9

27+8+6

27+10+3

42

39

36

33

30

27

5

4

3

2

1

0

X=2,K(3)=K(2)+L(2)-S(2)

0≤K(2)≤{ R, L(2)+L(3)}=R=6 (单位)

4-K(2)≤S(2)≤min{ Z, L(2)+L(3)-K(2) }= min{ 7, 8-k(2)  }

18+0+42

21+2+39

24+4+36

27+6+33

 

 

 

Y(2)K(2) ={ G+C*s(2)+F(s(2)+K(2)-L(2) )+Y(2)K(2)=min{ 6+3*S(2)+2*(S(2)-4)+Y(3)*S(3) }

=min{ 6+3*S(2)+2*(S(2)-4)+Y(3)*(S(2)-4) }=min                              =60(千元)

 

 

 

L(2)-K(2)=4(单位),同理 k(2)取1,2,3,4时,Y(2)K(2)和L(2)-k(2)的值如下(第二阶段的最低费用):

K(2)\S(2)

0

1

2

3

4

5

6

7

Y(2)k(2)

(千元)

L(2)-K(2)  (单位)

0

1

2

3

4

 

 

 

 

6+0+42

 

 

 

9+0+42

9+2+39

 

 

 

12+0+21

12+2+18

 

 

15+0+42

15+2+39

15+4+36

 

18+0+42

18+2+39

18+4+36

18+6+33

21+2+39

21+4+36

21+6+33

21+8+30

21+10+27

24+4+33

24+6+30

24+8+27

24+10+24

 

27+6+30

27+8+27

27+10+24

62

60

57

51

48

5

4

3

2

1

12+0+62

15+2+59

18+4+56

21+6+53

24+8+50

X=1时,K(1)是唯一确定的,因此,K(1)=S(1)-2, 2≤K(1)≤6

Y(1)K(1)= { 6+3*S(1)+2*(S(1)-2)+Y(2)*(S(1)-2) }=min                             =74(千元)

 

 

 

 

L(1)-K(1)如图所示

K(1)\S(1)

2

3

4

5

6

Y(1)K(1)

(千元)

L(1)-K(1)

(单位)

1

 

12+0+62

 

15+2+59

 

18+4+56

 

21+6+53

 

24+8+50

74

2

Z=则课求得最优决策过程,最优目标函数值(最小费用)是:

Y(1)(1)=74(千元)

最优决策序列为S(x)={2,4,5,5},最优初始库存量是{1,0,0,0,}

总结

根据我们所学习的动态规划算法(DP),大多数用于解决组合优化问题,其本质是采用了递归的思想,

其动态规划可以说是一种以空间换时间的算法。

其动态规划算法用4步来做:

(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,

否则问题就无法求解。

  (2)确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

  (3)确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。

     (4)寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。

其动态规划拥有其他算法没有的子问题归约成下一步问题的子问题,也就是子问题重叠,为最后的解做好了标记追踪(做备忘录),

也就是说这个时候在求解多维问题时,我们也可以采用这种记忆追踪,不用一直递推,在追踪时从之前的一个状态转移到另外一个状态 ,

需要通过状态特征建立一个状态转移特征方程,一个状态演变到另一个状态,往往是通过决策来进行的。有了决策,就会有状态转移。

而无后效性,就是一旦某个状态确定后,它之前的状态无法对它之后的状态产生影响。然而动态规划解决的问题我认为分为线性问题和非线性,

线性问题如最长单调子序列,离散问题就是非线性的一种,如0-1背包。非线性问题,如果不满足优化原则,我们的动态规划解决不了,

那么就可以采用其他的算法,因为任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。

可以用三点来概括一下动态规划:

1.      所有子问题组成的表(问题的阶段)

2.解决问题的依赖关系可以看作是一个图(每个阶段的状态)

3.做出子问题的顺序(递推关系)

整个求解过程就可以用一个最优决策表来描述,最优决策表是一个图表,其中行表示决策的阶段,列表示问题状态,表格需要填写的数据一般对应此问题的在某个阶段某个状态下的最优值(如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值