专栏首页相约机器人用于人工代码生成的AI研究环境(元编程)

用于人工代码生成的AI研究环境(元编程)

https://github.com/gsurma/meta_intelligence

关于

鉴于一种深奥的,简约的,虽然图灵完整的编程语言Brainfuck,目标是人工生成执行特定任务的程序。

Brainfuck只有8个指令,使得它很容易为计算机阅读(检查python解释器brainfuck_interpreter.py),但另一方面,很难理解人类,因此这个名称。

">" Increment the pointer.

"<" Decrement the pointer.

"+" Increment the byte at the pointer.

"-" Decrement the byte at the pointer.

"." Output the byte at the pointer.

"[" Jump forward past the matching ] if the byte at the pointer is zero.

"]"] Jump backward to the matching [ unless the byte at the pointer is zero.

"," Input a byte and store it in the byte at the pointer.

遗传进化

目标是生成一个输出给定目标字符串的brainfuck程序。目标字符串'HI'的示例用法:

python3 genetic_evolution_meta_programmer.py 'HI'
  1. 将从一群随机染色体开始,其中每条染色体都是一个脑卒中程序,表示为一串随机指令。例如染色体:[->+]+.-><>+。请记住,绝大多数随机生成的程序在语法上都是不正确的,因此需要在添加到填充之前使用解释器对它们进行验证。
  2. 然后将进入选择阶段,将选择表现最佳的节目。程序使用适应度函数进行评估,该函数使用以下函数计算每个字符的分数:fitness_score += ASCII_CHARS_COUNT-abs(input_score-target_score)这基本上是计算ASCII表上从给定字符到所需字符的距离。越接近目标角色。分数越大,越接近目标,ASCII_CHARS_COUNT每个角色最多。每条染色体的最大适合度得分计算为len(self.target)*ASCII_CHARS_COUNT。
  3. 接下来,将配置染色体与轮盘选择并执行交叉。
  4. 最后要进行突变。一些突变后的程序是无效的,所以我将用随机有效程序替换它们以保持总体大小不变。
  5. 将重复步骤1-3,直到找到目标字符串。

超参数

POPULATION = 100

MUTATION_RATE = 0.115

MAX_MUTATION_ATTEMPTS = 500

SELECTION_RATE = 0.9

PROGRAM_LENGTH_LOWER_BOUND = 10

PROGRAM_LENGTH_UPPER_BOUND = 100

结果

FOUND SOLUTION: +++++++++++++++++++++++++++++++++. for: '!' in: 5 minutes
FOUND SOLUTION: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+. for: 'HI'  in: 27 minutes
FOUND SOLUTION: +++++-+++[>+++++++<-]>-+.+.+. for: '123' in: 20 minutes

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Python制作3个简易地图

    在处理地理空间数据时,经常需要以最自然的方式可视化这些数据:地图。如果可以使用Python快速轻松地创建数据的交互式地图,在本教程中使用洛杉矶县所有星巴克位置的...

    代码医生工作室
  • 使用Python和IBM Watson可视化的个性简介

    伟大的社会心理学家James Pennebaker曾经说过:“通过更仔细地观察人们用语言表达思想的方式,可以开始了解他们的个性,情感和与他人的关系。”他和许多其...

    代码医生工作室
  • 实用的AI:使用OpenAI GPT2,Sentence BERT和Berkley选区解析器从任何内容自动生成对或错问题

    在本文中,将介绍如何使用最新的AI算法自动生成“对或错”问题,例如您在学校教科书中看到的问题。

    代码医生工作室
  • IOS5开发-控件位置适应屏幕旋转代码

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation  ...

    阿新
  • 任何人都能看懂的反向传播算法解释,展示每一步计算,A Step by Step Backpropagation Example

    Backpropagation is a common method for training a neural network. There is no sh...

    用户1908973
  • HDUOJ----(1031)Design T-Shirt

    Design T-Shirt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/327...

    Gxjun
  • Android浸入式

    现在比较流行的就是浸入式,也就是状态栏颜色和当前页面颜色保持一致,为了有更好的视觉效果。 首先: 在setContentView()之前加上如下代码 ...

    先知先觉
  • Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)

    A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes...

    Angel_Kitty
  • Ceph用户邮件列表Vol45-Issue3

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=af5e5...

    用户2772802
  • JDBC读取数据优化-fetch size

    最近由于业务上的需求,一张旧表结构中的数据,需要提取出来,根据规则,导入一张新表结构中,开发同学写了一个工具,用于实现新旧结构的transformation,

    bisal

扫码关注云+社区

领取腾讯云代金券