Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

重要性采样与重参数理解

发表于 2021-06-16

重要性采样与重参数是深度强化学习算法中常用的统计学技巧,比较难理解,遂将一些解读记录如下。

重要性采样

重参数

利用行为策略产生的数据评估目标策略需要利用重要性采样方法。

参考链接

  1. 漫谈重参数:从正态分布到Gumbel Softmax,by 苏剑林.
  2. 重要性采样(Importance Sampling)详细学习笔记,by hehedadaq.
  3. PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现,by 刘浚嘉.

gym使用帮助

发表于 2021-06-13 | 更新于 2021-06-19

Gym 是一个用于开发和比较强化学习算法的工具包。 它支持从步行到玩 Pong 或 Pinball 等游戏的代理的训练工作。

安装

从库安装:

1
pip install gym

从源安装:

1
2
3
git clone https://github.com/openai/gym
cd gym
pip install -e .

环境

1
2
3
4
5
6
7
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample()) # take a random action
env.close()

参考链接

  1. gym doc,by openai.
  2. OpenAI Gym 经典控制环境介绍——CartPole(倒立摆,by 思绪无限.
  3. Beginner’s Guide to Custom Environments in OpenAI’s Gym,by Mate Pocs.
  4. Solving OpenAI Gym Environments with MATLAB RL Toolbox,by Paulo Carvalho.

Win10安装Linux子系统

发表于 2021-06-07 | 更新于 2021-12-10

OpenAI的Spinning Up项目仅在 Linux 和 OSX 上支持Spinning Up,因此想在Win10系统中安装Linux子系统,以便将Spinning Up项目运行起来,学习一下强化学习。

安装Linux子系统

步骤如下:

  1. 打开控制面板,选择应用,点击左上角的程序和功能,在弹出窗口中点击启动或关闭Windows功能,勾选适用Linux的Windows子系统。
  2. 打开Store商店,安装Ubuntu 20.04操作系统。

配置Spinning Up项目

步骤如下:

  • 打开cmd,输入wsl命令,进入ubuntu系统。
  • 下载并安装Xming。
  • 使用如下命令安装x11-apps。
1
2
3
sudo apt-get install x11-apps
export DISPLAY=localhost:0.0
nano ~/.bashrc #(add export DISPLAY=localhost:0.0 at the end. Ctrl+X to exit/save)
  • 下载并安装miniconda。
  • 创建Python虚拟环境。
1
2
3
4
5
6
# 创建虚拟环境
conda create -n spinningup python=3.7
# 查看虚拟环境
conda info -h
# 删除创建的虚拟环境
conda remove -n spinningup --all
  • 激活Python虚拟环境。
1
conda activate spinningup
  • 反激活Python虚拟环境。
1
conda deactivate
  • 安装openmpi组件
1
sudo apt-get update && sudo apt-get install libopenmpi-dev
  • 安装opengl组件
1
sudo apt-get install python-opengl
  • 下载Spinning Up项目
1
2
3
git clone https://github.com/openai/spinningup.git
cd spinningup
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 测试项目
1
2
3
4
5
6
# 运行登陆器
python -m spinup.run ppo --hid "[32,32]" --env LunarLander-v2 --exp_name installtest --gamma 0.999
# 绘图
python -m spinup.run plot /mnt/i/project/spinningup/data/installtest/installtest_s0
# 视频
python -m spinup.run test_policy /mnt/i/project/spinningup/data/installtest/installtest_s0

参考链接

  1. WSL Linux 子系统,真香!附完整实操,by 猴哥一一.
  2. 在 Windows 10 中使用 OpenAI Spinning Up ,by csu.
  3. Anaconda创建环境、删除环境、环境重命名,by CodeAntenna.
  4. [Bug Report] contextlib has no attribute ‘nullcontext’ for Python3.6 when calling register(),by github.

深度强化学习的实验环境汇总

发表于 2021-06-07

参考链接

  1. 深度强化学习中实验环境-开源平台框架汇总,by 小小何先生.
  2. 强化学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2),by AITBOOK.

FlightGear多屏多视口设置方法

发表于 2021-06-03 | 更新于 2021-06-23

在玩FlightGear的过程中,可能需要将视景分角度投影到不同显示器上,或者在一个显示器窗口上投影不同角度的视景。下面记录该需求实现方法。

投影到不同显示器

在FGDATA文件夹根目录下创建camera-views.xml文件夹,写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?xml version="1.0"?>
<PropertyList>
<camera-group>
<window>
<name type="string">Front</name>
<host-name type="string"></host-name>
<display>0</display>
<screen>0</screen>
<fullscreen type = "bool">false</fullscreen>
<decoration type = "bool">false</decoration>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</window>

<window>
<name type="string">Right</name>
<host-name type="string"></host-name>
<display>0</display>
<screen>1</screen>
<fullscreen type = "bool">false</fullscreen>
<decoration type = "bool">false</decoration>
<x>0</x>
<y>0</y>
<width>1280</width>
<height>720</height>
</window>

<gui>
<window>
<name type="string">Front</name>
</window>
</gui>

<camera>
<name type="string">Front</name>
<window>
<name>Front</name>
</window>

<view>
<heading-deg type = "double">0.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</viewport>

</camera>
<camera>
<name type="string">Right</name>
<window>
<name>Right</name>
</window>

<view>
<heading-deg type = "double">-45.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>0</x>
<y>0</y>
<width>1280</width>
<height>720</height>
</viewport>

</camera>
</camera-group>
</PropertyList>

在FGDATA文件夹根目录下找到defaults.xml配置文件,修改如下配置内容,加入camera-views.xml配置文件。

1
2
<rendering include="camera-views.xml">
</rendering>

投影到窗口不同地方

在FGDATA文件夹根目录下创建camera-views.xml文件夹,写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?xml version="1.0"?>
<PropertyList>
<camera-group>
<window>
<name type="string">Front</name>
<host-name type="string"></host-name>
<display>0</display>
<screen>0</screen>
<fullscreen type = "bool">false</fullscreen>
<decoration type = "bool">false</decoration>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</window>

<gui>
<window>
<name type="string">Front</name>
</window>
</gui>

<camera>
<name type="string">Main</name>
<window>
<name>Front</name>
</window>

<view>
<heading-deg type = "double">0.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</viewport>

</camera>
<camera>
<name type="string">Left-Down</name>
<window>
<name>Front</name>
</window>

<view>
<heading-deg type = "double">0.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>0</x>
<y>0</y>
<width>320</width>
<height>180</height>
</viewport>

</camera>
<camera>
<name type="string">Right-Down</name>
<window>
<name>Front</name>
</window>

<view>
<heading-deg type = "double">0.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>1600</x>
<y>0</y>
<width>320</width>
<height>180</height>
</viewport>

</camera>
<camera>
<name type="string">Right-Up</name>
<window>
<name>Front</name>
</window>

<view>
<heading-deg type = "double">0.0</heading-deg>
<roll-deg type = "double">0.0</roll-deg>
<pitch-deg type = "double">0.0</pitch-deg>
</view>

<viewport>
<x>1600</x>
<y>900</y>
<width>320</width>
<height>180</height>
</viewport>

</camera>
</camera-group>
</PropertyList>

在FGDATA文件夹根目录下找到defaults.xml配置文件,修改如下配置内容,加入camera-views.xml配置文件。

1
2
<rendering include="camera-views.xml">
</rendering>

参考链接

  1. Multi-Display setup,by flightgear.
  2. Howto:Configure camera view windows,by flightgear.

软件签名验证的方法

发表于 2021-05-26

GNU Privacy Guard(GnuPG或GPG)是一个密码学软件,用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG是自由软件,遵循IETF订定的OpenPGP技术标准设计,并与PGP保持兼容。

安装 GnuPG

对于 Windows 的用户:

如果您使用 Windows, 下载 Gpg4win并运行其安装包。

为了验证签名,您需要在 Windows 命令行(“cmd.exe”)中输入一些命令。

对于 macOS 的用户:

如果您正在使用 macOS,您可以安装 GPGTools。

为了验证签名,您需要在(“应用程序”下的)终端中输入一些命令

对于 GNU/Linux 的用户:

如果你使用 GNU/Linux,那么可能在你的系统中已经安装了 GnuPG,因为大多数 Linux 发行版都预装了它。

使用GnuPG

生成密钥对

GnuPG使用非对称密码体制算法生成一对密钥对,其中公钥可公开,私钥必须保密。

1
gpg --gen-key

验证软件签名

验证下载文件的第一步是与任何提供文件下载的人建立信任。出于此,需要下载这个文件的公钥,并且验证公钥的拥有者是否是他或者她自称的。

在下载完文件拥有者的公钥后,使用 gpg 命令导入公钥到你的 keyring 中:

1
2
3
4
5
6
gpg --import signing-key.asc
gpg --fingerprint 3DBDC284
gpg --edit-key 3DBDC284
gpg --list-keys
gpg --verify openSUSE-Tumbleweed-DVD-x86_64-Snapshot20170529-Media.iso.sha256
gpg --verify file.ext.asc file.ext

参考链接

  1. GPG入门教程,by 阮一峰.
  2. 利用 GPG 签名验证文件的完整及可靠性,by Silearner.

Office使用技巧笔记

发表于 2021-05-19 | 更新于 2022-12-15

记录各类Office使用技巧,以备使用。

MathType批量修改公式字体和大小

Word中的公式自动编号

参考链接

  1. 怎样使公式与编号上下对齐?,by 碎碎思.
  2. Word 2016 撰写论文(1): 公式居中、编号右对齐,by TechArtisan6.
  3. MathType中如何批量修改公式字体和大小,by 有你.
  4. Microsoft Office Word 中的公式自动编号,by stardsd .

flypath3d使用方法简介

发表于 2021-05-17

做科研的小伙伴们在使用matlab绘制飞行器轨迹时,总是感叹大牛绘制的图美观大方,而自己绘制的图则简陋到了极点。但现在有了flypath3d,导师再也不用担心我的绘图了。

飞行器轨迹

图1 飞行器轨迹

flypath3d简介

flypath3d打包了一个免费的Matlab软件,用于导弹和空中目标轨迹的3D可视化,为计算机仿真提供了可视参考。 由于其多功能性和易用性,该软件可以帮助产生有吸引力的演示文稿,以用于各种科学或公共宣传目的。该软件可免费用于科学和教育用途。 您也可以出于任何目的修改和/或分发此软件。 但是,使用包装时,请记住引用该论文。

flypath3d安装

该包由使用“ package_setup”命令安装在Matlab环境中的几个M代码文件组成。 它提供了通过放置连续的对象来构造复杂的3D场景的功能,这些对象实际上在布局中起到了构建块的作用。

下载flypath3d软件包并将其解压缩到目标目录。 接下来执行配置脚本:

1
package_setup

这样,flypath3d就安装好了,可以开始使用它了。

参考链接

  1. flypath3d,by Witold Bużantowicz.

MongoDB学习笔记

发表于 2021-05-11 | 更新于 2023-02-11

MongoDB是一种NoSQL类型数据库,与关系型数据库相比,它具有很强的灵活性,无需类似Sequelize这样的ORM库,即可直接访问。例如,使用nodejs访问MongoDB:

1
2
3
4
5
6
7
8
const { MongoClient } = require("mongodb");
const db= await MongoClient.connect(appConfig.mongoUri);
var dbo = db.db(appConfig.mongodbName);
var actions = await dbo.collection("actions").find({"equipmentId":req.query.equipmentId}, {
"limit":parseInt(req.query.limit) || 25,
"skip":parseInt(req.query.offset)|| 0
}).toArray();
db.close()

尽管MongoDB很灵活,但在设计其数据模型时,为了确保数据组织的一致性,应遵循一下原则:

  • 一个文档就是一个实体对象,应精心设计
  • 文档中包含的任何对象,都对应实体

分页查询及排序

请参考以下代码:

1
2
3
4
var departments = await dbConnect.collection("departments").find({}, {
"limit":parseInt(req.query.limit) || 25,
"skip":parseInt(req.query.offset)|| 0
}).sort({_id:-1}).toArray();

更新数组中某个对象的字段值

请参考MongoDB更新数组中某个对象的元素。

参考链接

  1. The MongoDB 4.4 Manual,by mongodb.
  2. Sequelize ORM,by sequelize.
  3. MongoDB 分页查询的方法及性能,by 笋干.
  4. 移动测试开发 Mongodb 的分页优化及索引使用,by opentest-oper@360.cn.
  5. MongoDB更新数组中某个对象的元素,by zackku.
  6. Mongodb数组操作$(update)、$占位符更新嵌套数组、嵌套文档集合,by OceanSky6.

Hexo使用帮助

发表于 2021-05-10 | 更新于 2022-05-21

记录Hexo使用过程的一些经验。

插入图片问题

请参考Asset Folders。

搜索无效问题

请参考Hexo博客Next主题站内搜索模块相关,解决搜索无效、一直loading的问题。

Node.js 版本限制

Hexo 版本 最低兼容 Node.js 版本
6.0+ 12.13.0
5.0+ 10.13.0
4.1 - 4.2 8.10
4.0 8.6
3.3 - 3.9 6.9
3.2 - 3.3 0.12
3.0 - 3.1 0.10 or iojs
0.0.1 - 2.8 0.10

参考链接

  1. Asset Folders,by hexo.
  2. Hexo Next 解决 Busuanzi 统计浏览失效,by HelloDavid.
  3. Hexo博客Next主题站内搜索模块相关,解决搜索无效、一直loading的问题,by AomanHao.
  4. Hexo文档,by hexo.
上一页1…222324…53下一页

Jack Huang

523 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse