符号说明
随机变量用大写字母表示如XXX 随机变量序列用小写字母表示如sss
第二章马尔可夫决策过程
在强化学习中,智能体与化境的交互过程可以通过马尔可夫决策过程来表示,马尔可夫决策过程是强化学习的基本框架 本章首先介绍马尔可夫过程(Markov process,MP)以及马尔科夫奖励过程(Markov reward process,MRP)。二者比较得到马尔科夫决策过程(Markov decision process,MDP)。其次介绍马尔科夫决策过程中的策略评估(policy evaluation)。最后介绍马尔科夫决策过程中的控制,分为策略迭代(policy iteration)和价值迭代(value iteration) 1. 马尔可夫过程 1.1 马尔可夫性质 马尔可夫性质(Markov property)是指未来状态的条件概率分布仅依赖于当前状态。假设X0,X1,⋯ ,XtX_0,X_1,\cdots,X_tX0,X1,⋯,Xt构成随机过程,如果具有马尔可夫性质则 p(Xt+1=xt+1∣X0:t=x0:t)=p(Xt+1=xt+1∣Xt=xt)p \left( X_{t+1}=x_{t+1} | X_{0:t}=x_{0:t} \right) = p \lef...
基于搜索的路径规划
算法流程 维护一个容器用来存储待访问的节点;维护一个数组用来标记已访问的节点;维护一个数组用来标记父节点 进行初始化 循环遍历容器: 按照预设规则弹出容器中的节点,将这个节点标记为已访问 如果弹出的节点是终点,则证明找出路径,根据父节点回溯整条路经,结束 扩展邻居节点,将未访问过且非障碍物的节点按着某种顺序放入容器中,记录父节点 结束 1. 广度优先与深度优先 1.1 广度优先(BFS) 广度优先算法使用的容器为队列(queue),遵循的规则是先进先出。 1.2 深度优先(DFS) 深度优先算法使用的容器为栈(stack),遵循的规则是先进后出。 1.3 二者对比 二者都只能用于各边代价相同的情况。 BFS能找到全局最优解,但是速度比较慢 DFS不一定能找到全局最优解,但是速度比较快 Djikstra算法需要维护一个容器用来记录每个节点的cost,当扩展节点未被扩展过则cost为inf,当这次扩展时cost小于记录的cost则更新,并添加到open_list里面 若是不判断cost,则每次扩展都会把扩展的节点添加进去,虽然最优队列会保证被访问的节点一定是...
内网穿透
1. 前提条件 想要通过公网访问到位于校园网下的主机时,由于目标主机没有公网ip,无法直接通过SSH连接到远程主机,此时便需要使用内网穿透 想要配置内网穿透,首先必须先要有一台具有公网ip的服务器,如阿里云、腾讯云等服务器 2. frp工作原理 frp为内网穿透用到的开源软件,分为服务端和客户端。服务端运行在有公网ip的服务器上;客户端运行在内网主机上,二者可以进行数据转发。我们连接到客户端指定的端口便可以实现与内网主机连接 3. 配置公网服务器 下载frp库 # 下载 wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.62.1_linux_amd64.tar.gz 打开配置文件 vim frps.toml 修改文件内容 # frps.toml # frp监听的端口,默认是7000,可以改成其他的 bindPort = 7000 # 用于客户端和服务器通信的身份验证令牌 auth.method = "to...
设置开机自启动
1. 通过gnome-terminal实现开机自启动 1.1 创建一个启动脚本 cd ~ touch start_joy.sh chmod +x start_joy.sh 1.2 编辑脚本文件 vim start_joy.sh #!/bin/zsh source /opt/ros/noetic/setup.zsh source /home/nv/ants/devel/setup.zsh roslaunch vehicle_rea joy_control.launch 1.3 配置自动启动 创建 ~/.config/autostart 目录(如果它不存在的话) 使用 gnome-terminal 打开一个新的终端窗口并执行上述脚本。编辑 ~/.config/autostart 目录下的 .desktop 文件来实现这一点 mkdir -p ~/.config/autostart 创建一个新的 .desktop 文件,例如 start_joy.desktop vim ~/.config/autostart/start_joy.desktop [Desktop Entry] ...
设置IP变化同步脚本
1. 创建无密码密钥 生成无passphrase密钥的命令 ssh-keygen -t rsa -b 4096 -f ~/.ssh/rsa_no_pass -N "" 在~/.ssh添加文件config vim ~/.ssh/config 在里面添加 Host gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/rsa_no_pass 2. 将本地Git与Gitee建立联系 将本地无密码公钥添加到Gitee上 创建并切换到main分支 git switch -c main 然后按照gitee提示的操作 3. 创建脚本 创建Bash脚本,该脚本每次检测IP是否变化,如果变化则更新仓库中的一个文件(例如current_ip.txt),提交并推送到Gitee的main分支 vim update_ip.sh 添加内容 #!/bin/bash export GIT_SSH_COMMAND="ssh -i /home/lwb/.ssh/rsa_no_pass" # 定义仓库路...
升级Cmake
1. 安装 安装依赖 sudo apt install libssl-dev 去官网下载所需版本的源码。也可以使用wget下载,例如: wget https://cmake.org/files/v3.28/cmake-3.28.5.tar.gz tar -xvzf cmake-3.28.5.tar.gz 进入目录配置 cd cmake-3.28.5 chmod 777 ./configure ./configure make -j8 sudo make install 2. 替换 最后使用新安装的Cmake替换旧版本,其中/usr/local/bin/cmake为新安装的Cmake目录 sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
升级Eigen库
usr/include/eigen3存放的是apt安装的Eigen库 /usr/local/include/eigen3存放的是源码安装的Eigen库 1. 查看Eigen版本 sudo updatedb locate Macros.h|grep eigen3 vim (相应位置)/usr/include/eigen3/Eigen/src/Core/util/Macros.h 2. 安装 下载Eigen源码,最好下载最新release版本 wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz # 解压 mkdir eigen-3.4.0 tar -zxvf eigen-3.4.0.tar.gz -C ./eigen-3.4.0 #编译安装 mkdir build && cd build cmake .. sudo make install 只需将eigen文件复制到本地调用文件夹/usr/include中就能完成对apt安装的覆盖 sudo cp -r /usr/lo...
升级GCC
1. 查看版本 gcc -v g++ -v 2. 下载指定版本 进入清华源下载相应版本 wget https://mirror.tuna.tsinghua.edu.cn/gnu/gcc/gcc-14.1.0/gcc-14.1.0.tar.gz 解压文件进入目录,我下载的是gcc-14.1.0,版本因人而异 tar -xf gcc-14.1.0.tar.gz cd gcc-14.1.0 # 下载依赖包 ./contrib/download_prerequisites # 创建一个用于编译GCC的目录: mkdir build && cd build # 配置编译选项: ../configure --prefix=/opt/gcc-14.1.0 --enable-languages=c,c++ --disable-multilib # 开始编译 make -j8 # 最后,安装GCC: sudo make install 3. 设置软链接 查看系统gcc/g++版本 sudo updatedb --prunepaths="/mnt" locate g++|grep ...
使用GitHub
1. SSH配置 请参考使用SSH博客 配置config文件 vim ~/.ssh/config 在里面添加 Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/xxx # 这里xxx换成你命名的私钥名称 2. 添加SSH key到GitHub 拷贝xxx.pub文件的内容 vim ~/.ssh/xxx.pub 登录GitHub账号,从右上角的设置进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key 3. 设置Git信息 git config --global user.name '你的名字' git config --global user.email '你的邮箱' git config --list可以查看信息