欢迎访问宙启技术站
智能推送

通过Python和Gym构建强化学习智能体来玩游戏

发布时间:2023-12-19 02:01:40

强化学习是一种通过与环境交互并从经验中学习来最大化累积奖励的机器学习方法。Gym是一个广泛使用的强化学习库,它提供了一个标准化的接口来定义强化学习环境,并且包含了一系列经典的强化学习任务。

在这个示例中,我们将使用Python和Gym构建一个强化学习智能体来玩Gym库中的一个经典游戏——CartPole。

首先,我们需要安装必要的库。在命令行中输入以下命令来安装Gym和其它相关库:

pip install gym
pip install numpy
pip install tensorflow

首先,我们导入所需的库:

import gym
import numpy as np
import tensorflow as tf

接下来,我们定义智能体的类。我们将使用一个简单的神经网络作为智能体的策略网络,用于输出动作的概率分布。

class Agent:
    def __init__(self, state_size, action_size):
        self.state_size = state_size
        self.action_size = action_size
        
        self.model = self.build_model()
        
    def build_model(self):
        model = tf.keras.models.Sequential([
            tf.keras.layers.Dense(24, activation='relu', input_shape=(self.state_size,)),
            tf.keras.layers.Dense(24, activation='relu'),
            tf.keras.layers.Dense(self.action_size, activation='softmax')
        ])
        
        model.compile(optimizer='adam',
                      loss='sparse_categorical_crossentropy',
                      metrics=['accuracy'])
        
        return model

在智能体的构造函数中,我们定义了状态空间的大小和动作空间的大小,并初始化了策略网络模型。

接下来,我们定义一个训练方法来训练智能体。

def train_agent(agent, episodes):
    for episode in range(episodes):
        state = env.reset()
        state = np.reshape(state, [1, agent.state_size])
        
        done = False
        time = 0
        
        while not done:
            time += 1
            env.render()
            
            action = agent.model.predict(state)[0]
            action = np.argmax(action)
            
            next_state, reward, done, _ = env.step(action)
            next_state = np.reshape(next_state, [1, agent.state_size])
            
            agent.model.fit(state, np.array([action]), verbose=0)
            
            state = next_state
            
            if done:
                print("Episode: {}/{}, Time: {}".format(episode+1, episodes, time))
                break
            
    env.close()

在训练方法中,我们首先重置环境并获取初始状态。然后,在每个步骤中,智能体根据当前状态使用策略网络预测动作,并执行该动作。接着,智能体根据执行动作后的下一个状态和奖励训练策略网络。

最后,我们定义一个主函数来运行训练和测试过程。

if __name__ == "__main__":
    env = gym.make('CartPole-v0')
    state_size = env.observation_space.shape[0]
    action_size = env.action_space.n
    
    agent = Agent(state_size, action_size)
    
    train_agent(agent, episodes=100)
    
    env = gym.wrappers.Monitor(env, './video', force=True)
    train_agent(agent, episodes=10)

在主函数中,我们首先创建CartPole游戏环境,获取状态空间和动作空间的维度信息。然后,我们创建一个智能体对象并进行训练。最后,我们使用Monitor包装器记录并保存测试过程的视频。

通过运行主函数,智能体将通过与环境进行交互并从经验中学习,逐渐提高它在CartPole游戏中的表现。

这就是通过Python和Gym构建强化学习智能体来玩游戏的一个简单例子。利用Gym库的灵活性和强大功能,我们可以更进一步地研究强化学习算法,并在更复杂的环境中训练智能体。