美文网首页
迭代策略评估核心(决定论)

迭代策略评估核心(决定论)

作者: Rain师兄 | 来源:发表于2021-08-11 22:01 被阅读0次

决定论指的是,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)


求得了价值函数,还只考虑了决定论。还需要考虑行为可能到达不同的状态的情况,也就是 概率论.

出现的问题是,奖励r和状态转移的概率分布
get函数的作用:
get 有两个input,第一个是字典的键,如果在字典里找得到,就返回所对应的值。
如果找不到,就返回第二个input参数。

是获取给定参数的字典里的值,如果没有找到,则返回第二个参数
状态转移概率分布,奖励,动作都很重要。

相关文章

网友评论

      本文标题:迭代策略评估核心(决定论)

      本文链接:https://www.haomeiwen.com/subject/xrihbltx.html