#遗传算法 #算法 #遗传 #进化 #构建块

genevo

genevo提供构建块,用于使用遗传算法(GA)进行优化和搜索问题的模拟。通过可定制和可扩展的方式执行遗传算法(GA)模拟

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 算法

Download history 2059/week @ 2024-03-14 1748/week @ 2024-03-21 2061/week @ 2024-03-28 1460/week @ 2024-04-04 2456/week @ 2024-04-11 2576/week @ 2024-04-18 2393/week @ 2024-04-25 1808/week @ 2024-05-02 1650/week @ 2024-05-09 2431/week @ 2024-05-16 2229/week @ 2024-05-23 2254/week @ 2024-05-30 1563/week @ 2024-06-06 2719/week @ 2024-06-13 2569/week @ 2024-06-20 1933/week @ 2024-06-27

9,057 每月下载量
用于 exilent

MIT/Apache

210KB
4.5K SLoC

genevo

Crates.io Docs.rs Linux Build Status Windows Build Status codevoc.io MIT/Apache Join the chat

genevo 提供构建块,用于使用 遗传算法 (GA) 进行优化和搜索问题的模拟。

genevo 的愿景是成为一个灵活且高度可扩展的框架,用于实现遗传算法应用。

genevo 使用 Rust 编写。库的API利用了许多特性和类型来模拟遗传算法领域。

文档

功能

该crate提供了遗传算法的默认实现,用于解决各种搜索和优化问题。

实现被分为构建块,所有构建块都由特性行表示。该crate提供了所有构建块的最常见实现。因此,它可以用于许多问题。

不过,如果需要为某个或某些构建块使用不同的实现,可以通过以更复杂和定制的方式实现任何特性行来扩展。

构建块(定义为特性行)包括

  • 模拟
  • 算法
  • 终止
  • 操作符
  • 种群
  • 表型和基因型
  • 适应度函数

模拟可以运行一个在循环中执行的算法。算法实现了循环每次迭代的操作步骤。提供的遗传算法实现实现了 Algorithm 特性,因此可以由提供的 Simulation 特性的实现 Simulator 执行。

Simulator 包含有关模拟的状态,并跟踪算法执行的统计信息,例如迭代次数和处理时间。

模拟运行直到满足终止条件。终止条件可以是一个单一的,例如最大迭代次数,或者多个终止条件的逻辑组合,例如最大迭代次数 OR 达到最小适应度值。当然 Termination 也是一个特质,你可以实现任何你能想到的终止条件。

算法可以利用执行算法不同阶段的操作符。例如,基本的遗传算法定义了阶段:选择、交叉、变异和接受。这些阶段通过适当的操作符执行:SelectionOpCrossoverOpMutationOpRecombinationOpReinsertionOp

这个crate为每个操作符提供了多种实现。因此,你可以尝试将不同的实现组合起来,以组成针对特定搜索或优化问题的最佳算法。现在你可能已经猜到了,定义的操作符也是特质,你可以根据你的问题实现这些操作符的最佳方式,并将它们插入到遗传算法提供的实现中。

遗传算法需要一个种群,它随着每次迭代而进化。一个种群包含一定数量的个体。每个个体代表一个可能的优化问题解的候选解决方案,其中最佳解是搜索的对象。这个crate提供了一个 PopulationBuilder 来构建基因组种群。要运行种群构建器,它需要一个 GenomeBuilder 特质的实现。一个 GenomeBuilder 定义了如何在种群中创建一个个体(或基因组)。

最后但也许最重要的是特质 PhenotypeGenotypeFitnessFunction。这些是定义优化问题域的特质。它们必须为遗传算法的每个应用单独实现。

关于构建块的讨论已经足够多了。给我一些具体的例子。查看示例文件夹中的示例,了解如何使用这个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