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 每月下载次数

Apache-2.0

50KB
1K SLoC

Aristeia

Build Status

用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