强化学习实战(二)ubuntu16.04安装Anaconda、Gym和 Universe

1.对于 Ubuntu 16.04,请先运行以下程序,以确保 apt 软件包列表是最新的:

sudo apt-get update

2.接着我们来安装一些软件:

sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg-turbo8-dev make tmux htop chromium-browser git cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig

3.接下来,我们安装 Anaconda,以便用 Anaconda 来创建与系统环境独立开来的 Anaconda 虚拟环境。我们之后的开发环境都会在这个虚拟环境里安装配置。

目前,Anaconda 的 Python 3.5 版本与 Universe 项目配合最好。如果用 Anaconda 的最新版本,也许不能很好地安装 Universe。

我们可以用 wget 命令(如果没有安装 wget,请使用 sudo apt install wget 来安装。不过 Ubuntu 里一般自带了)来获取 Anaconda 的 Python 3.5 版本:

# anaconda2
wget https://repo.continuum.io/archive/Anaconda2-5.3.1-Linux-x86_64.sh
# anaconda3
wget https://repo.continuum.io/archive/Anaconda3-5.3.0-Linux-x86_64.sh

这个 Anaconda 安装程序有 456 MB,因此下载时间视你的网速而定,需要等一会。你可以去泡杯咖啡,或者热一只烤鸡。

下载完之后,我们来安装 Anaconda,可以用 Bash 这个 Shell 软件来安装,当然如果你是 zsh 或其他 Shell 软件也可以用其他命令来安装 :

bash Anaconda2-5.3.1-Linux-x86_64.sh

提示信息说「Please press ENTER to continue」,也就是「请按下 回车键 以继续」,所以我们按下回车键。

接着安装程序会显示 Anaconda 的 License 就是一些证书和条款之类的信息:

不用看,直接用 空格键 翻页,然后翻到最后,看到显示这样一句话:

「Do you approve the license terms」,也就是「是否同意证书条款」 ,输入「yes」,

然后 回车。回车之后,又出现了下面的提示:

就是告诉你:Anaconda 的程序将会默认安装在你的家目录下的 anaconda2目录中(我的情况是在 /home/mooc/anaconda3,因为我的用户名是 mooc )。输入 回车 表示确认安装在默认目录中,如果你在提示符 >>> 后面输入其他路径,则会安装在你指定的其他路径下。

我们按 回车(ENTER)选择默认的路径来安装即可。

按下 回车 之后,就开始安装 Anaconda 了(包含一些基础软件环境),会花一些时间:

稍等片时,安装完成,显示如下信息:

确认是否将 Anaconda 的子目录 bin 加入系统 PATH 环境变量

输入「yes」的话,安装程序就会做以下操作:

在你的 Shell 的配置文件中,比如如果你的 Shell 是 Bash 的话,就会在 ~/.bashrc 文件中加入下面这句命令:

export PATH="/home/zhiqianghe/anaconda3/bin:$PATH"

就是把 Anaconda 的安装目录下的 bin 目录的路径( /home/$USER/anaconda2/bin )添加到 PATH 环境变量的最前面。

然后会做

source ~/.bashrc

使改动立即生效。

如果输入「no」的话,表示不需要安装程序帮你自动添加,之后可以自己添加:

我比较喜欢自己添加,这样我可以把 Anaconda 的 bin 目录的路径加入到 PATH 环境变量的最后,而不是最前。这样可以避免在命令行中输入 python 时调用的是 Anaconda 中的 python 程序。

如果你的默认 Shell 是 Bash 的话,就用文本编辑器在 ~/.bashrc 中添加下面这句命令:

export PATH="/home/zhiqianghe/anaconda2/bin:$PATH"

就是把 Anaconda 的安装目录下的 bin 目录的路径( /home/$USER/anaconda3/bin )添加到 PATH 环境变量的最后面。

保存,退出编辑器,然后在命令行输入:

source ~/.bashrc

使改动立即生效。

然后用

echo $PATH

来显示 PATH 环境变量的值,可以看到 /home/$USER/anaconda2/bin($USER 就是你的当前用户,比如我是 mooc )这个路径已经添加在 PATH 变量的最后了:

/home/$USER/anaconda2/bin 已经添加在 PATH 变量的最后

如果你的 Shell 是 zsh,那么请改动你的 ~/.zshrc 文件。其他的 Shell 程序也类似。

这样,我们的 Anaconda 就安装配置好了。接下来,我们可以用 Anaconda 来创建一个虚拟环境,可以起名叫 universe(当然,你也可以取其他名字):

conda create --name universe python=3.5 anaconda

回车后,会让我们确认是否要安装列出的软件到这个虚拟环境中:

默认是「y」,表示 yes,就是同意。我们按下 回车 即可。

它就开始下载安装那些软件到虚拟环境中了:

下载安装会花一段时间,依网速而定。这时候你可以喝一喝咖啡,或者吃一下之前热的烤鸡。

经过一定时间的等待,虚拟环境创建完毕:

然后,我们可以随时用以下命令来激活并进入环境中:

source activate universe

activate 是英语「激活」的意思。

用以下命令可以退出虚拟环境:

source deactivate universe

deactivate 是英语「灭活」的意思。

这里的 universe 是我们创建的虚拟环境的名字,你的情况可能不是叫这个名字,那么请根据你的虚拟环境的名字来更改命令。

你可以运行下面的命令来看看你有哪些虚拟环境:

conda env list

conda env list 命令显示所有虚拟环境

可以看到默认 Anaconda 有个环境,名字叫 root,就是 Anaconda 安装的所在。这个环境默认是不激活的。

看到我们创建的 universe 那个环境了吗?目前它没有被激活(相当于「选中并进入」),因此星号(*)表示的当前的虚拟环境还是在 root 上。

如果我们用

source activate universe

命令来进入 universe 这个虚拟环境,那么命令行的提示符会变样:

命令行提示符前面多了 (universe) 字样,表示目前在此虚拟环境中

此时,我们再用

conda env list

来列出所有的虚拟环境:

星号指在 universe 的上面,表示 universe 是被激活的虚拟环境

可以看到目前星号(*)由原先的 root 变到了 universe 上,说明 universe 是目前被激活的虚拟环境。

如果你用

source deactivate universe

来退出 universe 这个虚拟环境,则命令行提示符又变回原来的样子:

可以看到命令行提示符的 (universe) 前缀消失,说明我们已经不在 universe 这个虚拟环境中了。

当然了,说是虚拟环境中,其实所在的真实目录还是本系统的目录,你可以用 cd 命令去切换到各个目录,只不过你的 Python 的开发环境的所有软件和参数什么的都是用的此虚拟环境的了,而不是系统的了。

比如你如果再进入 universe 虚拟环境,并且输入 python 命令,可以看到它显示的 Python 的解释器是 Anaconda 版本的:

虚拟环境中的 Python 解释器和操作系统的不一样

如果用

conda list

可以列出当前虚拟环境信息:

conda list 命令会列出当前虚拟环境的信息 1

conda list 命令会列出当前虚拟环境的信息 2

如果要删除虚拟环境,使用下面的命令:

conda remove --name <env name> --all

其中 <env name> 表示要删除的虚拟环境的名字,比如我们创建的 universe。

要在虚拟环境中安装软件,用下面的命令:

conda install xxx

xxx 表示要安装的软件名称。

好的,那么,既然我们已经用 Anaconda 创建了我们的 虚拟环境,起名叫 universe,那么现在我们继续配置我们的开发环境,在 universe 这个虚拟环境中安装我们所要用的软件。

首先,我们要确保自己位于创建的虚拟环境中:

source activate universe

然后,安装一些额外的软件:

conda install pip six libgcc swig

按 回车,表示同意安装或升级软件。

然后我们再安装 OpenCV :

conda install opencv

按 回车,表示同意安装。

安装 Docker


接着我们来安装 Docker 这个软件:

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

如果是 Ubuntu 14.04,则还需要运行下面的一句命令:

sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

接着,我们运行如下命令:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

这里如果出现什么网络上的错误,我们可以将其换成手机热点

再运行下面的命令:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再做一次 apt 列表的升级:

sudo apt-get update

接着,就可以安装 Docker 了:

sudo apt-get install docker-ce

被询问是否安装时,输入「y」,再按 回车。

安装完 Docker,我们来测试一下安装是否成功。

首先,我们启动 Docker 服务:

sudo service docker start

运行以下命令来让 Docker 给我们输出一些信息:

sudo docker run hello-world

Docker 输出 "Hello from Docker !",表示安装成功

可以看到上面我们都是以 root 的身份运行 Docker 的命令。为了让我们之后每次运行 Docker 不需要用 root 身份而只需要用我们的普通用户身份,我们可以这样做:

sudo groupadd docker

上面的命令是为了创建一个用户组,叫做 docker。

然后,我们再把我们当前所在的用户添加到 docker 这个用户组里:

sudo usermod -aG docker $USER

接着,重启一下电脑:

sudo reboot

重启以后,加入你遇到 Docker 的连接问题,可以尝试依次运行下面的几句命令来解决:

sudo groupadd docker

sudo gpasswd -a ${USER} docker

sudo service docker restart   

sudo reboot

至此,Docker 安装完毕。

安装 Gym

接着,我们安装 OpenAI Gym。

首先,先确认你还在 universe 这个虚拟环境里:

命令行提示符前面有 (universe) 字样,表示目前在此虚拟环境中

然后我们用 git 来获取 Gym 的代码,依次运行下面两句命令:

cd ~

git clone https://github.com/openai/gym.git

进入 gym 目录,然后安装 Gym。依次运行下面两句命令:

cd ~/gym

pip install -e '.[all]'

Gym 的安装大家也可以参考下官方的 Github 页面:https://github.com/openai/gym

目前的最新版的 Gym 的那个 MuJoCo 的模块有些问题,似乎安装不上,MuJoCo 本身也比较特殊,需要一些额外配置。

MuJoCo 是 Multi-Joint dynamics with Contact 的缩写。表示「有接触的多关节动力」是用于机器人、生物力学、动画等需要快速精确仿真领域的物理引擎。
官网:http://mujoco.org

所以不出意外地话,上面的命令

pip install -e '.[all]'

会出错:

比较简单的规避错误的方法就是在 gym 目录下的
setup.py 这个文件里去掉 MuJoCo 的安装选项:

比如说用 vim 或 atom 文本编辑器(随便你用什么文本编辑器)来打开 ~/gym/setup.py 这个文件:

vim  ~/gym/setup.py

注释掉 setup.py 文件中和 MuJoCo 有关的安装选项

如上图所示,我们可以暂时把和 MuJoCo 相关的安装选项都注释掉。把

'mujoco': ['mujoco_py>=1.50', 'imageio'],
'robotics': ['mujoco_py>=1.50', 'imageio'],

这两句注释掉,不让它被安装,将其改为:

#'mujoco': ['mujoco_py>=1.50', 'imageio'],
#'robotics': ['mujoco_py>=1.50', 'imageio'],

保存,退出 setup.py 文件的编辑。

然后,重新运行以下命令:

pip install -e '.[all]'

这次就可以安装成功了,安装的是 Gym 的最新版本。

Gym 官方的 Github 上说如果你之后还是需要安装 MuJoCo 的话,可以尝试运行:

pip install -e '.[mujoco]'

来单独安装。这里我们不理会 MuJoCo,因为暂时用不到。

安装 Universe


安装完了 Gym,我们终于可以进入 Linux 中安装 Gym 和 Universe 之旅的最后一站了:安装 Universe。

和安装 Gym 类似,我们首先用 git 来获取 Universe 的代码(请确认你始终位于你用 Anaconda 创建的虚拟环境中),依次运行下面两句命令:

cd ~

git clone https://github.com/openai/universe.git

然后进入 universe 目录,安装 Universe。依次运行下面两句命令:

cd ~/universe

pip install -e .

安装 Universe 成功。

写程序测试 Gym 和 Universe


我们可以写几个 Python 的程序来测试一下 Gym 和 Universe。

比如我们可以创建一个文件,叫 test_universe1.py。

然后在里面写入以下代码:

import gym
import universe  # register the universe environments
from universe import wrappers
 
env = gym.make('gym-core.PongDeterministic-v0')
env = wrappers.experimental.SafeActionSpace(env)
env.configure(remotes=1)
 
observation_n = env.reset()
 
while True:
  action_n =  [env.action_space.sample() for ob in observation_n]
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()

上面的程序会启动 Pong(乒乓球)这个游戏。

保存这个文件。然后在命令行里运行以下命令:

python test_universe1.py

但是不出意外的话,会有一个错误(略坑...):

我看了 Universe 的 Github 上的 Issue 里的问题汇报,发现是 Gym 的 0.9.6 版本里把 benchmarks 这个包给去了:https://github.com/openai/universe/issues/228 。我晕...

所以我们可以卸载 Gym,重新安装,但是是指定安装 0.9.5 版本。

cd ~/gym

pip uninstall gym

pip install gym==0.9.5

希望 OpenAI 之后能解决这个问题...

现在我们再运行:

python test_universe1.py

就可以启动环境了(第一次启动环境时 Docker 需要下载一些文件,需要等一会):

刚才运行了 Pong 这个简单的游戏,我们也可以来演示一个复杂一些的游戏,比如 Universe 的官方 Github 上的例子 DuskDrive 这个赛车游戏 。

我们创建一个新的文件,可以起名叫 test_universe2.py。在里面写入如下代码:

import gym
import universe  # register the universe environments

env = gym.make('flashgames.DuskDrive-v0')
env.configure(remotes=1)  # automatically creates a local docker container
observation_n = env.reset()

while True:
  action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]  # your agent here
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()

运行它:

python test_universe2.py

运行 Universe 里面的游戏 DuskDrive

当然,我们还可以写代码来测试其他各种各样的环境,比如再测试一个 Neon Race(霓虹赛车)的环境,加入一些小小的代码修改,让它略微聪明些:

我们创建一个新的文件,可以起名叫 test_universe3.py。在里面写入如下代码:

# -*- coding: UTF-8 -*-

"""
测试 Gym 和 Universe 环境是否正确安装
"""

import random
import gym
import universe

env = gym.make('flashgames.NeonRace-v0')  # 创建 NeonRace 的环境
env.configure(remotes=1)  # 自动创建一个本地的 Docker 容器
observation_n = env.reset()  # 重置环境,并且返回初始的 Observation

# 左转和右转
goleft = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', True),
        ('KeyEvent', 'ArrowRight', False)]
goright = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', False),
         ('KeyEvent', 'ArrowRight', True)]

# 向前加速
boostforward = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowRight', False),
       ('KeyEvent', 'ArrowLeft', False), ('KeyEvent', 'n', True)]

sum_reward = 0
turn = 0
rewards = []
buffer_size = 100
action = boostforward

while True:
    turn -= 1
    if turn <= 0:
        action = boostforward
        turn = 0
    # 根据速度来选择 action
    action_n = [action for ob in observation_n]

    # 实行 action,返回细分的多个参数
    observation_n, reward_n, done_n, info = env.step(action_n)

    sum_reward += reward_n[0]

    rewards += [reward_n[0]]
    # 如果卡住了,尝试向某一个方向开一会
    if len(rewards) >= buffer_size:
        mean = sum(rewards) / len(rewards)

        if mean == 0:
            turn = 25
            if random.random() < 0.5:
                action = goleft
            else:
                action = goright

        rewards = []

    env.render()

运行它:

python test_universe3.py

运行 Universe 里面的游戏 NeonRace

当然了,你也可以写一个小程序单独测试一下 Gym。我们创建一个新的文件,可以起名叫 test_gym.py。在里面写入如下代码:

# -*- coding: UTF-8 -*-

import gym

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

for i_episode in range(100):
    observation = env.reset() 
    for t in range(100):
        env.render() # 更新动画
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action) # 推进一步
        if done:
            env.reset() 
            continue

运行它:

python test_gym.py

很有趣吧,更多环境等待你去发现、去实验。你也可以配合一些强化学习的算法来训练你的环境,然后让代理(agent)有智能,可以玩这些游戏比人更厉害。

我的微信公众号名称:小小何先生
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

原文链接:https://www.jishux.com/p/5d55556c160bf1e1

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值