我希望在我参与的运营研究项目中添加一些遗传算法。目前我们有一个程序可以帮助优化一些调度,我们希望以遗传算法的形式添加一些启发式算法。在c ++中有没有用于通用遗传编程/算法的好库?或者你会建议我只编写自己的代码吗?
我应该补充一点,虽然我不熟悉c ++,但我在c ++中进行这种数学优化工作还是比较新的,因为我以前合作的小组倾向于使用专有的优化包。
我们有一个相当计算密集的适应度函数来评估,我们有一个集群来运行它,因此非常需要并行代码。
c ++是一个很好的语言吗?如果没有,请推荐一些其他的,因为我愿意学习另一种语言,如果它让生活更轻松。
谢谢!
答案 0 :(得分:3)
我建议你自己滚动。 GP中90%的工作是编码基因型,如何操作,以及适合度计算。这些是针对每个不同问题/项目而改变的部分。实际的进化算法部分通常很简单。
有几个GP库(http://en.wikipedia.org/wiki/Symbolic_Regression#Implementations)。我会用这些作为例子和参考文献。
C ++是GP的不错选择,因为它们往往计算量很大。通常,适应度函数是瓶颈,所以至少要对这部分进行编译/优化是值得的。
答案 1 :(得分:1)
我使用GAUL
这是一个满足你想要的C库
(pthread / fork / openmp / mpi)
(各种交叉/变异功能)
(非GA优化:Hill-Climbing,N-M Simplex,模拟退火,禁忌,......)
为什么在有这么强大的工具时建立自己的库???
答案 2 :(得分:1)
我还没有亲自使用过,但是Age Layered Population Structure (ALPS)方法已经被用来产生人类竞争力的结果,并且已经被证明在粗糙的健身景观中找到最佳解决方案的几种流行方法。此外,该链接包含C ++ FTW中的源代码。
答案 3 :(得分:0)
我有类似的问题。我曾经遇到过一个复杂的问题,因此不希望根据固定长度的矢量来定义解决方案。即使是可变长度的向量也没有吸引力。大多数库都集中在成本函数计算便宜的情况下,这与我的问题不符。缺乏并行性是他们的另一个陷阱。期望用户分配内存供库使用,这增加了伤害。我的情况更加复杂,因为大多数库在评估之前都会检查非线性条件。同时,我需要根据评估结果检查评估期间或评估之后的非线性条件。当我需要评估解决方案以计算其成本,然后不得不重新计算解决方案以提供解决方案时,这也是不希望的。在大多数情况下,我不得不编写成本函数两次。一次用于Google Analytics(分析),一次用于演示。
面对所有这些问题,我最终设计了自己的openGA库,该库现已成熟。
GA assist
功能可帮助您从提供的信息中生成C ++代码库。如果这些功能符合您的需求,建议您阅读用户手册和openGA示例。
相关出版物的读者数量和引文数量以及github上最喜欢的标记都在增加,其使用量也在不断增长。
答案 4 :(得分:-1)
我建议您查看一下matlab优化工具包 - 它附带GAs out of the box,您只需编写适应度函数(以及最终生成初始种群的函数)并且我相信matlab具有一些C ++互操作性所以你可以用C ++编写函数代码。我正在将它用于我的实验,一个非常好的功能是你可以获得开箱即用的各种图表。
这么说 - 如果你的目的是学习遗传算法你最好编码它,但如果你只是想运行实验,matlab和C ++(甚至只是matlab)是一个不错的选择。