12个版本 (6个破坏性)
0.7.1 | 2022年3月13日 |
---|---|
0.7.0 | 2021年11月7日 |
0.6.0 | 2021年11月7日 |
0.5.0 | 2019年11月10日 |
0.1.2 | 2017年11月7日 |
#321 in 算法
9,057 每月下载量
用于 exilent
210KB
4.5K SLoC
genevo
genevo 提供构建块,用于使用 遗传算法 (GA) 进行优化和搜索问题的模拟。
genevo 的愿景是成为一个灵活且高度可扩展的框架,用于实现遗传算法应用。
genevo 使用 Rust 编写。库的API利用了许多特性和类型来模拟遗传算法领域。
功能
该crate提供了遗传算法的默认实现,用于解决各种搜索和优化问题。
实现被分为构建块,所有构建块都由特性行表示。该crate提供了所有构建块的最常见实现。因此,它可以用于许多问题。
不过,如果需要为某个或某些构建块使用不同的实现,可以通过以更复杂和定制的方式实现任何特性行来扩展。
构建块(定义为特性行)包括
- 模拟
- 算法
- 终止
- 操作符
- 种群
- 表型和基因型
- 适应度函数
模拟可以运行一个在循环中执行的算法。算法实现了循环每次迭代的操作步骤。提供的遗传算法实现实现了 Algorithm
特性,因此可以由提供的 Simulation
特性的实现 Simulator
执行。
Simulator
包含有关模拟的状态,并跟踪算法执行的统计信息,例如迭代次数和处理时间。
模拟运行直到满足终止条件。终止条件可以是一个单一的,例如最大迭代次数,或者多个终止条件的逻辑组合,例如最大迭代次数 OR 达到最小适应度值。当然 Termination
也是一个特质,你可以实现任何你能想到的终止条件。
算法可以利用执行算法不同阶段的操作符。例如,基本的遗传算法定义了阶段:选择、交叉、变异和接受。这些阶段通过适当的操作符执行:SelectionOp
、CrossoverOp
、MutationOp
、RecombinationOp
和 ReinsertionOp
。
这个crate为每个操作符提供了多种实现。因此,你可以尝试将不同的实现组合起来,以组成针对特定搜索或优化问题的最佳算法。现在你可能已经猜到了,定义的操作符也是特质,你可以根据你的问题实现这些操作符的最佳方式,并将它们插入到遗传算法提供的实现中。
遗传算法需要一个种群,它随着每次迭代而进化。一个种群包含一定数量的个体。每个个体代表一个可能的优化问题解的候选解决方案,其中最佳解是搜索的对象。这个crate提供了一个 PopulationBuilder
来构建基因组种群。要运行种群构建器,它需要一个 GenomeBuilder
特质的实现。一个 GenomeBuilder
定义了如何在种群中创建一个个体(或基因组)。
最后但也许最重要的是特质 Phenotype
、Genotype
和 FitnessFunction
。这些是定义优化问题域的特质。它们必须为遗传算法的每个应用单独实现。
关于构建块的讨论已经足够多了。给我一些具体的例子。查看示例文件夹中的示例,了解如何使用这个crate
用法
将此添加到你的 Cargo.toml
[dependencies]
genevo = "0.7"
Crate功能
genevo
通过可选crate功能提供用作基因型的额外数据类型
fixedbitset
:提供Fixedbitset
用作基因型Smallvec
:提供Smallvec
用作基因型
从版本0.7.0起 genevo
支持 wasm 目标。要使用 genevo
为目标 wasm32-unknown-unknown
启用crate功能 wasm-bindgen
。注意:在wasm32目标上禁用了多线程(使用 rayon
实现)!
[dependencies]
genevo = { version = "0.7", features = ["wasm-bindgen"] }
参考
我开始这个项目主要是为了学习遗传算法(GAs)。在这个过程中,我搜索了很多关于GA的信息。以下是我在寻找最有用的GA信息时找到的链接。
[JFGA]: Jeremy Fisher: Genetic Algorithms
[OBI98]: Marek Obitko: Genetic Algorithms Tutorial
[GEAT]: GEATbx: 进化算法
[IGAYT]: Noureddin Sadawi: 遗传算法的实际介绍
[CT9YT]: 编程列车:9: 遗传算法 - 代码的本质
[BT95]: Tobias Blickle, Lothar Thiele, 1995: 遗传算法中使用的选择方案的比较。
[RRCGH]: StefanoD: Rust_Random_Choice Rust 库。
[TSP95]: TSPLIB95: TSP(及其相关问题)的示例实例库
版权所有 © 2017-2019, Innoave.com 和贡献者
依赖关系
~1.3–2.3MB
~39K SLoC