强化学习Q-Learning解决FrozenLake例子(Python)

import gym
import numpy as np
import random
import matplotlib.pyplot as plt

# gym创建冰湖环境
env = gym.make('FrozenLake-v1')
# 初始化Q表格,矩阵维度为【S,A】,即状态数*动作数
Q_all = np.zeros([env.observation_space.n,env.action_space.n])
# 设置参数,
# 其中α\alpha 为学习速率(learning rate),γ\gamma为折扣因子(discount factor)
alpha = 0.8
gamma = 0.95
num_episodes = 2000
rList = []
for i in range(num_episodes):
    # 初始化环境,并开始观察
    s = env.reset()
    rAll = 0
    d = False
    j = 0
    # 最大步数
    while j < 99:
        j += 1
        # 贪婪动作选择,含嗓声干扰
        a = np.argmax(Q_all[s,:] + np.random.randn(1, env.action_space.n) * (1./(i+1)))
        # 从环境中得到新的状态和回报
        s1, r, d, _ = env.step(a)
        # 更新Q表
        Q_all[s,a] = Q_all[s, a] + alpha*(r + gamma*np.max(Q_all[s1,:]) - Q_all[s,a])
        # 累加回报
        rAll += r
        # 更新状态
        s = s1
        # Game Over
        if d == True:
            break
    rList.append(rAll)

print("Score over time:"+ str(sum(rList)/num_episodes))
print(Q_all)

参考资料:

1. https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-0-q-learning-with-tables-and-neural-networks-d195264329d0

2. TensorFlow强化学习入门(0)——Q-Learning的查找表实现和神经网络实现 - 云+社区 - 腾讯云

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值