qpython3h教学_强化学习:Q-learning由浅入深:入阶3

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 Tutorial​mnemstudio.org根据A painless Q-Learning教程用python实现​blog.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值