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