python-实例
将上一章节的实例用python3.x采用两种方法实现:
第一种简单方案:
算法步骤
1.在矩阵R中设置Gamma参数和环境奖励。
2.将矩阵Q初始化为零。
3.While i<200 do:
For j in range(6) do
为 j 状态选择所有可能的操作之一。
使用这种可能的操作,考虑进入下一个状态。
根据所有可能的操作获取下一个状态的最大Q值。
计算:Q(状态,动作)= R(状态,动作)+ Gamma *最大[ Q(下一个状态,所有动作)]
End while
End while
python 代码
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
#设置Gamma参数和环境奖励R
GAMMA = 0.8
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]])
#初始化Q
Q = np.zeros((6,6))
#寻找最大的奖励
def getMaxQ(state):
return max(Q[state, :])
#Q-Learning
def QLearning(state):
curAction = None
#while
for action in range(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<200:
for i in range(6):
QLearning(i)
count+=1
sns.set()
f, ax = plt.subplots(figsize=(8, 6))
cmap = sns.diverging_palette(230, 10)
sns.heatmap(Q, cmap = cmap, annot=True, fmt='g', linewidths=.5, ax=ax)
运行结果
第二种简单方案:
算法步骤
1.在矩阵R中设置Gamma参数和环境奖励。
2.将矩阵Q初始化为零。
3.For i<100:
随机选择一个初始状态。
For j in range(6)
为当前状态选择所有可能的操作之一。
使用这种可能的操作,考虑进入下一个状态。
根据所有可能的操作获取下一个状态的最大Q值。
计算:Q(状态,动作)= R(状态,动作)+ Gamma *最大[ Q(下一个状态,所有动作)]
将下一个状态设置为当前状态
End For
End while
python代码
import numpy as np
import seaborn as sns
import random
import matplotlib.pyplot as plt
#设置Gamma参数和环境奖励R
GAMMA = 0.8
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]])
#初始化Q
Q = np.zeros((6,6))
#寻找最大的奖励
def getMaxQ(state):
return max(Q[state, :])
#Q-Learning
def QLearning(state):
curAction = None
#while
for action in range(6):
if(R[state][action] == -1):
Q[state, action]=0
else:
curAction = action
Q[state,action]=R[state][action]+GAMMA * getMaxQ(curAction)
return action
#主函数
count=0
while count<100:
new = random.randint(0,5)
for i in range(6):
new=QLearning(new)
count+=1
sns.set()
f, ax = plt.subplots(figsize=(8, 6))
cmap = sns.diverging_palette(230, 10)
sns.heatmap(Q, cmap = cmap, annot=True, fmt='g', linewidths=.5, ax=ax)
运行结果
参考资料:A Painless Q-Learning Tutorialmnemstudio.org根据A painless Q-Learning教程用python实现blog.csdn.net