我有过类似的问题。我曾经遇到过一个复杂的问题,并且不希望根据固定长度向量定义解决方案。即使是可变长度的向量看起来也没有吸引力。大多数图书馆都专注于成本函数计算成本低的情况,这与我的问题不匹配。缺乏并行性是他们的另一个陷阱。期望用户分配内存供库使用是雪上加霜。我的案例更加复杂,因为大多数库在评估之前都会检查非线性条件。同时,我需要根据评估结果在评估期间或评估之后检查非线性条件。当我需要评估解决方案以计算其成本然后我不得不重新计算解决方案以呈现它时,这也是不可取的。在大多数情况下,我不得不写两次成本函数。一次用于 GA,一次用于演示。
遇到所有这些问题后,我最终设计了自己的openGA库,该库现已成熟。
- 该库基于 C++ 并与免费的 Mozilla Public License 2.0 一起分发。它保证使用这个库不会限制你的项目,它可以免费用于商业或非商业目的,无需征得任何许可。在这个意义上,并不是所有的图书馆都是透明的。
- 它支持单目标、多目标(NSGA-III)和交互式遗传算法(IGA)三种模式。
- 该解决方案不强制要求为向量。它可以是具有任何定制设计的任何结构,包含任何可变长度的可选值。此功能使该库适用于遗传编程 (GP) 应用程序。
- 使用 C++11。模板功能允许解决方案结构设计的灵活性。
- 标准库足以使用这个库。除此之外没有依赖。为了方便使用,整个库也是一个单独的头文件。
- 除非您将其关闭,否则该库默认支持并行性。如果你有一个 N 核 CPU,线程数默认设置为 N。您可以更改设置。您还可以设置解决方案评估是在线程之间平均分配还是分配给已完成其工作且当前空闲的任何线程。
- 解决方案评估与最终成本的计算是分开的。这意味着您的评估功能可以模拟系统并保留大量信息。您的成本函数稍后会被调用,并根据评估报告成本。而您的评估结果将保留供用户以后使用。您无需再次重新计算。
- 您可以在评估期间随时拒绝解决方案。不浪费时间。实际上,评估和约束检查是集成在一起的。
- 该
GA assist
功能可帮助您根据您提供的信息生成 C++ 代码库。
如果这些功能符合您的需要,我建议您查看用户手册和 openGA 的示例。
相关出版物的读者和引用数量以及其 github 最喜欢的标记正在增加,并且其使用量不断增长。