优秀的编程知识分享平台

网站首页 > 技术文章 正文

强化学习3--gym的手动游戏例子测试

nanyue 2024-08-05 20:12:20 技术文章 5 ℃

1、官方主页

gym是强化学习的库,接口简单,并且提供了更新、状态标识、显示等一系列方便的接口,并可以自主设计各类环境。目前最新版本介绍如下

https://gymnasium.farama.org/

2、简单的使用

2.1简单的引入包模块

import gymnasium as gym

2.2 生成环境make

(1)生成环境通过make方法,简单的例子如下

        env = gym.make('FrozenLake-v1',
                       render_mode='rgb_array',
                       is_slippery=False)

(2)注意gym有很多例子***

2.3环境初始化reset

通过reset可以初始化环境

env.reset()

2.4控制对象迭代运行step

(1)控制对象迭代运行的操作为step

state, reward, terminated, truncated, info = self.env.step(action)

注意:step函数是action→observation之间的一个映射函数,通过做出动作action,将获得一个怎样的observation以及相应的reward,并判断是否到达终点状态(terminated),并将相应的信息返回

(2)判断是否结束

over = terminated or truncated

2.5step返回的几个函数

(1)state,状态

(2)reward,奖励函数

(3)terminated,是否游戏(失败)结束,结束则为true

(4)truncated,崩溃结束

(5)info,信息

2.6关闭环境close

关闭环境的函数如下

env.close()

3、FrozenLake-v1游戏的测试

3.1 aciton的方向

该游戏中:2向右,1向下,0向左,3向上。如下所示

{0: "←", 1: "↓", 2: "→", 3: "↑"}

3.2设定机器人路径并查看输出

(1)编一个程序让机器人手动周一下,查看一下输出

(2)路径随意写,简单例子如下

3.3测试代码

import gymnasium as gym
from matplotlib import pyplot as plt

def show(env,sleepFlag=True,sleepSpan=2):
    plt.figure(figsize=(3, 3))
    plt.imshow(env.render())
    if sleepFlag:
        plt.pause(sleepSpan) # 显示2s
        plt.close()
    else:       
        plt.show()       

if __name__ == '__main__':
    #(1)生成环境
    env = gym.make('FrozenLake-v1', render_mode='rgb_array',is_slippery=False)
    env.reset()
    show(env,sleepFlag=False)

    # action 2向右,1向下,0向左,3向上
    givenPath = [2,2,2,1]
    icount =0
    for path in givenPath:
        state, reward, terminated, truncated, info = env.step(path)
        show(env)
        icount += 1 
        print(f"state: {state},reward: {reward},terminated: {terminated},truncated: {truncated},info: {info}")

3.4测试结果

(1)4步以后得测试结果如下

(2)注意状态变量值的输出:

state: 1,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 2,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 3,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 7,reward: 0.0,terminated: True,truncated: False,info: {'prob': 1.0}

明显,state是坐标,terminate代表是否结束。

Tags:

最近发表
标签列表