动态规划(二)

建模一个动态规划无限传输问题

问题描述

    本节实现一个动态规划问题实现。具体问题见上一节的第三个栗子。这里再次简述:

  • 在N个时隙中传输M个数据包
  • 信道条件有两种:好(概率为 p ),不好(概率 (1p) )
  • 在好信道下传播的代价是 PG ,不好条件传输下是 PB(PB<PG)
  • 时隙用完之后剩下的 m 个数据包开销为 C(m)

  • 目标:需要建立一个动态规划系统,完成传输任务,使得传输代价在平均意义上是最优的。

状态确定

    在一个时刻系统可以观察到的有两个量:剩余数据包数量m以及信道状态H。因此我们将二者联合组成系统状态(m,H)。那么在每一个时隙系统总共有2*(m+1)个状态。每一个状态可能跳转到下一个时隙的某一个或者一些状态。跳转判断条件有:

  1. 在好信道下传输的代价
  2. 在好信道下不传输代价
  3. 在坏信道条件下传输代价
  4. 在坏信道条件下不传输代价

    其实上述条件中的3可以忽略,因为在好信道条件下传输一定是最优的。故不可能在好信道条件下还不传输。所以我们的优化是为了对抗坏信道的。系统得到第i时刻的状态,需要根据对未来的估计确定现在的控制(传还是不传?)。因此系统是基于N,N-1,…,i+1时刻的信息来指导第i时刻的决策。

状态跳转分析

    系统必须在N个时隙中传完M个数据包。则没有传完的代价是非常大的。故:

C(m)={0  m=0  m>0

    可得第N-1个时隙的状态:

《动态规划(二)》

    首先估计第N-1个时隙的开销,此时有可能还剩0个数据包,即之前的时隙全部发送完毕。可能还剩1个。可能还剩1个以上,否则将无法全部传输。所以剩余1个以上的状态无需计算,直接给最大值。剩余0个不必传输,也就是代价为0。剩余1个时,可能在好的信道条件下,也可能在坏的信道条件下。因此每一个状态需要计算2个(传输或者不传输)代价,并取最小值作为当前状态的代价。

    因此我们可以得到N-1时刻的每一个状态对应的开销:

状态值状态开销
(0,好)0
(0,坏)0
(1,好) PG
(1,坏) PB
其他 +

其实从这里我们就可以看出,动态规划具有一定的导向。最终会将所有数据包都发送完毕。

    接下来我们来分析一般情况下状态转移。首先我们需要明确一般状态的约束:
1. 每一个状态其剩余数据包数量必须小于某一个值(现在记为leftMAX),因为我们必须保证最后一个时隙之前数据包发送完毕。所以,leftMAX = N – t,当N-t < M时 leftMAX = M。t代表当前时隙。超过leftMAX的所有状态都无法完成数据包的传输,因此代价为 +
2. 每一个状态都必须有一个最小值,因为每一个时隙只能传递一个数据包,所以第一个时隙只能有M个数据包。第二个时隙最少只能有M-1个。。第t个时隙,最多只能有M-t+1个数据包,我们记为leftMIN。低于这个数量不可能发生,因此代价为 +
3.状态跳转:我们需要根据t时刻的状态信息计算t-1时刻的状态信息。(现在已知t时刻信息)

t-1时刻状态分析方法
小于leftMIN +
(i,好)好信道一定传(除非i=0)
(i,不好)坏信道看情况:1、传数据,则COST= PB+t(i1,)×p+t(i1,)×(1p)                                             2、不传数据,则 COST = t(i,)×p+t(i,)×(1p)
········
大于leftMAX +

小结&代码

        当计算到时刻1的时候即完成了动态规划的状态刻画,此后只要在这个模型下,我们都可以利用上述状态跳转方式来对每一个决策进行规划, 使得整体开销在平均意义上达到最优。
        本人按照上述模型写了一份C++代码,托管在这里,如果有务还请指教!

    原文作者:动态规划
    原文地址: https://blog.csdn.net/sylar_d/article/details/50900521
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞