6个版本
使用旧的Rust 2015
0.2.3 | 2019年3月3日 |
---|---|
0.2.2 | 2019年2月26日 |
0.2.0 | 2019年1月31日 |
0.1.1 | 2019年1月22日 |
#2249 in 算法
24 每月下载次数
50KB
1K SLoC
Aristeia
用Rust编写的进化计算库。
这个库能做什么?
Aristeia提供了遗传算法所需的通用逻辑,使您能够专注于特定用例的代码。
它仍处于早期阶段,因此预期API将发生变化,同时也会进行改进。
入门
创建一个新项目,并在cargo.toml文件中添加以下内容
[dependencies]
aristeia = "0.2.3"
在main.rs中,从以下内容开始
extern crate aristeia;
use aristeia::agent::Agent;
use aristeia::manager::create_manager;
use aristeia::fitness::ScoreError;
在上面的代码中,我们导入一个创建默认Manager对象的功能,该对象将运行遗传算法系统。我们导入Agent以便在运行后调查“最适应”的基因集合。我们还导入ScoreError,以便在定义我们的适应度函数时使用。
现在,在您的main()函数中,删除其中的默认代码,让我们添加创建和运行manager的代码
let mut manager = create_manager(fitness_function, 0);
manager.set_number_of_genes(5, true);
manager.run(1250);;
我们已经创建了一个新的manager,传入我们的适应度函数。我们在此示例中稍后定义此函数。我们还传入0作为第二个参数,这是用于额外数据的。在此示例中,我们不使用数据参数,但您可以查看此库中的某些示例,以了解数据可以如何使用。
我们还设置了每个代理应拥有的基因数量。第二个参数用于说明代理是否必须具有该数量的基因,或者如果未获得任何良好分数,则可以略有变化。但是,该“变化”功能尚未实现。
最后,我们运行系统,指定一个分数,种群中最高分的代理必须高于该分数才能完成运行。如果我们将该分数设置得太高,系统将无限期运行(直到您按Ctrl+C停止程序)。
运行完成后,我们将想要获取代理并查看它们有什么基因。在运行manager的代码下方添加以下内容
let agents = manager.get_population().get_agents();
为了完成main函数,我们想要查看得分最高的代理。添加以下内容
let mut viewing = 10;
for (score_index, agent) in population.get_agents().iter().rev() {
println!("Score: {}", score_index);
println!("{:?}", agent.get_genes());
viewing -= 1;
if viewing == 0 {
break;
}
}
所以最后一件事是添加适应度函数。我们只是想要一个快速示例,所以我们只是将基因做成'u8'(无符号8位整数),它们越高,得分就越高。
在main函数下方添加以下内容
fn fitness_function(agent: &Agent<u8>, _data: &u8) -> isize {
let mut score = 0;
for gene in agent.get_genes() {
score += *gene as isize;
}
score
}
现在运行您的代码,使用 cargo run
。
您将获得种群中的最高分数列表,以及每个分数对应的5个整数的集合,这代表它们的‘基因’。
请查看本库的示例目录。上述示例可以在 simplest.rs 中找到。
许可协议
Aristeia 在 Apache License,版本 2.0 下授权。
依赖项
~560–780KB
~10K SLoC