C/C++ 的并行遗传算法库

软件推荐 图书馆 C++ C
2021-10-27 01:17:04

我正在寻找可以并行运行的 C++ 遗传算法库,理想情况下可以扩展到几百个内核。据我了解,GA 几乎是令人尴尬的并行,所以我有点惊讶地发现我很难找到一个广泛使用的并行库。

C++ 中 GA 的标准似乎是galib它非常好,但大约是 20 年前制作的,建议使用PVM进行并行化,这在我的集群上不是一个选项。

到目前为止,我已经找到了 GAlib-mpi,它看起来是由一个在 galib 中添加了一些 MPI 代码的研究生制作的。我现在正在尝试。

我想知道:

  1. 还有其他一些我错过的标准库吗?
  2. 如果没有,有没有人对 GAlib-mpi 有很好的体验?

编辑:

我最终让 GAlib-mpi 工作,但对于未来的搜索者,我会提到我找到但没有尝试的另一个选项pgapack

考虑使用Open Beagle的人的注意事项:文档相当不完整(大约一半的页面上只有“待办事项”,我找不到使用 HPC 模块的真实示例),但有大量信息可通过谷歌集团雅虎集团

4个回答

您可以使用Open BEAGLE,它是使用最广泛的 进化计算 (EC) 框架之一,并且确实提供了用于并行适应度评估的主从模型。

Gagné、Christian 和 Marc Parizeau。Open BEAGLE:进化计算的新多功能 C++ 框架。 ” GECCO 最新论文。2002 年。

通用性:使用 Open BEAGLE,用户可以执行任何类型的 EC,只要它满足一些最低要求。必要条件是有一个个体群体,迭代地应用一系列进化操作。到目前为止,使用 Open BEAGLE 实现了两个专门的框架:遗传算法 (GA) 和遗传编程 (GP)。还计划在未来发布一个进化策略 (ES) 框架。用户可以采用任何这些专门的框架并进一步修改它们,以创建自己的进化算法的专门风格。

用户友好性:Open BEAGLE 提供了多种机制来提供用户友好的编程界面。例如,动态分配对象的内存管理通过使用引用计数和自动垃圾回收大大简化。

可移植性:Open BEAGLE 代码符合 C++ ANSI/ISO 3 标准。它需要标准模板库 (STL)(Musser 和 Saini,1996)。不对操作系统或硬件进行特定调用。

效率:为确保高效执行,特别关注关键代码部分的优化。完成了这些部分的详细执行配置文件。此外,Open BEAGLE 是用 C++ 编写的这一事实有助于其整体良好的性能。

鲁棒性:代码中嵌入了许多验证语句,以确保正确操作并在出现问题时通知用户。还实施了定期保存当前进化状态的稳健机制,以便能够自动重新启动中断的进化。

优雅:Open BEAGLE 的界面经过精心开发。在设计遵循良好 OO 和通用编程原则的连贯软件包方面投入了大量精力。此外,执行严格的编程规则以使 C++ 代码易于阅读、理解和修改。

Free Sourceness Open BEAGLE 的源代码是免费的,可在 GNU Lesser General Public License (LGPL) (Free Software Foundation Inc., 2000) 下获得。因此,它可以免费分发和修改。Open BEAGLE 可在网站 http://www.gel.ulaval.ca/~beagle上获得。

软件架构图

当我在法国写硕士论文时,我使用了 Sferes2,它也依赖 MPI 进行适应度评估并行化。与 Open BEAGLE 相比,它的功能更少,成熟度/文档记录也更少,但代码要短得多(SLOC:5K vs 40K for Open BEAGLE (1))并且组织良好。

(1) Mouret, JB. 和 Stéphane Doncieux。Sferes v2: Evolvin'in the multi-core world。 ” 进化计算 (CEC),2010 年 IEEE 大会。IEEE,2010:

这种思路将我们引向 Sferesv2 的以下主要目标:

  • 从头开始多核:从设计过程开始就包括多核优化
  • 保持最新和多目标:提供一些但经过精心挑选的“现代” EA 实现,尤其是多目标 EA (MOEA)
  • 基于现代 C++ 技术,既抽象又高效。

此外,我们设定了以下目标,可以用“框架应该是一个好的和简单的软件”来概括:

  • 可扩展:添加新算法应该很简单。
  • 简单:简单的实验(例如优化实际参数)应该易于设置并且需要最少的代码。
  • 把重点放在高效的实现上,而不是覆盖最多的算法。
  • 小:源代码尽可能短,让新用户快速掌握库,维护更容易。
  • 被测试:每个重要的特性都应该伴随一个单元测试。
  • 可移植到所有当前的 Unix 风格(尤其是 GNU/Linux 和 MacOSX);
  • 开源(与 GPL 兼容)。
  • 易于与当前现有代码交互(尤其是适应度函数)。

Sferesv主要类的UML类图:

Sferesv主要类的UML类图

尽管迟到了,但我发现提及 openGA 很重要。

OpenGA是一个 C++ 遗传算法库。这个库速度很快,它依赖于std::thread并行性。该库默认启用多线程。这个库是跨平台的,它可以由支持 C++11 的现代编译器编译。

OpenGA 支持单目标、NSGA-III 多目标和交互式问题模式。

这个库的主要焦点是用户的舒适度。它不需要您使用指针,它是大量模板化的,它允许您定义自己的遗传数据类型而不是强加一个向量。它还可以解决遗传编程问题。此外,它还具有 GA 辅助功能,可根据您提供的初始信息创建基本的自动代码模板以启动代码。

我在我的网站上用遗传算法(单目标和多目标)做了一些零碎的工作,用于路由优化、功能优化、排序网络等应用。

所有这些应用程序都是用 C++ 编写的,可以是简单的控制台应用程序,也可以是单窗口/对话框应用程序。它不是一个框架,但一段时间后实现开始呈现出相似性,例如交叉、变异、选择、适应度评估、约束处理、维护种群等的类/方法。

如果您只是想了解进化计算并且可以编码各种遗传算子,那么这些可能值得一试。随意下载这些,看看你的想法。随时欢迎评论和反馈!

http://www.technical-recipes.com/category/genetic-algorithms/