强化学习算法——TPG算法(遗传编程GP算法)代码
tpg算法是一个使用模块涌现和复用机制的遗传编程(GP)算法,该算法在一些强化学习问题上有着不错的表现,本文给出该算法的项目地址。
tpg算法的C++实现代码大概有1万的逻辑代码,如果这个比例换做使用python的话估计会有一定的减少,但是由于是逻辑代码,因此即使使用python代码重构的话代码量也不会有太明显的下降,同时由于该算法的计算量很大,因此难以取得比Deep learning下的DRL的性能优势,甚至在长期来看的话tpg算法是没有DRL性能好的,但是tpg算法同其他的进化算法一样在较短的时间内是会比DRL性能好的,举个例子,比如使用进行10000个episode的训练,每100个episode的数据收集后训练一次(tpg和DRL都如此),在1000 episodes的时候tpg性能优于DRL,但是很快tpg就进入到收敛状态,难以寻找更优解,但是这时DRL的性能曲线已经持续上升,最后在10000 episodes训练结束时很多情况下DRL会明显优于tpg,这一点或许也是当前背景下很多researcher不去研究tpg而是去研究DRL的原因。
由于tpg这样的进化算法运算量大,虽然运行早起有优势,但是后期难以达到DRL的性能,并且tpg这样的进化算法难以有较大的改进空间,并且编码难度极大(上万行的C/C++代码量是常事),因此如今已经很少有人去做tpg这样的进化算法了,不过作为解决AI的,或者说解决ML的最具通用性的黑盒优化算法,在科研领域依然有很小一部分人在做这个领域的研究。
一个难以进一步优化的,并且运算量大,代码实现极为困难的算法确实难以有人fellow的,不过tpg这样的算法不需要使用GPU,因为这类算法主要的操作是逻辑运算而不是矩阵的数值运算,并且如果在较短的优化周期内来看tpg这样的优化算法也确实有其优势的地方,但是如果在一个较长的优化周期来看那就不具备什么优势了;不过我个人任务tpg这样的算法没有太多人fellow的主要问题其实还是其代码实现难度极大,一个SOTA的相关deep learning的代码,如果使用pytorch、TensorFlow这样的框架的话,那么几百行的python代码就可以实现,与之相对比的是进化算法的上万行C++代码,甚至是近10万行的C++代码,这个工作量差的级别不是一个level的,deep learning方面的算法研究,从一个新的方向着手,从想idea,做实现,写论文,投稿,发表会议确认出版,总共时间可能是3个月,也可能是半年,但是对于绝大部门的AI从业者来说,一个上万行的C++代码(更有可能是近10万行的C++代码),可能把这上万行的C++代码弄明白怎么一个流程都或许不是三个月或者半年就能搞定的事情,很有可能这上万行的C++代码看了三个月然后就崩溃了,而其他人的论文都发表CCF A会都录用了,这中研究方向导致的成果差距也是极少有人能接受的,现在还在这个领域(进化算法)的researcher大多都是远古时期(20、30年前)就已经从事这个方向的研究者,可以说进化算法领域的AI研究也是一个濒危方向。
- unused_code_chunks.cpp 调试代码,实际项目的运行中并没有使用。
- sequence_comparisons.h 计算两个double数组或两个double类型的vector的距离(欧式距离等等距离的度量,输入为矢量,结果为标量)
- state.h
- memoryEigen.h
- instruction.h
- instruction.cc
- [ ]
项目所属实验室地址:
https://creativealgorithms.ca/


tpg算法的项目代码地址:
https://gitlab.cas.mcmaster.ca/kellys32/tpg/
This code reproduces results from the paper:
Stephen Kelly, Tatiana Voegerl, Wolfgang Banzhaf, and Cedric Gondro. Evolving Hierarchical Memory-Prediction Machines in Multi-Task Reinforcement Learning. Genetic Programming and Evolvable Machines, 2021. pdf
该项目代码经验证真实可运行:

强化学习算法library库:(集成库)
https://github.com/Denys88/rl_games
https://github.com/Domattee/gymTouch
个人github博客地址:
https://devilmaycry812839668.github.io/
强化学习算法——TPG算法(遗传编程GP算法)代码的更多相关文章
- 【Python Deap库】遗传算法/遗传编程 进化算法基于python DEAP库深度解析讲解
目录 前言 概述 启发式的理解(重点) 优化问题的定义 个体编码 初始族群的创建 评价 配种选择 锦标赛 轮盘赌选择 随机普遍抽样选择 变异 单点交叉 两点交叉 均匀交叉 部分匹配交叉 突变 高斯突变 ...
- 【比较】遗传算法GA和遗传编程GP有什么不同?
遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...
- 学习Road map Part 03 编程和算法
方法: 优先重复已学过的内容 写学习笔记
- 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践
1. 遗传编程简介 0x1:什么是遗传编程算法,和传统机器学习算法有什么区别 传统上,我们接触的机器学习算法,都是被设计为解决某一个某一类问题的确定性算法.对于这些机器学习算法来说,唯一的灵活性体现在 ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- 强化学习Q-Learning算法详解
python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏
今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...
- 【python(deap库)实现】GEAP 遗传算法/遗传编程 genetic programming +
目录 前言 1.优化问题的定义 单目标优化 多目标优化 2.个体编码 实数编码 二进制编码 序列编码(Permutation encoding) 粒子(Particles) 3 初始种群建立 一般族群 ...
- 谷歌重磅开源强化学习框架Dopamine吊打OpenAI
谷歌重磅开源强化学习框架Dopamine吊打OpenAI 近日OpenAI在Dota 2上的表现,让强化学习又火了一把,但是 OpenAI 的强化学习训练环境 OpenAI Gym 却屡遭抱怨,比如不 ...
随机推荐
- 神经网络之卷积篇:详解卷积步长(Strided convolutions)
详解卷积步长 卷积中的步幅是另一个构建卷积神经网络的基本操作,让向展示一个例子. 如果想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,把步幅设置成了2.还和之前一样取左上方的3×3区域的元素的 ...
- games101 作业6 详解SAH
games101 作业6 详解SAH 可参考资料:https://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/ ...
- macOS 查看网络接口信息
networksetup -listallhardwareports 执行结果: Hardware Port: Ethernet Adapter (en4) Device: en4 Ethernet ...
- C primer plus笔记之初识C语言
初识C语言 --本文参考书籍: Stephen Prata的<C Primer Plus> 前言 C 语言是一门抽象的.面向过程的语言,C 语言广泛应用于底层开发,C 语言 ...
- 【YashanDB知识库】共享集群YAC换IP
[标题]共享集群YAC换IP [需求分类]安装部署,配置变更 [关键字]安装部署,更换IP,运维,配置变更,高可用,YAC [需求描述]客户需要将已经部署的YAC集群更换IP,从测试网段切换生产网段 ...
- HashMap深入讲解
HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构, 而HashSet和HashMap者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashSet ...
- Unocss使用
目录: 安装 简单使用 自定义规则 安装 { "dependencies": { "unocss": "^0.55.6", "vu ...
- sql语句去掉前面的0(前导零,零前缀)
sql还有个stuff的函数,很强悍. 一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就 ...
- 使用 Performance API 实现前端资源监控
1. Performance API 的用处 Performance API 是浏览器中内置的一组工具,用于测量和记录页面加载和执行过程中的各类性能指标.它的主要用处包括: 监控页面资源加载:跟踪页面 ...
- EF Core – 冷知识
Add vs AddAsync 参考: .NET 5 REST API Tutorial AddAsync() vs Add() in EF Core EF Core's AddAsync v. Ad ...