2021-10-17 3.2

# discount_factor为折扣因子,theta为变化阈值,如果状态值函数的变化不大于阈值,则迭代停止
def policy_evaluation(policy, environment, discount_factor=1.0, theta=1.0):
    env = environment
    V = np.zeors(env.ns)  # 初始化全0的值函数向量用于记录状态值
    for _ in range(10000):  # 迭代开始
        delta = 0
        for s in range(env.ns):  # 对每个状态都进行全备份
            v = 0
            for a, action_prob in enumerate(policy[s]):  # 检查下一个有可能进行的动作,及相应概率,对应于Π(a|s)
                for prob, next_state, reward, done in env.P[s][a]:  # 提取转移概率,下一状态和奖励值
                    v += action_prob * prob * (reward + discount_factor * V[next_state])  # 按公式计算状态值
            delta = max(delta, np.abs(v - V[s]))  # 计算状态值的变化量
            V[s] = v
        if delta <= theta:
            break
    return  np.array(V)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值