引用来自ShangtongZhang的代码chapter04/gamblers_problem.py
赌徒问题
问题描述
一个赌徒可以在每轮赌博中决定将自己手里的钱拿来赌硬币的正反,如果硬币向上,则可以获得押金一样的奖励,但是向下的话押金就没了。结束条件是赌徒手里的钱增长到100,或者把钱输光。
这个问题可以定义为state为赌徒手里的钱,action为每次拿去赌的钱,discount=1的MDP问题。
引入模块并定义全局变量
1 | import numpy as np |
Value Iteration
需要注意几点:
初始化value-state的时候,除了100的状态为1,其余都为0,可以理解为除了到达100可以获得reward=1,其余action对应reward=0,即利用value-state initialize来实现reward。
训练的时候把action=0去掉,是因为aciton=0会导致agent陷入局部最优,所以需要跳出这个点。
1 | def figure_4_3(): |
中奖率=0.4
中奖率=0.1
中奖率=0.8(所以说中奖率太高也不能浪吗。。。)