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)有智能,可以玩这些游戏比人更厉害。
我的微信公众号名称:小小何先生
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!