这里是要完成一个能玩 Nim 这个游戏的 ai,使用 Q 学习的算法
这个 Nim 的游戏大概就是:一堆火柴,玩家轮流取,谁最后取谁输
get_q_value
这里需要注意访问字典的方法,是用[ ] 而非 ( )
需要注意的是,这里的 state 是一个 list,而 list 这个类是可变的,不可哈希的(unhashable),因此不能作为字典的键来访问(键的组成元素都不行)
因此,这里需要先将 list 转换成tuple 元组,再来访问 q 值表
后续所有需要访问 q 值表的函数都需要这一步操作
update_q_value
注意新 q 的定义。按照公式计算即可
best_future_reward
这里的 q 值需要通过 get 函数来获得,而 get 函数不仅需要 state,还需要 action,因此需要先获取所有的 actions,然后再一个个遍历
choose_action
这里需要做一个随机选取的操作,随机的概率是ε,这里我没想好如何用 random 较为简单的实现,gpt 给的方案让我有很大启发
这里使用
random()
随机生成 0-1 中间的随机数,ε也在这个区间,因此只要随机数小于ε就代表随机抽中
至此,Nim 完成
现在是 2.28 凌晨,我在自习室,已经马上要到新的一天了
祝尧尧生日快乐!🎂