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算法)代码的更多相关文章

  1. 【Python Deap库】遗传算法/遗传编程 进化算法基于python DEAP库深度解析讲解

    目录 前言 概述 启发式的理解(重点) 优化问题的定义 个体编码 初始族群的创建 评价 配种选择 锦标赛 轮盘赌选择 随机普遍抽样选择 变异 单点交叉 两点交叉 均匀交叉 部分匹配交叉 突变 高斯突变 ...

  2. 【比较】遗传算法GA和遗传编程GP有什么不同?

    遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...

  3. 学习Road map Part 03 编程和算法

    方法: 优先重复已学过的内容 写学习笔记

  4. 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践

    1. 遗传编程简介 0x1:什么是遗传编程算法,和传统机器学习算法有什么区别 传统上,我们接触的机器学习算法,都是被设计为解决某一个某一类问题的确定性算法.对于这些机器学习算法来说,唯一的灵活性体现在 ...

  5. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  6. 强化学习Q-Learning算法详解

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  7. 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...

  8. ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏

    今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...

  9. 【python(deap库)实现】GEAP 遗传算法/遗传编程 genetic programming +

    目录 前言 1.优化问题的定义 单目标优化 多目标优化 2.个体编码 实数编码 二进制编码 序列编码(Permutation encoding) 粒子(Particles) 3 初始种群建立 一般族群 ...

  10. 谷歌重磅开源强化学习框架Dopamine吊打OpenAI

    谷歌重磅开源强化学习框架Dopamine吊打OpenAI 近日OpenAI在Dota 2上的表现,让强化学习又火了一把,但是 OpenAI 的强化学习训练环境 OpenAI Gym 却屡遭抱怨,比如不 ...

随机推荐

  1. 最短小精悍的js数组打乱顺序

          let number = [1, 45, 13, 17];       // 封装一个打乱数组的方法       function getarr(arr) {         return ...

  2. React 高德地图 进京证 路线规划 问题小记

    一.加载问题 用高德地图做了个进京证路线规划的功能,官网也是有 React 代码示例.但是吧,这个Demo有问题,地图是能加载成功,但是其他功能再用 map 这个变量肯定不行,果不其然是null,处理 ...

  3. 通过JMX监控weblogic服务

    一.JMX简介 JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能,那么怎么理解所谓的"被管理"呢?试想你开发了一个软件(如WEB网站),它是在24小时不间断运行的, ...

  4. [天线原理及设计>基本原理] 1. 辐射机制

    1. 辐射机制 1.1. Single Wire 单线 如果电荷不移动,则不会产生电流,也不会产生辐射. 如果电荷以匀速移动: a. 如果电线是直的,并且范围是无限的,则没有辐射. b. 如果电线弯曲 ...

  5. redhat8 rhel8 启动grub损坏修复

    环境:redhat8.4 RHEL8.4 服务器:华为G560 问题描述:调整了/etc/default/grub文件,重新生成/boot/grub2/grub.cfg导致机器启动失败,直接进入了re ...

  6. Win32 创建窗口翻车记录

    今天创建窗口的时候,在捕获消息WM_CREATE的时候翻车了,找了好久都没找到,我换另一台电脑上又没出问题, 现分享下:LRESULT QWnd::WindowProc(HWND hWnd, UINT ...

  7. udp协议及包格式

    UDP协议也是互联网基础协议之一.它和TCP一样同属于传输层当中的一个协议. 不过UDP协议是一个面向无连接的协议(TCP是向面连接的协议).一个UDP连接的建立,不必象TCP协议那样需要服务器端侦听 ...

  8. 全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

    全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO.LIFO.优先级队列.双端队列和环形队列) 摘要: 在 Python 中,队列(Queue)是一种常用的数据结构 ...

  9. Windows10使用MSYS2和VS2019编译FFmpeg详解

    1 环境准备 1.1 安装Visual Studio 2019 这个步骤相对比较简单,不再详细说明. 1.2 安装msys2 首先需要安装msys2环境以及相关的编译依赖项, 官方网址为: https ...

  10. 肉夹馍(Rougamo)4.0.1 异步方法变量调试修复与IoC系列扩展

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件,无需在应用启动时进行初始化,也无需繁琐的配置:支持所有种类方法(同步和异步. ...