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

C ++中GA的标准似乎是galib。它相当不错,但是大约在20年前就完成了,建议使用PVM进行并行化,这在我的集群上不是一个选择。一位研究生,他向galib添加了一些MPI代码。我现在正在尝试。

我想知道:


是否还有其他我缺少的标准库?
如果没有,有人对GAlib-mpi有很好的经验吗?

编辑:

我最终使GAlib-mpi可以工作,但是对于以后的搜索者,我会提到另一种选择我发现了pgapack,但没有尝试。

考虑使用Open Beagle的人员的注意事项:
文档还很不完整(大约有一半的页面只有“ TODO”字样,而我不能)找不到使用HPC模块的真实示例),但是Google Group和Yahoo Group可以提供大量信息。

评论

用于GA引擎或库接口的C ++?

主要是接口,因为我将使用C ++进行编程。

我知道的最有据可查的EC框架是ECJ,但它是Java(也许C ++接口存在于某处?)。

开源?自由?什么预算?

对于我来说,理想的是免费/开源。

#1 楼

您可以使用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的界面是精心开发的。在设计遵循一致的面向对象和通用编程原理的一致软件包方面进行了巨大的努力。此外,
强制执行严格的编程规则,以使C ++代码易于阅读,理解和修改。

自由源代码Open BEAGLE的源代码是免费的,可以在GNU次通用公共许可证(LGPL)(自由软件,Foundation Inc.,2000年)。因此可以免费分发和修改
。 Web上的Open BEAGLE可在
http://www.gel.ulaval.ca/~beagle。




#2 楼

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

(1 )Mouret,JB。和StéphaneDoncieux。 “ Sferes v2:在多核世界中发展”。进化计算(CEC),2010年IEEE大会。 IEEE,2010年:


这种思路将我们带到了实现Sferesv2的以下主要目标:



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

另外,我们设定了以下目标,这些目标可以通过“
”框架进行概括。应该是一个好的简单软件”:


可扩展:添加新算法应该很简单。
要简单:简单实验(例如优化真实参数)应该设置简单,所需的代码量最少。
将重点放在有效的实现上,而不是覆盖最多的算法。
小:源代码应该是尽可能短的时间,以使新用户可以快速掌握库并简化维护。
经过测试:每个重要功能都应附带单元测试。
可移植到所有当前版本Unix风格(尤其是GNU / Linux和MacOSX);
是开源的(与GPL兼容)。
易于与当前现有代码进行交互(尤其是对健身功能而言)。



Sferesv主要类的UML类图:



#3 楼

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

OpenGA是C ++遗传算法库。该库非常快,它依赖于std::thread进行并行处理。该库默认情况下启用多线程。
该库是跨平台的,可以由支持C ++ 11的现代编译器进行编译。

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

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

#4 楼

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

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

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

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