OpenAI Gym 中级教程——强化学习实践项目

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: OpenAI Gym 中级教程——强化学习实践项目

Python OpenAI Gym 中级教程:强化学习实践项目

在本篇博客中,我们将通过一个实际项目来演示如何在 OpenAI Gym 中应用强化学习算法。我们选择一个简单而经典的问题:CartPole,这是一个控制小车平衡杆的问题。我们将使用深度 Q 网络(DQN)算法来解决这个问题。

1. 安装依赖

首先,确保你已经安装了必要的依赖:

pip install gym[box2d] tensorflow

2. 强化学习项目实践

2.1 创建 DQN 模型

我们将使用 TensorFlow 创建一个简单的深度 Q 网络模型。

import tensorflow as tf
from tensorflow.keras import layers, models

class DQN(models.Model):
    def __init__(self, num_actions):
        super(DQN, self).__init__()
        self.layer1 = layers.Dense(24, activation='relu')
        self.layer2 = layers.Dense(24, activation='relu')
        self.output_layer = layers.Dense(num_actions, activation='linear')

    def call(self, state):
        x = self.layer1(state)
        x = self.layer2(x)
        return self.output_layer(x)

2.2 创建经验回放缓冲区

为了训练 DQN 模型,我们将使用经验回放缓冲区来存储过去的经验。

import random
from collections import deque

class ReplayBuffer:
    def __init__(self, capacity):
        self.capacity = capacity
        self.buffer = deque(maxlen=capacity)

    def add(self, experience):
        self.buffer.append(experience)

    def sample(self, batch_size):
        batch = random.sample(self.buffer, batch_size)
        states, actions, rewards, next_states, dones = zip(*batch)
        return (
            tf.concat(states, axis=0),
            tf.convert_to_tensor(actions, dtype=tf.float32),
            tf.convert_to_tensor(rewards, dtype=tf.float32),
            tf.concat(next_states, axis=0),
            tf.convert_to_tensor(dones, dtype=tf.float32),
        )

2.3 DQN 训练

我们将定义一个函数来训练 DQN 模型。

import numpy as np
import gym

def train_dqn(env, model, target_model, replay_buffer, num_episodes=1000, batch_size=32, gamma=0.99, target_update_frequency=100):
    optimizer = tf.optimizers.Adam(learning_rate=0.001)
    huber_loss = tf.keras.losses.Huber()

    epsilon = 1.0
    epsilon_decay = 0.995
    min_epsilon = 0.01

    for episode in range(1, num_episodes + 1):
        state = env.reset()
        state = tf.convert_to_tensor(state, dtype=tf.float32)

        total_reward = 0
        while True:
            # epsilon-greedy策略选择动作
            if np.random.rand() < epsilon:
                action = env.action_space.sample()
            else:
                q_values = model(state[None, :])
                action = tf.argmax(q_values[0]).numpy()

            next_state, reward, done, _ = env.step(action)
            next_state = tf.convert_to_tensor(next_state, dtype=tf.float32)

            total_reward += reward

            replay_buffer.add((state, action, reward, next_state, done))
            state = next_state

            # 经验回放
            if len(replay_buffer.buffer) >= batch_size:
                states, actions, rewards, next_states, dones = replay_buffer.sample(batch_size)

                with tf.GradientTape() as tape:
                    q_values = model(states)
                    next_q_values = target_model(next_states)
                    target_q_values = rewards + gamma * tf.reduce_max(next_q_values, axis=1) * (1 - dones)
                    selected_q_values = tf.reduce_sum(q_values * tf.one_hot(actions, env.action_space.n), axis=1)

                    loss = huber_loss(selected_q_values, target_q_values)

                gradients = tape.gradient(loss, model.trainable_variables)
                optimizer.apply_gradients(zip(gradients, model.trainable_variables))

            # 更新目标网络
            if episode % target_update_frequency == 0:
                target_model.set_weights(model.get_weights())

            if done:
                epsilon = max(epsilon * epsilon_decay, min_epsilon)
                print(f"Episode: {episode}, Total Reward: {total_reward}, Epsilon: {epsilon}")
                break

2.4 主函数

最后,我们将定义一个主函数来运行我们的强化学习项目。

if __name__ == "__main__":
    # 创建环境和模型
    env = gym.make("CartPole-v1")
    model = DQN(env.action_space.n)
    target_model = DQN(env.action_space.n)
    target_model.set_weights(model.get_weights())

    # 创建经验回放缓冲区
    replay_buffer = ReplayBuffer(capacity=10000)

    # 训练 DQN 模型
    train_dqn(env, model, target_model, replay_buffer, num_episodes=500)

3. 总结

通过这个实际项目,我们演示了如何在 OpenAI Gym 中使用深度 Q 网络(DQN)来解决经典的 CartPole 问题。我们创建了一个简单的 DQN 模型,实现了经验回放缓冲区,并进行了训练。这个项目为初学者提供了一个实践的起点,同时展示了在强化学习任务中使用 TensorFlow 和 OpenAI Gym 的基本步骤。希望这篇博客能够帮助你更好地理解和应用强化学习算法。

目录
相关文章
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek 开源 R1 系列推理模型,性能对标 OpenAI o1,基于纯强化学习完成自我进化,无需监督微调
DeepSeek R1-Zero 是一款基于纯强化学习的开源推理模型,无需监督微调数据,支持多任务泛化与自我进化,适用于数学推理、代码生成等场景。
495 21
DeepSeek 开源 R1 系列推理模型,性能对标 OpenAI o1,基于纯强化学习完成自我进化,无需监督微调
|
2月前
|
编解码 人工智能 自然语言处理
OpenAI Sora 怎么用:最新详细教程-新手小白必看 | Sora 如何使用?(202412月最新更新)
OpenAI的Sora模型现已正式开放使用,本文将详细介绍Sora的注册、使用方法及视频生成技巧。Sora能根据简洁文本生成长达60秒的高质量视频,具备远超以往模型的时间连续性和视觉效果。文章涵盖从零开始的准备工作、操作界面介绍、视频生成设置、编辑功能(如Re-cut、Remix、Blend、Loop)以及Storyboard故事板功能,帮助新手轻松上手世界顶级AI视频创作工具。此外,还解答了关于Sora的常见问题,包括订阅计划、视频类型和局限性等,适合全媒体创作者参考。
291 3
OpenAI Sora 怎么用:最新详细教程-新手小白必看 | Sora 如何使用?(202412月最新更新)
|
9月前
|
人工智能 安全 UED
[AI OpenAI] 新闻编辑室AI催化剂:与WAN-IFRA的全球项目
OpenAI与WAN-IFRA合作推出新闻编辑室AI催化剂,这是一个全球加速器项目,旨在帮助100多家新闻出版商在其编辑室中集成AI,以增强内容创建、效率和用户体验。
[AI OpenAI] 新闻编辑室AI催化剂:与WAN-IFRA的全球项目
|
9月前
|
API Python
记录openai官网关于Setup your API key for a single project(为单个项目设置API 可以)的错误(2023/11/24)
记录openai官网关于Setup your API key for a single project(为单个项目设置API 可以)的错误(2023/11/24)
191 0
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
如何使用Sora?OpenAI Sora 介绍及使用教程
2024年2月16日,OpenAI 在其官网上面正式宣布推出文本生成视频的大模型 Sora, Sora能够根据简单的文本描述,生成高达60秒的高质量视频,使得视频创作变得前所未有的简单和高效。
如何使用Sora?OpenAI Sora 介绍及使用教程
|
9月前
|
机器学习/深度学习 算法 Python
OpenAI Gym高级教程——解决实际问题与研究探索
OpenAI Gym高级教程——解决实际问题与研究探索
389 1
|
9月前
|
机器学习/深度学习 开发者 Python
OpenAI Gym高级教程——领域自适应强化学习
OpenAI Gym高级教程——领域自适应强化学习
422 0
|
16天前
|
机器学习/深度学习 人工智能 算法
o3-mini:OpenAI 发布最新推理模型,强大的STEM推理能力,灵活调整推理强度
OpenAI o3-mini是OpenAI推出的全新推理模型,专为科学、数学和编程等技术领域优化,支持三种推理强度,灵活调整性能。
155 25
o3-mini:OpenAI 发布最新推理模型,强大的STEM推理能力,灵活调整推理强度
|
1月前
|
机器学习/深度学习 人工智能 安全
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
GLM-Zero 是智谱AI推出的深度推理模型,专注于提升数理逻辑、代码编写和复杂问题解决能力,支持多模态输入与完整推理过程输出。
226 24
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
|
2月前
|
人工智能 自然语言处理 机器人
OpenAI推出具有图像上传和分析功能的完整o1模型,并首次推出ChatGPT Pro
OpenAI推出具有图像上传和分析功能的完整o1模型,并首次推出ChatGPT Pro