强化学习算法——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 却屡遭抱怨,比如不 ...
随机推荐
- 【问题解决】git status中文文件名乱码
问题复现 解决办法 在git bash中直接执行如下命令 git config --global core.quotepath false 原因 通过 git config --help 可以查看到以 ...
- 使用 onNuxtReady 进行异步初始化
title: 使用 onNuxtReady 进行异步初始化 date: 2024/8/16 updated: 2024/8/16 author: cmdragon excerpt: 摘要:本文详细介绍 ...
- 2023 CCPC 女生题解
gym B. 终焉之茧 \(\star\) 显然两个维度分别做 单谷函数,起始点 \(A\) 是一个端点.一个 naive 的想法是三分目标点 \(B\),但交互次数会超.二分关于 \(B\) 对称点 ...
- 手把手教你ubuntu下移植MJPG-streamer
一.嵌入式视频图像开源库 在嵌入式系统中,常用的视频图像处理开源系统有:luvcview.cheese.motion.mjpg-streamer或者ffmpeg,其中: • luvcview: 基于V ...
- 9k star 监控系统,100% 国产,推荐了解
前言 监控系统的重要性不言而喻,国内用的最多的应该是 Zabbix 和 Prometheus,其优缺点: Zabbix 是资产管理式,监控数据存在数据库中,擅长设备监控,不擅长微服务和云原生环境的监控 ...
- 【Mac + Appium + Java1.8(一)】之Android自动化环境安装配置以及IDEA配置(附录扩展Selenium+Java自动化)
配置环境: MacOS:10.13.6 java:1.8 IntelliJ IDEA:2018.3 Android SDK:25 Appium:1.9.1 Appium-desktop:1.7.1 j ...
- C语言指针进阶
目录 字符指针 指针数组 数组指针 数组指针的定义 &数组名VS数组名 数组指针的使用 数组参数.指针参数 一维数组传参 二维数组传参 一级指针传参 二级指针传参 一级指针 二级指针 数组指针 ...
- 【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
问题现象 客户的java日志中有如下异常信息: 问题的风险及影响 对正常的业务流程无影响,但是影响druid的merge sql功能(此功能会将sql语句中的字面量替换为绑定变量,然后将替换以后的sq ...
- LeetCode题集-3 - 无重复字符的最长子串
题目:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度. 我们先来好好理解题目,示例1中怎么得到长度为3的? 如果以第一个字符a为起始,不含重复的最长子串是abc:则我们这样表示(a) ...
- TreeMap源码详解—彻底搞懂红黑树的平衡操作
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说TreeSet里面有一个TreeMap(适配器模式). Java TreeMap实现了Sorted ...