6 个版本

使用旧的 Rust 2015

0.3.2 2016年8月26日
0.3.1 2016年8月25日
0.2.0 2016年7月27日
0.1.1 2016年7月24日

#305值格式化

Download history 11775/week @ 2024-03-14 7997/week @ 2024-03-21 9401/week @ 2024-03-28 6873/week @ 2024-04-04 12355/week @ 2024-04-11 8829/week @ 2024-04-18 13189/week @ 2024-04-25 9774/week @ 2024-05-02 16485/week @ 2024-05-09 14196/week @ 2024-05-16 8695/week @ 2024-05-23 16093/week @ 2024-05-30 15439/week @ 2024-06-06 11474/week @ 2024-06-13 10910/week @ 2024-06-20 6206/week @ 2024-06-27

48,539 每月下载量
用于 5 包(3 个直接使用)

Apache-2.0

8KB
69

Rust 随机选择

根据权重/概率随机选择样本。

优势

  • 对于所有权重都均匀分布的情况,具有良好的多样性(与轮盘赌选择算法相比)
  • 速度极快:O(n)(轮盘赌选择算法:O(n * log n))
  • 内存使用:O(n)
  • 权重的总和不必为 1.0,但不能溢出

此算法基于随机均匀抽样算法。

应用

  • 进化算法:通过其适应度 fi 选择 n 个最合适的种群
  • 蒙特卡洛定位:通过其权重 w 重新采样 n 个粒子

使用方法

将此添加到您的 Cargo.toml

[dependencies]
random_choice = "*"

示例

默认方式

extern crate random_choice;
use self::random_choice::random_choice;

fn main() {
    let mut samples = vec!["hi", "this", "is", "a", "test!"];
    let weights: Vec<f64> = vec![5.6, 7.8, 9.7, 1.1, 2.0];

    let number_choices = 100;
    let choices = random_choice().random_choice_f64(&samples, &weights, number_choices);

    for choice in choices {
        print!("{}, ", choice);
    }
}

使用自定义种子

extern crate rand;
extern crate random_choice;
use random_choice::RandomChoice;
use rand::SeedableRng;

fn main() {
    let mut samples = vec!["hi", "this", "is", "a", "test!"];
    let weights: Vec<f64> = vec![5.6, 7.8, 9.7, 1.1, 2.0];

    let rng = rand::StdRng::from_seed(&[5000, 44, 55, 199]);

    let mut random_choice = RandomChoice::new(rng);
    let number_choices = 100;
    let choices = random_choice.random_choice_f64(&mut samples, &weights, number_choices);

    for choice in choices {
        print!("{}, ", choice);
    }
}

依赖关系

~315–540KB