鱼C论坛

 找回密码
 立即注册
查看: 2192|回复: 1

[技术交流] 《用Python动手学习强化学习》【贝尔曼方程】【价值最大化】

[复制链接]
发表于 2021-9-20 10:07:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码取自:《用Python动手学强化学习》第二章,基于价值最大化的贝尔曼方程

def R(s):
    if s == "happy_end":
        return 1
    elif s == "bad_end":
        return -1
    else:
        return 0

def transit_func(s, a):
    actions = s.split("_")[1:]
    LIMIT_GAME_COUNT = 5
    HAPPY_END_BORDER = 4
    MOVE_PROB = 0.9
    
    def next_state(state, action):
        return "_".join([state, action])
    
    if len(actions) == LIMIT_GAME_COUNT:
        up_count = sum([1 if a == "up" else 0 for a in actions])
        state = "happy_end" if up_count >= HAPPY_END_BORDER else "bad_end"
        prob = 1
        return {state : prob}
    else:#递归
        opposite = "up" if a == "down" else "down"
        return {next_state(s, a): MOVE_PROB,
                next_state(s, opposite): 1 - MOVE_PROB}
        
def max_V_on_next_state(s):
    if s in ["happy_end", "bad_end"]:
        return 0
    actions = ["up", "down"]
    values = []
    for a in actions:
        transition_probs = transit_func(s, a)
        v = 0
        for next_state in transition_probs:
            prob = transition_probs[next_state]
            v += prob * V(next_state)
        values.append(v)
    return max(values)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-20 10:08:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表