2个不稳定版本
0.2.0 | 2023年8月17日 |
---|---|
0.1.0 | 2023年8月16日 |
#2331 在 算法 中
29KB
549 行
genomic.rs
一个用于帮助在Rust中实现遗传算法的小型库。
此库定义了两个特性
Chromosome
代表单个可训练参数。为几个内置类型实现了Chromosome
特性,并且您可以在自己的类型上实现它。Genome
代表一组Chromosome
。
还提供了一些函数,特别是
mutate
,用于突变个体的基因组crossover
,在两个个体上执行交叉操作reproduce
,在两个个体上执行有性繁殖
通过声明性方式实现 Genome
特性
use genomic::prelude::*;
use genomic::chromosome::UniformCh;
pub struct Triple {
first: i32,
second: i8,
third: f32,
}
impl Genome for Triple {
fn mutate(&mut self, mutator: &mut Mutator<impl rand::Rng>) {
mutator
.chromosome(&mut self.first)
.chromosome(&mut self.second)
// For floats, we need to choose a method and bounds for mutating them:
.wrap_ch(UniformCh::new(self.third, 0.0, 1.0), &mut self.third);
}
fn crossover(&mut self, other: &mut Self, crossover: &mut Crossover<impl rand::Rng>) {
crossover
.chromosome(&mut self.first, &mut other.first)
.chromosome(&mut self.second, &mut other.second)
.chromosome(&mut self.third, &mut other.third);
}
fn size_hint(&self) -> usize {
// We have three chromosomes
3
}
}
let mut triple = Triple {
first: 0,
second: 0,
third: 0.0
};
genomic::mutate(
// The genome to mutate
&mut triple,
// The mutation rate - a value of 1.0 means that the chromosomes will be fully scrambled
1.0,
// An RNG
&mut rand::thread_rng()
);
依赖项
~305KB