【自用笔记】动态规划+蒙地卡罗算法+时序拆分估算V值

如何用蒙地卡罗方法(Monte-Carlo)估算V值? - 知乎 (zhihu.com)(1 封私信 / 2 条消息) 什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎 (zhihu.com)如何用蒙地卡罗方法(Monte-Carlo)估算V值? - 知乎 (zhihu.com)

如何用时序差分TD估算状态V值? - 知乎 (zhihu.com)

侵权可删

 1 动态规划DP

1.1题目引入

题目1:钞票面额分别是1、5、11,我们想要凑出15,问需要最少几张钞票

1.1.1 贪心策略

思想:每次都取最大面额

结果:取11+1+1+1=4张(鼠目寸光)


1.1.2 动态规划DP 

思想:求f(15),只考虑第一次取什么,因为15>11>5>1,所以这三个面额都可以取

  • 当取11元时,所取的张数就等于f(15-11)+1
  • 当取5元时,所取的张数就等于f(15-5)+1
  • 当取1元时,所取的张数就等于f(15-1)+1
  • 最终f(15)的就是前三种情况的min

        以此类推每个f都根据其金额大小与更小的f相联系,所以我们只需要从f(0)开始依次算到f(15)即可

f=15
cost=[float('inf')]*16
# 取0元是0张钞票
cost[0]=0
for i in range(1,15+1):
  # 如果要取的金额数i大于等于1元,取一个1元 + i-1元要取的张数
  if i>=1:
    # 总共要取:金额数-1元要取的张数+1,与目前的花费取较小值
    cost[i]=min(cost[i-1]+1,cost[i])
  # 如果要取的金额数大于等于5元,取一个5元 + i-5元要取的张数
  if i>=5:
    # 总共要取:金额数-5元要取的张数+1,与目前的花费取较小值
    cost[i] = min(cost[i - 5] + 1, cost[i])
  # 如果要取的金额数大于11元,取一个11元 + i-11元要取的张数
  if i>=11:
    # 总共要取:金额数-11元要取的张数+1,与目前的花费取较小值
    cost[i] = min(cost[i - 11] + 1, cost[i])
print(cost)

结果:f(15)=3

题目2:

1.2 动态规划DP

1.2.1 定义:将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解我们将求解f(c)称作求解f(n)的“子问题”。


1.2.2 特点:DP是枚举有希望成为答案的解,尽量缩小可能解空间,这个空间比暴力的小得多。解空间的大小从指数级降到多项式级


2 蒙特卡洛算法

还是上题的路径题目

2.1 与动态规划的不同

若只看A到T

  • 不同点1:奖励总和的计算不同

        - 动态规划A-C-T路径计算方法为:20+30=50

        - 蒙特卡洛A-C-T路径计算方法为:20*gamma+30=48(gamma为折扣率,含义为未来奖励对当前的影响程度)如下图:

  • 不同点2:思想不一样

        - 动态规划思想为:已知环境也就是路线,min(20+30,10+5+30,10+10)

        - 蒙特卡洛思想为:未知环境随机走,步骤如下:

                1. A-T随机执行100次,每次都随机走,A会获得100个G值,A的G值是根据下一步(C或D)的G值计算得来的,对这100个G值求平均就是A的V值;

                2. 同理其中路过C可能有80次,C就有80个G值,C的G值是根据下一步(D或T)的G值计算得来的,80个G值求平均就是C的V值;

                3. 同理路过D可能有60次,D就有60个G值,60个G值求平均就是C的V值;

                4. 此时每个节点都可以算出来V值,从A点出发选择C点还是D点就是要看C和D谁的V值大,谁大走谁


2.2 总结

  •  G的意义:在某个路径上,状态S到最终状态的总收获。所以选路径是根据G值。
  •  V和G的关系:V是G的平均数。所以前一个点计算G值是依据本点的V值。
  • 每一次游戏,都需要先从头走到尾,再进行回溯更新。

2.3 V的求法和选择策略相关

上文说道V=\sum Gi,由于是随机走动,其中一些G可能走的路径是完全相同的,比如有四条路经恰好每条都走25次,则计算如下:

 

但有时可能每条路径重复走的次数不一样,可能奖励高的那条多走了几次所以平均计算出来的V也会更大一些。

 

2.4 V的更新公式

阿尔法学习率可以理解为,每次V向目标靠近的幅度;学习率越大,表示向G靠近的幅度越大,反之则越小。 经过更新公式,可能增大也可能减小。


2.5 缺点

 1. 蒙地卡罗算法相对动态规划,会有点不那么准。因为蒙地卡罗每一次的路径都是不一样的。

 2. 如果环境的状态空间非常大,或者最终状态只有非常小的概率达到。那么蒙地卡罗算法将会很难处理。

3 时序拆分法(TD)

3.1 再次对比:

  • 动态规划:已知全局,从终点开始更新每个点到终点的最大奖励
  • 蒙特卡洛:未知全局,走1000次,记录每个点在每次走的过程中到终点的奖励Q值,平均得此点V值
  • 时序拆分:未知全局,先走几次,步骤如下:

        1. 先走着,如果走到终点了,可算得终点前一站(比如C)的V值(根据r)

        2. 再走一次,这次有可能会遇到C,则回退一步,根据C的V值和这一步的奖励r算出上一步的V值(若上一步已经存在V了,则走3.3的更新公式)

        3. 慢慢的我们会在有限的步骤中得到全部点的V值(标志是走到的每一步都有V),走的时候选择V大的走


3.2 V的更新公式

类似蒙特卡洛算法,只是把更新目标从G(类似Q值),改成r+gamma*V

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值