#遗传 #染色体 #算法 #遗传算法 #突变 #基因组 #交叉

genomic

一个用于实现遗传算法的小型库

2个不稳定版本

0.2.0 2023年8月17日
0.1.0 2023年8月16日

#2331算法

MIT 许可证

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