决定论指的是,agent在某个状态做出一个行为必定到达另一个状态。
如果从100楼高的地方,跳楼,百分之百死掉,这是决定论。
如果是概率论,则做出一个行为可以能有不同的状态,比如假设有一头熊追我,如果我装睡(action),熊可能不吃我,也可能吃我。
迭代策略评估的核心是通过贝尔曼方程更新当前状态的价值,再用新的价值与旧的价值比较,也就是做差值,如果这个差的绝对值小于一个门槛(人为设置),就说明价值函数找到了。
为什么是这样?简单点说是靠贝尔曼方程的迭代。本质上是加权求平均值,可以理解为,平均值是一样的,迭代到最后数据已收集足够,平均值已经准确了,再迭代也不会变,或者变动很小,这个时候就没有必要迭代下去了,浪费时间。
# 初始化各个状态的价值。除终止状态外必为0外,可以设成随机。
V = {}
for s in grid.all_states():
V[s] = 0
# 开始循环
while True:
# 用来存储差值。
biggest_difference = 0
for s in g.all_states():
if not g.is_terminal(s):
old_v = V[s]
new_v = 0
for a in ACTION_SPACE:
for s2 in g.all_states():
action_prob = 1 if policy.get(s) == a else 0
r = rewards.get((s,a,s2),0)
#贝尔曼方程更新价值
new_v = action_prob*trans_probs.get((s,a,s2),0)*(r+gamma*V[s2])
V[s] = new_v
# 求差值
der = np.abs(new_v-old_v)
求得了价值函数,还只考虑了决定论。还需要考虑行为可能到达不同的状态的情况,也就是 概率论.