#genetic #compile-time #evolution #genetic-algorithm #check #evolutionary #requirements

nightly meiosis

尽可能多的在编译时进行检查的进化算法库

2 个不稳定版本

0.1.0 2022年10月22日
0.0.0 2022年1月24日

#852算法

自定义许可证

215KB
4K SLoC

Meiosis

Docs Crates.io License Deps.rs Build Status Code Coverage Contributors

概述

当前状态

目前这个crate还处于早期阶段。特性需要nightly支持,API非常不稳定,任何东西都不应该被认为是不可变的。我还不知道在README中应该写什么。还应注意的是,我使用这个库来学习API设计,并深入研究进化算法 - 未来我还想处理神经进化。

目标

这个库的诞生源于这样一个事实,即许多现有的库没有利用编译时评估的不变量,导致底层代码必须不断验证这些迭代,从而降低了性能。

由于进化算法需要相当长的时间来进化,如果出现错误或运行时错误会非常令人烦恼。为了解决这个问题,这个库中的算法被编写成这样的方式,即大多数或所有组件都在编译时进行评估。如果这不可能实现,至少会有断言,这样任何问题都应该在进化过程中非常早地出现,而不是可能在几个小时之后。

达到编译时评估的方法包括使用状态机、尽可能使用数组以及进入主循环之前设置配置选项,这样可以在编译时消除任何分支,因为编译器应该希望注意到一旦设置,这些值就无法再更改。

组件

这个库中的组件被编写成这样的方式,即它们应该是与所有可用的使用它们的算法即插即用的。泛型参数与这些组件(例如选择、变异)结合使用应该使得Rust编译器能够推断出大多数或所有类型。

当然,如果您决定编写自己的算法,这些仍然可以自由使用。如果有您的要求,比如一个特质的签名更改,以使事情工作,请不要犹豫,提出问题!我很乐意看到更多我可能没有在设计API时考虑到的用例。

算法

本库中提供的算法大多没有相关的论文来描述它们的工作原理。我的主要目标是理解它们的功能,然后以相对简单的方式实现它们。结果是代码,希望它易于阅读和理解。

注释

特别感谢

我为我的项目命名很糟糕,所以感谢 Patrick Harden 提出了 Meiosis 这个名字。

这个crate的名字最初是在crates.io上由 Tim Byrne 注册的。非常感谢你转让所有权!

最初通过 Saltwater 项目相识,我想感谢 AndreiJulia 在原型设计阶段持续的支持。他们是我的“橡胶鸭”和关于“库用户希望看到什么”的样本量。

从以下crate中吸取了大量灵感,以解决某些问题,无论是算法、库布局还是示例。向这些crate的作者和贡献者表示衷心的感谢

如果你觉得我没有提到你,请给我留言或打开一个(机密的)问题。我得到的任何灵感和帮助都是这个库的一部分,就像我自己的一样

依赖项

~305KB