组合29个简单Python代码块,自动发现新算法

英特尔的研究人员提出一种新的自动算法生成器(AAD),利用演化算法框架,以Python语言的基本子集作为语法架构,能够对29个数组/向量问题的代码块进行组合,通过学习,自动生成更复杂问题的解决方案。

本文介绍一种自动算法发现器(AAD),这是一种用于合成高复杂度计算程序的演化算法框架。此前的演化算法依赖于客观的适应函数,这在给算法设计上增加了难度。

本文提出的AAD采用问题式引导演化过程(PGE),这需要将一组问题一起引入,针对更简单问题发现解决方案,用于解决同一组问题中的更复杂的问题。PGE还支持几种新的进化策略,并自然地应用于高性能计算(HPC)技术。

AAD可以为29个数组/向量问题生成Python代码,范围从min,max,reverse到更具挑战性的问题,如排序和矩阵向量乘法。此外,AAD显示出对受限环境/受限输入的强适应性,以及针对“开箱即用”的问题的解决能力。

AAD是将相对简单的问题解决组件自动组合程序,可以实现搜索由这些组件的所有可能排列所组成的整个空间,然后寻找满足给定要求的解决方案。目前已经提出了许多这样的搜索策略(例如枚举,基于演绎,约束求解,随机)来应对这类挑战。

使用AAD的分类算法代码块示例

本文提出了一种基于演化算法的搜索策略,将其AAD中实现。AAD可以基于Python的子集作为语法结构,组合成复杂度相对较高的程序(循环,嵌套块,嵌套函数调用等),并生成可执行的Python代码。在本文中使用AAD来发现数组/向量问题的算法解决方案。

总的来说,AAD实现了以下目标:

使用问题导向型的演化策略来消除算法中的目标函数。

使用多样化的演化策略(多环境解决方案,异花授粉和联合演化),并通过广泛的实验评估其有效性。

利用AAD解决通用Python语言中的29个数组/向量问题,表明演化算法能够解决复杂的新问题。

支持循环模块,可以发现任何(非零)输入的算法。

AAD结构设计方案和原理

AAD主要架构示意图,主要由问题生成器、解决方案生成器和检测器组成

问题生成器(ProbGen)

我们想要解决的每个问题都从问题生成器开始。这部分负责:(1)指定输入和输出的数量和类型。(2)为给定的问题生成输入。例如,对于最大查找(Max),问题生成器指定Max将一个数组作为输入,并生成一个数字作为输出。另外,当请求为大小为N的问题生成输入时,会产生一个由N个数字组成的输入数组。

检测器(Checker)

检测器负责接受/拒绝为给定问题生成解决方案。检测器使用问题生成器生成的输入执行生成的程序,并生成输出。检测器中包含接受/拒绝输出的逻辑。因此,检测器与给定的问题生成器对应,两者齐头并进。

解决方案生成器(SolGen)

SolGen主要由两部分组成:(1)表达式/短语存储,以及(2)演化器。

表达式/短语存储器(ExpStore)

解决方案生成器使用语法构造源程序。AAD使用的Python语法子集存储在ExpStore中,如表1所示。在AAD中,语法规则使用类型信息进行扩充。

AAD支持四种数据类型:数字(NUM),布尔数(BOOL),数组(ARR)和数组的数组(AoA),它们可以对矩阵进行建模。此外,表达式的每个操作数都标记为Consumer(只读),Producer(只写)或ProdCon(读-修改-写)。

演化器(Evolver)

演化器负责对表达式和短语进行组合,以生成程序(或函数),以解决问题生成器提出的问题。演化器分三个阶段构建解决函数(SolFunc)。

阶段1:构建解决函数

阶段2:在“生产者”(只写数据)和“消费者”(只读数据)间建立联系

阶段3:操作和函数调用突变

检查输出

上表所示为在问题集A中的调用者-被调用者的关系。比如SortDesc函数所在的行显示,SortAsc在57%的解决方案中调用了Max函数,在14%的解决方案中调用了Min函数,以此类推。Min,Max和ReverseArr函数没有调用任何其他函数。所有其他函数都依赖于一个或多个函数来得到解决方案,显示出函数组合的重要性。

上表中列出了3组问题以及在基线方法下的步数表现,并将其与四种演化策略下的表现进行了对比。

未来前景与应用方向

从概念上讲,AAD也可用于程序翻译。对于用C语言,汇编语言甚至二进制语言编写的程序,可以执行该实例作为AAD的检测器来生成Python(或类似语言)代码。这种方式与仅通过观察另一个对象行为,来构建自身行为方式的机器学习算法类似。很明显,本文中使用的Python代码可以被视为“Python到Python”的翻译,因为不同的检测器对应了不同的Python实现。

AAD可能不仅仅是一个程序合成器。它还可以用来获取机器的内在知识。通过调用-被调用关系图和父子图捕捉不同问题之间的内在关系。这些关系是由AAD本身发现的,并且可以被认为是不同操作之间的联想记忆的一种表示,其形式与人类大脑构造和机制类似。

由于AAD可以通过引入越来越多的问题来增加知识储备的扩展,通过适当的指导机制,就可以引导系统获取大量技能(算法),并自己构建知识表示。就像我们在自己孩子还小时,向TA们提出许多问题和挑战,目的是为了引导孩子们获得大量技能和知识。

AAD是用于综合高复杂度程序的演化框架,它以Python语言的基本子集作为语法架构。使用AAD能够对29个数组/向量问题的代码块进行组合,其中既有最大值、最小值,矩阵翻转这类简单问题,也有更具挑战性的问题,如排序和矩阵向量乘法等,对于输入没有大小限制。

我们评估了解决这些问题策略的有效性,并证明了AAD具备解决“开箱即用”问题的能力。为了应对复杂需求带来的各种挑战,AAD工具还能实现与高性能计算(HPC)技术的结合。总的来说,与现有技术相比,采用PGE的演化算法能够解决类似或更高复杂性的问题。

THE END
1.python代码自动生成器野牛程序员代码自动生成器可以根据用户提供的规则或模板自动生成特定编程语言的代码。这种工具通常用于提高开发效率,减少手动编写重复代码的工作量。以下是一个简单的Python代码自动生成器的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 http://yncoders.com/show/6389
2.在线python转跳代码生成器在线python转跳代码生成器,生成python跳转代码,输入网址,可以使用301或者302的方式生成python跳转代码https://www.bejson.com/transfor/location_create_python/
3.4个免费代码自动生成神器日常写代码,是一件非常需要耐心的事情,尤其是那些没有技术含量重复使用到的一些代码排列组合,比如前端的一些html和css布局,简单繁杂,这个时候就会使用到一些免费代码自动生成神器,让我们提高效率。 1:在线搭建框架-懒猴子CG 官方网址:http://cg.lazy-monkey.com/ ...https://www.jianshu.com/p/76d05a51567e
4....Compose部署,缓存,业务代码生成器,接口限流,DjangoAdmin验证码...python manage.py seed app_label 10 其中app_label 是开发者自行创建的 App 名称,比如 DjangoStarter 中的示例应用 demo 使用代码生成器(可选) DjangoStarter 内置业务代码生成器,开发者只需要专注于编写最核心的models.py完成模型定义,其他代码自动生成,减少重复劳动,解放生产力。 https://gitee.com/deali/DjangoStarter
1.Python:生成器forlinf: yieldl.strip()# 返回数据时,去除行尾的换行符号 forlinread_file('hello.txt'): print(l) 6. 总结 生成器是 Python 中强大且灵活的工具,能够有效处理迭代和大型数据集。通过使用生成器,您可以获得更高效的内存使用和更自然的代码结构。https://blog.csdn.net/Wei_sx/article/details/144073095
2.python实现自动生成C++代码的代码生成器python这篇文章介绍了python实现C++代码生成器的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以...https://www.jb51.net/article/255113.htm
3.python万能代码生成器mob649e8157aaee的技术博客在现代软件开发中,代码生成器的出现极大地提升了开发效率。随着Python语言的广泛应用,许多开发者开始探索如何构建自动化的代码生成器,帮助简化重复的编码任务。本文将为大家介绍Python万能代码生成器的概念,并提供基本的代码示例。此外,我们也将探讨其在开发中的实际应用,最后以一个简单的ER图总结。 https://blog.51cto.com/u_16175447/11965233
4.什么是Python的迭代器和生成器?(附代码)(附代码) 本文介绍了Python中的生成器和迭代器。在处理大量数据时,计算机内存可能不足,我们可以通过生成器和迭代器来解决该问题。 迭代器:一次一个! Python 是一种美丽的编程语言。我喜欢它提供的灵活性和难以置信的功能。我喜欢深入研究Python的各种细微差别,并了解它如何应对不同的情况。https://ioda.lntu.edu.cn/info/1147/1561.htm
5.使用VisualPython自动生成代码腾讯云开发者社区使用Visual Python自动生成代码 Visual Python简介 VisualPython是一个Python 代码生成器,只需要鼠标点击就可以实现导入包、读入文件、可视化等常用功能。 #不需要再看着matplotlib文档,写一段画图代码了:) 官网:https://www.visualpython.ai/ (鼠标点击设置参数,生成代码)...https://cloud.tencent.com/developer/article/2187228
6.自创的安卓代码生成器生成iclauncher图片自创的安卓代码生成器-生成ic_launcher图片 技术标签: 框架介绍 java android大家好,我是飞刀,这次我来讲一下生成ic_launcher的功能。 首先打开界面看一下: 界面上有个mipmap和drawable的选择项,有个选择图片的按钮,有个自定义图片大小的输入框。 这里选择了个星星的图片,点击生成,图片所在的文件夹下生成了一个...https://www.pianshen.com/article/94351636958/
7.同步轮G代码自动生成器行业同步轮G代码自动生成器 行业 - 制造Th**er 上传26KB 文件格式 rar 同步轮 同步轮G代码自动生成器(齿数小于20个免费版) 点赞(0) 踩踩(0) 反馈 所需:1 积分 电信网络下载 客户、银行、ERP三方沟通文档.doc 2024-11-20 17:09:28 积分:1 https://www.coder100.com/index/index/content/id/2376630