GAE | 广义优势估计
本文主要介绍常用的几种优势函数的估计方式,首先定义一下本文讨论的优势函数,即:可以理解为,在状态 的情况下,采用动作 比平均动作能获得多少优势。 蒙特卡洛方法(MC方法)蒙特卡洛方法非常朴素,但是并不实用。即,在一个回合结束之后,再根据公式算出 ,然后再用公式直接用 来表示 ,从而估计出最终的优势函数 这种方法的好处是,这是无偏估计,但是方差比较大,并且在online的时候无法做 TD方法这个方法只需要一个值函数,使用如下方法来做估计:这相当于是使用 来估计 ,当然这就是有偏的了,不过这个方法的方差比上面的小。 A2C方法(这个方法是不是A2C笔者没有Check过)这个方法比TD的改进是,使用两个
PPO
前言PPO是目前最好用的on-policy的算法,之前想学TRPO发现太复杂了,这里开个新坑 替代优势首先,考虑一个问题,对于策略参数 更新为参数 的时候,到底带来了多少优势 定义优势函数为:而替代优势可以写为:如果引入无限长度的折扣分布,那么上面的式子可以把期望展开成:由于我们希望这里面两个策略离得非常近,所以使用 来代替 上面的式子变成 重新把这个式子写成期望的形式:后面那一项被称为替代优势,即: PPO Penalty这里面的想法很简单,使用下面这个式子来控制梯度的调整:这里面的 通过检查目标散度与实际的KL散度的大小来更新,如果更新的KL大于设定值的1.5倍则倍增 来惩罚,如果小于一半则 减半来扩大信赖域
FLA Lab Report | 自动机大作业实验报告
设计思路整体上我的程序分为如下几个步骤: 读取命令行参数 如果有 -h 就输出帮助信息并退出 如果带有 -v 或者 --verbose 参数就把fla结构体中对应的值设为true 根据命令行输入的文件后缀,判定运行的模拟类型,并记录到fla结构体中 读取文件的内容,加载到对应的结构体中 根据上一步判定的模拟器类型,把fla结构体传给对应的模拟器 PDA模拟器对于pda模拟器,我的设计如下: 我用的面向对象的方法,每一个状态都被封装成了一个类,模拟器保存了一个迭代器指向当前的状态。每个状态提供一个 pair<bool,pair<int,string>>get_transition(char input, char stack_top) 方法,传入当前的字符、栈顶符号,返回 (是否成功,下一个状态的编号,栈顶压入符号) 具体的运行方式如下: 使用 compile() 函数可以编译一个pda模拟器,经历如下步骤: 传给Lexer,按照行给整个传入的文件进行划分,并丢弃所有分号后面的内容。 Lexer将每一行传给 get_statement()...
Artificial Intelligence Review Note | 人工智能复习笔记
启发式搜索——算法在启发式搜索里面,会考虑两个集合,一个叫 Open set 一个叫 Closed set Open:表示当前需要考虑的,还未完成搜索的节点 Closed:表示已经处理完毕,不会再考虑的节点 启发式搜索的大概步骤是: 把初始的节点加入到Open集合中 将Open set中的节点按照评估函数 的大小从小到大排序,选出最小的那个,设置成当前的节点(CS),如果已经没有可以选的了,结束,表示未搜索到 如果CS是终点,结束操作 将CS的所有可达节点进行以下操作: 如果节点在Closed list中,继续下一个 否则加入到 Open list中 将CS加入Closed list中,回到第2步 算法的评估函数为: 其中的 表示从开始移动到节点 的实际代价,而 是定义的启发式评估函数,用于评估当前节点 到目标节点的代价 由于上面的定义,不难发现, ,如果满足 那么这个启发式算法是可采纳的,一定会找到最优解的。 这里的 应当理解为从点n到终点的真实代价 推理谓词推理推理规则一共有如下几条: 取式假言推理:已知 和 为真,那么 ...
DB Takeaway Notes | 易错点
关系代数 某属性不等于什么在关系代数里面要用减法去做,因为该属性可能不是主键,所以可能有多条记录 注意所有和一个 “找出在南京所有公司工作过的员工”应该使用除法,先筛选出所有的在南京的公司,然后投影出公司名称,在员工表里面投影到只剩下姓名和公司,再做除法 SQL 如果要求不重复,记得使用 SELECT DISTINCT 注意字符串比较是 name LIKE '胡%' 字符串是单引号 在SQL的WHERE子句里面如果希望比较当前某个值和子查询返回某个值,记得使用 ALL 规范化理论 主属性集是所有候选关键字的属性集的并集
Pumping Lemma | 各种泵引理
正则语言的泵引理对于一个正则语言 存在一个整数 使得对于 中的每一个长度大于等于 的字符串 都可以写作 满足以下性质: 上下文无关语言的泵引理对于每一个上下文无关语言 都存在一个整数 使得 满足:
P and NP,Decidable and RE
递归语言和递归可枚举语言递归语言(decidable)要求存在一个满足如下要求的图灵机: Halt on accept Halt on reject但是递归可枚举语言(RE:Recursive enumerable)要求存在的图灵机只需要满足: Halt on accept换言之,对于 True RE可能存在某个句子,你不知道这个句子在图灵机上会不会停机 正规定义: 递归可枚举语言是指由图灵机定义的语言(不管是通过终止状态接受还是通过停机接受) 递归语言: 定义算法是一个图灵机,该图灵机通过终止状态接受,并且无论接受与否,它都注定会停机 定义递归语言是由 定义的,且 是一个算法 可判定性对于图灵可判定和图灵可识别,这两个概念如下: 如果一个语言是 递归语言 那么这个语言是 图灵可判定语言 如果一个语言是 递归可枚举语言 那么这个语言是 图灵可识别语言 非递归可枚举语言这种类型的语言是存在的,因为RE的集合是可数集合,但是所有语言的集合的势势不可数的 P 和 NPP...
check7
Solo portion测试在wsl下非常顺利,下面是开始和关闭的截图 开始新连接截图: 互相发送截图 关闭截图 传输文件测试整个流程非常顺利,没有修改任何代码,直接成功 Group portion我选择和沈硕(221502023)互发这里首先我作为server尝试给对方发文件,下面是对应的截图: 我的截图 对方的截图然后我作为client尝试进行了聊天,非常成功,下面是截图
check6
Program Structure and Design这次实验比较简单,主要是需要设计一个高效的路由表,这里我选择设计的路由表类型是: 1std::array<std::map<uint32_t, std::pair<std::optional<Address>, size_t>>, 33> _routing_table {}; 这个结构的含义如下: 第一层Array用于表示前缀的长度,这样方便从长到短匹配 第二层里面是一个map,记录了从ip前缀到下一跳地址以及出口号的映射关系 最后存的是一个pair,记录了下一跳、出口地址 然后我封装了一个最长前缀匹配的算法: 12345678910111213141516std::pair<std::optional<Address>, size_t> Router::get_address( const uint32_t ip ) const{ for ( int idx = 32; idx >= 0; --idx ) { uint32_t...