鱼C论坛

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

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

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

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

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

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


  1. def R(s):
  2.     if s == "happy_end":
  3.         return 1
  4.     elif s == "bad_end":
  5.         return -1
  6.     else:
  7.         return 0

  8. def transit_func(s, a):
  9.     actions = s.split("_")[1:]
  10.     LIMIT_GAME_COUNT = 5
  11.     HAPPY_END_BORDER = 4
  12.     MOVE_PROB = 0.9
  13.    
  14.     def next_state(state, action):
  15.         return "_".join([state, action])
  16.    
  17.     if len(actions) == LIMIT_GAME_COUNT:
  18.         up_count = sum([1 if a == "up" else 0 for a in actions])
  19.         state = "happy_end" if up_count >= HAPPY_END_BORDER else "bad_end"
  20.         prob = 1
  21.         return {state : prob}
  22.     else:#递归
  23.         opposite = "up" if a == "down" else "down"
  24.         return {next_state(s, a): MOVE_PROB,
  25.                 next_state(s, opposite): 1 - MOVE_PROB}
  26.         
  27. def max_V_on_next_state(s):
  28.     if s in ["happy_end", "bad_end"]:
  29.         return 0
  30.     actions = ["up", "down"]
  31.     values = []
  32.     for a in actions:
  33.         transition_probs = transit_func(s, a)
  34.         v = 0
  35.         for next_state in transition_probs:
  36.             prob = transition_probs[next_state]
  37.             v += prob * V(next_state)
  38.         values.append(v)
  39.     return max(values)
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-20 10:08:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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