您的位置:首页 > 编程语言 > Python开发

根据A painless Q-Learning教程用python实现

2016-04-08 13:31 567 查看
(原文链接:http://mnemstudio.org/path-finding-q-learning-tutorial.htm )

QLearning:

1. :给定参数γ和R矩阵

2. 初始化 Q

3. for each episode:

3.1随机选择一个出事状态s

3.2若未达到目标状态,则执行以下几步

(1)在当前状态s的所有可能行为中选取一个行为a

(2)利用选定的行为a,得到下一个状态 。

(3)按照 Q(s,a)=R(s,a)+γmax{Q(s^,a^)}

(4) s:=s^

γ 为学习参数, R为奖励机制, 为在s状态下,执行Q所得到的值。随机选择一个一个状态,即开始搜索的起点,在为100的点为终点。下面是程序。

import numpy as np
GAMMA = 0.8
Q = np.zeros((6,6))
R=np.asarray([[-1,-1,-1,-1,0,-1],
[-1,-1,-1,0,-1,100],
[-1,-1,-1,0,-1,-1],
[-1,0, 0, -1,0,-1],
[0,-1,-1,0,-1,100],
[-1,0,-1,-1,0,100]])
def getMaxQ(state):
return max(Q[state, :])
def QLearning(state):
curAction = None
for action in xrange(6):
if(R[state][action] == -1):
Q[state, action]=0
else:
curAction = action
Q[state,action]=R[state][action]+GAMMA * getMaxQ(curAction)
count=0
while count<1000:
for i in xrange(6):
QLearning(i)
count+=1
print Q/5


运行程序的结果如下:(与原文所得结果一样)
[[   0.     0.     0.     0.    80.     0. ]
[   0.     0.     0.    64.     0.   100. ]
[   0.     0.     0.    64.     0.     0. ]
[   0.    80.    51.2    0.    80.     0. ]
[  64.     0.     0.    64.     0.   100. ]
[   0.    80.     0.     0.    80.   100. ]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python Qlearning