使用gym模拟强化学习环境

参考链接:
OpenAI环境库官网:https://gym.openai.com/envs/
OpenAI环境库github:https://github.com/openai/gym/

Classic control

CartPole
环境描述:运载体无摩擦地支撑杆子。
动作:2个动作:施加-1和+1分别对应向左向右推动运载体
状态:4个,x:位置;x_dot:移动速度, theta:角度 theta_dot:移动角速度
奖励:每一步杆子保持垂直就可以获得+1奖励
终止条件:杆子的摇摆幅度超过了垂直方向15度或运载体偏移初始位置超过2.4个单位
这里写图片描述
使用gym库的API获取动作个数和状态个数:

import gym

env = gym.make('CartPole-v0').unwrapped
print(env.action_space)  # 输出动作信息
print(env.action_space.n)  # 输出动作个数
print(env.observation_space)  # 查看状态空间
print(env.observation_space.shape[0])  # 输出状态个数
print(env.observation_space.high)  # 查看状态的最高值
print(env.observation_space.low)  # 查看状态的最低值

输出:

Discrete(2)
2
Box(4,)
4
[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]
[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]

可视化环境:

import gym
import time
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    time.sleep(0.1)
    for t in range(1000):
        env.render()  # 环境展示
        time.sleep(0.1)
        print(observation)
        action = env.action_space.sample()  # 随机从动作空间中选取动作
        observation, reward, done, info = env.step(action)  # 根据动作获取下一步的信息
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break

MountainCar
环境描述:car的轨迹是一维的,定位在两山之间,目标是爬上右边的山顶。可是car的发动机不足以一次性攀登到山顶,唯一的方式是car来回摆动增加动量。
动作:有3个动作:向前、不动和向后
状态:2个,位置position和速度velocity。position的值在最低点处为-0.5左右,左边的坡顶为-1.2,右边与之相对应的高度位置为0,小黄旗位置为0.6。
奖励:每次移动都会得到-1的奖励,直到车开到黄旗位置
这里写图片描述

猜你喜欢

转载自blog.csdn.net/winycg/article/details/79897993