搭建自定義OpenAI Gym環(huán)境,設(shè)計(jì)自己的機(jī)器人

Gym是一個(gè)用于 測(cè)試和比較 強(qiáng)化學(xué)習(xí)算法的工具包,它不依賴強(qiáng)化學(xué)習(xí)算法結(jié)構(gòu),并且可以使用很多方法對(duì)它進(jìn)行調(diào)用,像TensorFlow、Theano。

Gym庫(kù)收集、解決了很多環(huán)境的測(cè)試過(guò)程中的問(wèn)題,能夠很好地使得你的強(qiáng)化學(xué)習(xí)算法得到很好的工作。并且含有游戲界面,能夠幫助你去寫(xiě)更適用的算法。

搭建Gym仿真環(huán)境

  • 安裝Anaconda3
  • 創(chuàng)新虛擬環(huán)境
    Anaconda創(chuàng)建虛擬環(huán)境的格式為:conda create –-name 你要?jiǎng)?chuàng)建的名字 python=版本號(hào)。比如我創(chuàng)建的虛擬環(huán)境名字為gym, 用的python版本號(hào)為3.6,可這樣寫(xiě):
conda create –-name gym python=3.6
  • 安裝MuJoCo

    1. MuJoCo(Multi-Joint dynamics with Contact)是一個(gè)物理模擬器,可以用于機(jī)器人控制優(yōu)化等研究。它類似于Adams,是一個(gè)多體的仿真平臺(tái)。

    2. MuJoCo官網(wǎng)下載對(duì)應(yīng)平臺(tái)的mjpro150,Windows 64位系統(tǒng)需要下載mjpro150 win64,同時(shí)點(diǎn)擊Licence下載許可證,需要full name, email address, computer id 等信息,其中根據(jù)使用平臺(tái)下載 getid_win64.exe(可執(zhí)行文件),在命令行下執(zhí)行,可獲得computer id,提交這些信息能夠獲得30天的臨時(shí)許可。

    3. C:\Users\用戶名下新建.mujoco文件夾,并將mjpro150解壓至該文件夾,將證書(shū)復(fù)制至C:\Users\用戶名\.mujocoC:\Users\用戶名\.mujoco\mjpro150\bin目錄。如果為L(zhǎng)inux/MacOS系統(tǒng),該目錄為~/.mujoco

  • 安裝gym

git clone https://github.com/openai/gym.git
cd gym
pip install -e '.[all]'

測(cè)試gym環(huán)境

import gym

env = gym.make('CartPole-v0')
env.reset()

reward_sum = 0

for _ in range(1000):
    env.render()
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)
    reward_sum += reward
    if done:
        print('reward_sum:', reward_sum)
        reward_sum = 0
        env.reset()

測(cè)試MuJoCo環(huán)境

import gym
env = gym.make('InvertedPendulum-v2')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        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
  • 安裝Spinning Up
    Spinning Up 是OpenAI提供的一個(gè)深度強(qiáng)化學(xué)習(xí)的教學(xué)資源,旨在快速入門深度強(qiáng)化學(xué)習(xí)。
git clone https://github.com/openai/spinningup.git
cd spinningup
pip install -e .
  • 安裝Baselines
    OpenAI Baselines是一系列高質(zhì)量強(qiáng)化學(xué)習(xí)算法的實(shí)現(xiàn)
git clone https://github.com/openai/baselines.git
cd baselines
pip install -e .

測(cè)試 Gym 和 Spinning Up、Baselines 環(huán)境

  • Spinning Up
# 運(yùn)行
python -m spinup.run ppo --hid "[32,32]" --env LunarLander-v2 --exp_name installtest --gamma 0.999
# 查看結(jié)果數(shù)據(jù)
python -m spinup.run test_policy data/installtest/installtest_s0
# 查看仿真動(dòng)畫(huà)
python -m spinup.run plot data/installtest/installtest_s0
  • Baselines
python -m baselines.run --alg=ppo2 --env=CartPole-v0 --network=mlp --num_timesteps=2e7

設(shè)計(jì)自己的機(jī)器人流程

  1. myrobot.xml, 機(jī)器人模型文件,位于gym目錄下envs/mujoco/assets目錄下
  2. myrobot.py, 位于gym目錄下envs/mujoco目錄下
  3. 修改envs/mujoco/__init__.py文件,在最后增加
from gym.envs.mujoco.myrobot import MyRobotEnv
  1. 修改envs/__init__.py文件,在最后增加
register(
    id='MyRobot-v0',
    entry_point='gym.envs.mujoco.myrobot:MyRobotEnv',
)
  1. 測(cè)試模型
import gym
env = gym.make('MyRobot-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        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

myrobot.xml文件

xml文件的模板為

<mujoco model="MyRobot">
    <compiler angle="degree" coordinate="local" inertiafromgeom="true" />
    
    <option integrator="RK4" timestep="0.01" />
    
    <custom>
    </custom>

    <default>
    <!-- 一些默認(rèn)值 -->
    </default>
    
    <asset>
    <!-- 一些變量定義 -->
    </asset>
    
    <!-- 實(shí)體模型 -->
    <worldbody>
    <!-- 光照 -->
    <light cutoff="100" diffuse="1 1 1" dir="-0 0 -1.3" directional="true" exponent="1" pos="0 0 1.3" specular=".1 .1 .1"/>
    <!-- 地板 -->
    <geom conaffinity="1" condim="3" material="MatPlane" name="floor" pos="0 0 0" rgba="0.8 0.9 0.8 1" size="40 40 40" type="plane"/>
    <body name="segway">
    </body>
    </worldbody>
    
    <actuator>
    <!-- 驅(qū)動(dòng) -->
    </actuator>
</mujoco>

worldbody是模型部分,一般有光照light、地面(一個(gè)極薄的平面)、機(jī)器人模型<body name="segway"></body>
在body部分,并列的兩個(gè)geom是固連的關(guān)系,geom所屬的關(guān)節(jié)joint應(yīng)與其并列,

myrobot.py 文件

測(cè)試

Roboschool

Roboschool 是基于 OpenAI Gym 強(qiáng)化學(xué)習(xí)仿真包的物理仿真引擎。由于 MuJoCo 不開(kāi)源且收費(fèi),所以 OpenAI 的大佬們將 Roboschool 作為 MuJoCo 的替代品??梢栽谝粋€(gè)場(chǎng)景當(dāng)中訓(xùn)練多個(gè) Agent 并且完成一挑戰(zhàn)任務(wù)。

參考文獻(xiàn)

  1. OpenAI Gym構(gòu)建自定義強(qiáng)化學(xué)習(xí)環(huán)境
  2. 強(qiáng)化學(xué)習(xí)仿真環(huán)境gym搭建
  3. MuJoCo官網(wǎng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容