Skip to content

qlearning做接水果的游戏。 qlearning入门

Notifications You must be signed in to change notification settings

GuoYi0/qlearning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Q-learning做接水果游戏,游戏有游戏动画在gifs/catch.gif里面 代码主要参考这里,改变之处主要是增加了注释,并稍微修改了风格。

游戏内容是,一个水果垂直落下来,下面有个盘子,每次可以选择左移、右移、不动,来接住水果。

考虑一个游戏 G. 由一个函数表示。其有两个输入,当前状态S,一个动作a。函数输出一个新状态S' 和一个奖励r

那么动作a是怎么得到的呢?显然,对于游戏而言,动作a只能与当前状态S有关。即,我们需要训练一个函数F,满足 F(S) = a即输入是当前状态,输出是动作a。这里的F就是我们要训练的函数

对于接水果游戏,有三个动作,左移、右移、不动。故我们设计一个神经网络M,输入是当前状态S,输出神经元有三个

M(S) = {q1, q2, q3}

这里 q1, q2, q3 就是网络M的三个动作对应的得分,分值区间为[-1.0, 1.0]。表示若执行该动作可能的得分。我们选择分数最大的那个,作为基于当前状态S的预测动作

F(S) = argmax(M(S))

下面定义Q函数: Q函数的输入是当前状态S,和依据当前状态获得的动作a,输出是该动作产生的反馈r,或者叫得分r。如果该动作让游戏赢了,则令r=1,失败则r=-1,暂时无法判断输赢则r=0

显然 Q(S, a) = r + Q(S', a')

其中S’是执行动作a以后的新状态,a' 是基于新状态 S' 应该要执行的新动作

这是一个递归函数

我们可以引入一个小于1.0 的gamma,来把当前分数r置一个更大的权重,

Q(S, a) = r + gamma * Q(S', a')

Running Example:

python main.py

About

qlearning做接水果的游戏。 qlearning入门

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages