Code前端首页关于Code前端联系我们

英特尔自动算法查找器(AAD)进化算法框架:29 个 Python 代码块自动生成新算法

terry 2年前 (2023-09-27) 阅读数 63 #数据结构与算法

英特尔自动算法生成器(AAD)演化算法框架:29个Python代码块,自动生成新算法

本文介绍了自动算法查找器(AAD),一种合成复杂复杂框架的方法。程式。以前的进化算法依赖于目标适应度函数,这使得算法设计变得困难。

本文提出的AAD采用PGE(基于问题的引导进化)过程,需要一起提出一个问题集,以找到更简单问题的解决方案,并在同一问题集中解决更复杂的问题。 PGE还支持多种新的发展策略,并且在高性能计算(HPC)技术中具有天然的应用。

AAD 可以为 29 个数组/向量问题生成 Python 代码,范围包括最小值、最大值、逆问题以及更具挑战性的问题(例如排序和矩阵向量乘法)。此外,AAD表现出对有限环境/有限收入的强大适应能力以及“开箱即用”解决问题的能力。

AAD 是一个程序,它自动组合相对简单的解决问题的组件,搜索由这些组件的所有可能排列组成的整个空间,然后找到满足给定要求的解决方案。人们提出了许多此类搜索策略(例如,基于计算、基于推理、约束求解、随机)来应对此类挑战。

英特尔自动算法生成器(AAD)演化算法框架:29个Python代码块,自动生成新算法

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

本文提出了一种基于进化算法的搜索策略并在AAD中实现。 AAD 可以基于 Python 语法构造的子集组合成相对复杂的程序(循环、嵌套块、嵌套函数调用等),并生成可执行的 Python 代码。在本文中,AAD 用于寻找数组/向量问题的算法解决方案。

一般来说,AAD实现以下目标:

采用面向问题的进化策略,从算法中消除目标函数。

使用不同的进化策略(多环境解决方案、异花授粉和共同进化)并通过大量实验评估其有效性。

使用AAD解决了通用Python语言中的29个数组/向量问题,证明进化算法可以解决复杂的新问题。

支持循环模块,可以查找具有任何(非零)输入的算法。 AAD结构设计图及原理。该部分负责: (1)确定输入和输出的数量和类型。 (2) 为给定问题创建输入。例如,对于最大搜索 (Max),问题生成器指定 Max 将表作为输入并生成数字作为输出。此外,当要求为大小为 N 的问题生成输入时,会生成一个包含 N 个数字的输入数组。

审阅者

审阅者负责接受/拒绝为特定问题创建的解决方案。检测器使用问题生成器生成的输入执行生成的程序并产生输出。该指示器包含接受/拒绝输出的逻辑。因此,指标与给定的问题生成器相对应,两者相辅相成。

检测器不一定必须实现它想要查找的算法。例如,“排序问题”检测器不需要实际对输入数组进行排序,但可以比较输出数组中的每两个相邻元素,看看这两个元素是否符合预期的顺序。当遇到未排序的数据对时,指示器会发出“失败”语句。如果每对相邻元素都是有序的,并且输出矩阵包含与输入矩阵完全相同的元素,则指标声明解可接受。

解决方案生成器(SolGen)

SolGen 主要由两部分组成:(1)表达式/句子存储和(2)进化器。

表达式/短语存储 (ExpStore)

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

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

Evolver

Evolver 负责组合表达式和语句来创建程序(或函数)来解决问题生成器创建的问题。 Evolver 通过三个步骤构建求解函数 (SolFunc)。 ? 检查输出

构建求解器函数后,将使用 Python 的 exec() 函数执行它以生成输出。检测器负责检查输出并接受或拒绝它。如果第一个结果被接受,则使用问题生成器生成更多与输入测试相同的不同大小的解函数。如果检测器通过了所有测试,则解决方案函数被声明为问题的解决方案。上述三个阶段构成一个渐进阶段。

英特尔自动算法生成器(AAD)演化算法框架:29个Python代码块,自动生成新算法

上表显示了问题集 A 中的呼叫者和接收者关系。例如,包含 SortDesc 函数的行显示 SortAsc 在 57% 的解决方案中调用 Max 函数,在 14% 的解决方案中调用 Min 函数,依此类推。 Min、Max 和 ReverseArr 函数不调用其他函数。所有其他函数都依赖于一个或多个函数来得出解决方案,这证明了函数组合的重要性。

英特尔自动算法生成器(AAD)演化算法框架:29个Python代码块,自动生成新算法

上表列出了三个问题组以及根据基本方法执行的步骤数,并将其与根据四种进化策略的性能进行了比较。

未来展望及应用说明

AAD也可用于编译程序。对于用 C、汇编甚至二进制编写的程序,此实例可以作为 AAD 的指针运行以生成 Python 代码(或等效语言)。这种方法类似于机器学习算法,仅通过观察另一个对象的行为来构建自己的行为。显然,本文中使用的Python代码可以被认为是“Python到Python”的翻译,因为不同的标识符对应于不同的Python实现。

AAD 不仅仅是一个过程合成器。它还可以用来获取机器内部的信息。使用调用者-调用者图和父子图捕获不同问题之间的内在关系。这些关系是AAD自己发现的,可以认为是不同功能之间联想记忆的表征,其形式类似于人脑的结构和机制。

由于AAD可以通过提出越来越多的问题来增加信息储备的扩展,因此在适当的控制机制的帮助下,可以引导系统获取大量的技能(算法)并自行构建信息表示。正如我们在孩子小的时候问很多问题和挑战一样,目的就是引导孩子获得很多技能和知识。

AAD 是一个用于综合复杂程序的不断发展的框架。它使用 Python 语言的基本子集作为语法结构。 AAD 允许您组合代码块来解决 29 个数组/向量问题,包括最大值、最小值和矩阵求逆等简单问题,以及排序和矩阵向量乘法等更具挑战性的问题。输入没有大小限制。

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

【摘要】Intel 研究人员提出了一种新的自动算法生成器(AAD),它采用进化算法框架,并使用 Python 语言的基本子集作为语法结构,可以生成 29 个数组/向量问题的代码块。连接并学习自动生成更复杂问题的解决方案。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门