首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-18 05:21
  • 4307
  • 11339
blog.csdn.net

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 版本:

  1. # anaconda2
  2. wget https://repo.continuum.io/archive/Anaconda2-5.3.1-Linux-x86_64.sh
  3. # anaconda3
  4. 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

其中 表示要删除的虚拟环境的名字,比如我们创建的 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 的连接问题,可以尝试依次运行下面的几句命令来解决:

  1. sudo groupadd docker
  2. sudo gpasswd -a ${USER} docker
  3. sudo service docker restart
  4. sudo reboot

至此,Docker 安装完毕。

安装 Gym

接着,我们安装 OpenAI Gym。

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

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

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

  1. cd ~
  2. git clone https://github.com/openai/gym.git

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

  1. cd ~/gym
  2. 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 相关的安装选项都注释掉。把

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

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

  1. #'mujoco': ['mujoco_py>=1.50', 'imageio'],
  2. #'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 创建的虚拟环境中),依次运行下面两句命令:

  1. cd ~
  2. git clone https://github.com/openai/universe.git

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

  1. cd ~/universe
  2. pip install -e .

安装 Universe 成功。

写程序测试 Gym 和 Universe


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

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

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

  1. import gym
  2. import universe # register the universe environments
  3. from universe import wrappers
  4. env = gym.make('gym-core.PongDeterministic-v0')
  5. env = wrappers.experimental.SafeActionSpace(env)
  6. env.configure(remotes=1)
  7. observation_n = env.reset()
  8. while True:
  9. action_n = [env.action_space.sample() for ob in observation_n]
  10. observation_n, reward_n, done_n, info = env.step(action_n)
  11. 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 版本。

  1. cd ~/gym
  2. pip uninstall gym
  3. pip install gym==0.9.5

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

现在我们再运行:

python test_universe1.py

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

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

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

  1. import gym
  2. import universe # register the universe environments
  3. env = gym.make('flashgames.DuskDrive-v0')
  4. env.configure(remotes=1) # automatically creates a local docker container
  5. observation_n = env.reset()
  6. while True:
  7. action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n] # your agent here
  8. observation_n, reward_n, done_n, info = env.step(action_n)
  9. env.render()

运行它:

python test_universe2.py

运行 Universe 里面的游戏 DuskDrive

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

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

  1. # -*- coding: UTF-8 -*-
  2. """
  3. 测试 Gym 和 Universe 环境是否正确安装
  4. """
  5. import random
  6. import gym
  7. import universe
  8. env = gym.make('flashgames.NeonRace-v0') # 创建 NeonRace 的环境
  9. env.configure(remotes=1) # 自动创建一个本地的 Docker 容器
  10. observation_n = env.reset() # 重置环境,并且返回初始的 Observation
  11. # 左转和右转
  12. goleft = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', True),
  13. ('KeyEvent', 'ArrowRight', False)]
  14. goright = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', False),
  15. ('KeyEvent', 'ArrowRight', True)]
  16. # 向前加速
  17. boostforward = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowRight', False),
  18. ('KeyEvent', 'ArrowLeft', False), ('KeyEvent', 'n', True)]
  19. sum_reward = 0
  20. turn = 0
  21. rewards = []
  22. buffer_size = 100
  23. action = boostforward
  24. while True:
  25. turn -= 1
  26. if turn <= 0:
  27. action = boostforward
  28. turn = 0
  29. # 根据速度来选择 action
  30. action_n = [action for ob in observation_n]
  31. # 实行 action,返回细分的多个参数
  32. observation_n, reward_n, done_n, info = env.step(action_n)
  33. sum_reward += reward_n[0]
  34. rewards += [reward_n[0]]
  35. # 如果卡住了,尝试向某一个方向开一会
  36. if len(rewards) >= buffer_size:
  37. mean = sum(rewards) / len(rewards)
  38. if mean == 0:
  39. turn = 25
  40. if random.random() < 0.5:
  41. action = goleft
  42. else:
  43. action = goright
  44. rewards = []
  45. env.render()

运行它:

python test_universe3.py

运行 Universe 里面的游戏 NeonRace

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

  1. # -*- coding: UTF-8 -*-
  2. import gym
  3. env = gym.make('CartPole-v0')
  4. for i_episode in range(100):
  5. observation = env.reset()
  6. for t in range(100):
  7. env.render() # 更新动画
  8. action = env.action_space.sample()
  9. observation, reward, done, info = env.step(action) # 推进一步
  10. if done:
  11. env.reset()
  12. continue

运行它:

python test_gym.py

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

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

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

注:本文转载自blog.csdn.net的小小何先生的文章"https://blog.csdn.net/weixin_39059031/article/details/82085916"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top