python强化学习实战

本文简单介绍下强化学习,然后介绍如何使用python实现强化学习。

强化学习,简单来说,就是智能体通过对环境做动作,得到对于环境的观察和奖励,把这些观察和奖励,放入一个策略函数,来决定下一次的动作。目标是最大化智能体的能力让其获得最大收益。

在强化学习种类中,model-based learning 越来越得到广泛的应用,对其分为:Policy iteration , value iteration。在Policy iteration中,又分为Deterministic Policy 和Stochastic Policy. Deterministic Policy, 是一个状态映射到一个行为,Stochastic policy ,是多个状态映射到多个行为。我们常常使用Stochastic policy,因为它可以explore各种可能的路径,而不是exploit 在一个路径中。

下面介绍一个例子,如何使用python编程实现model-based learning下的Stochastic policy,目标是让一个杆子在移动的时候保持平衡。

1. 安装相关包

pip install ale-py==0.7
pip install gym==0.19
pip install gym[atari]
pip install pyglet==1.5.21
pip install tensorflow==2.8.0
pip install keras-rl2==1.0.5

2. 导入相关模块

import time 
import gym 
from pyglet.window import key 
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense 
from tensorflow.keras.layers import Activation 
from tensorflow.keras.layers import Flatten 
from tensorflow.keras.optimizers import Adam
from rl.agents.dqn import DQNAgent  # Use the basic Deep-Q-Network agent

 3. 创建环境和模型

env_name = ENV_NAME = 'CartPole-v0' 
env = gym.make(env_name) 
nb_actions = env.action_space.n 
print(nb_actions) 
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

  4. 创建QDN,并且fit

from rl.memory import SequentialMemory 
memory = SequentialMemory(limit=20000, window_length=1)
from rl.policy import LinearAnnealedPolicy, EpsGreedyQPolicy
policy = LinearAnnealedPolicy(EpsGreedyQPolicy(),
                              attr='eps',
                              value_max=1.,
                              value_min=.1,
                              value_test=.05,
                              nb_steps=20000)
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=100, policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])
dqn.fit(env, nb_steps=20000, visualize=False, verbose=2)    

  5. 查看结果

dqn.test(env, nb_episodes=5, visualize=True)
env.close()
Testing for 5 episodes ...
Episode 1: reward: 200.000, steps: 200
Episode 2: reward: 200.000, steps: 200
Episode 3: reward: 200.000, steps: 200
Episode 4: reward: 200.000, steps: 200
Episode 5: reward: 200.000, steps: 200

动态图不方便显示,这里仅看下输出结果,可以看到每一轮Episode ,reward都是满分。


好了,本次的分享就到先到这。关注我,带你走进数据算法的世界。

  • 微信公众号 数据算法小屋

  • CSDN https://blog.csdn.net/TommyLi_YanLi

  • 知乎 https://www.zhihu.com/people/74-25-40-76-26

  • 作者邮箱:rocklee_lol@hotmail.com

作者:数据算法小屋原文地址:https://blog.csdn.net/TommyLi_YanLi/article/details/128042777

%s 个评论

要回复文章请先登录注册