1 个不稳定版本
0.1.3 | 2020年2月11日 |
---|
#423 in 科学
160KB
1K SLoC
GRACO
广义Rust蚁群优化
警告:这是一个用于探索图的概率算法。运行参数非常重要,选择不同的参数可能不会导致相同的解决方案。即使运行相同的参数两次也可能不会得到相同的结果!
用法
- 如果您的平台有可用的二进制文件,请下载。如果没有,请访问构建部分。
- 从终端/命令提示符执行。使用
-h
标志显示帮助 - 将环境变量
RUST_LOG
设置为info
以显示发生的迭代,或在调试时设置为debug
请参阅帮助以了解每个参数的详细信息。
定义图
必须使用以下结构定义图:NODE_1 NODE_2 EDGE_WEIGHT
,其中节点是没有空格的字符字符串,边权重是浮点值。每个项目之间正好有一个空格。虽然这个权重可能是负数,但请注意ACO将最小化边的总权重。
示例
使用seed
参数
为了帮助结果的再现性,可以指定伪随机数生成器的种子。
然而,如果工具在多个CPU上运行,则无法保证每次都会以相同的方式工作,因为线程的生成顺序无法保证。[链接] 此代码尝试帮助操作系统对这些线程进行排序,但它将取决于计算机在任一时刻的运行情况。
在一个示例情况下,使用相同的参数和种子进行了三次连续运行,返回了最优路径8.1。但是,使用带有--cpus
标志设置为7(在8核机器上)进行了另一次运行,返回了一次坏路径(8.9)、两次次优路径(8.2)和三次最优路径。
有用的运行
chris@linux-fgdx ~/Workspace/rbin/graco issue-3 ●✚ RUST_LOG=graco=info cargo run -- -v complete_graph.txt --wander 0.15 --ants 10 -i 100 --seed 4580147489518812583 --cpus 1
Finished dev [unoptimized + debuginfo] target(s) in 0.09s
Running `target/debug/graco -v complete_graph.txt --wander 0.15 --ants 10 -i 100 --seed 4580147489518812583 --cpus 1`
[2019-05-21T22:24:16Z INFO graco::io] Loaded graph from `"complete_graph.txt"`
[2019-05-21T22:24:16Z INFO graco::colony] Seed: 4580147489518812583
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 1
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 2
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 3
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 4
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 5
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 6
[2019-05-21T22:24:16Z INFO graco::colony] Completed iteration 7
[2019-05-21T22:24:16Z INFO graco::colony] Stagnation reached
iterations: 8
weight: 8.1
path: ["S", "A", "D", "B", "C"]
chris@linux-fgdx ~/Workspace/rbin/graco issue-3 ●✚
概率问题
在这里,我们连续三次运行相同的程序,具有完全相同的参数,但我们发现三个不同的解决方案!
以下,我们让10只蚂蚁以0.15的概率在100次迭代中漫游,设置蒸发率为0.2。
chris@linux-fgdx ~/Workspace/rbin/graco master ● RUST_LOG=graco=info cargo run -- -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2
Finished dev [unoptimized + debuginfo] target(s) in 0.07s
Running `target/debug/graco -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2`
[2019-05-20T21:57:49Z INFO graco] Running on 8 CPUs
[2019-05-20T21:57:49Z INFO graco::io] Loaded graph from `"complete_graph.txt"`
[2019-05-20T21:57:49Z INFO graco::colony] Completed iteration 1
[2019-05-20T21:57:49Z INFO graco::colony] Completed iteration 2
[2019-05-20T21:57:49Z INFO graco::colony] Completed iteration 3
[2019-05-20T21:57:49Z INFO graco::colony] Stagnation reached
iterations: 4
weight: 9.8
path: ["S", "C", "A", "B", "D"]
chris@linux-fgdx ~/Workspace/rbin/graco master ● RUST_LOG=graco=info cargo run -- -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target/debug/graco -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2`
[2019-05-20T21:57:53Z INFO graco] Running on 8 CPUs
[2019-05-20T21:57:53Z INFO graco::io] Loaded graph from `"complete_graph.txt"`
[2019-05-20T21:57:53Z INFO graco::colony] Completed iteration 1
[2019-05-20T21:57:53Z INFO graco::colony] Completed iteration 2
[2019-05-20T21:57:53Z INFO graco::colony] Completed iteration 3
[2019-05-20T21:57:53Z INFO graco::colony] Stagnation reached
iterations: 4
weight: 9.7
path: ["S", "B", "A", "C", "D"]
chris@linux-fgdx ~/Workspace/rbin/graco master ● RUST_LOG=graco=info cargo run -- -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2
Finished dev [unoptimized + debuginfo] target(s) in 0.09s
Running `target/debug/graco -v complete_graph.txt --wander 0.15 --ants 10 --density 3 -i 100 -e 0.2`
[2019-05-20T21:57:54Z INFO graco] Running on 8 CPUs
[2019-05-20T21:57:54Z INFO graco::io] Loaded graph from `"complete_graph.txt"`
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 1
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 2
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 3
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 4
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 5
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 6
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 7
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 8
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 9
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 10
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 11
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 12
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 13
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 14
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 15
[2019-05-20T21:57:54Z INFO graco::colony] Completed iteration 16
[2019-05-20T21:57:54Z INFO graco::colony] Stagnation reached
iterations: 17
weight: 8.1
path: ["S", "A", "D", "B", "C"]
chris@linux-fgdx ~/Workspace/rbin/graco master ●
构建
点图
在详细模式下运行时,信息素图将被输出为.dot
文件,可以通过graphviz将其转换为图像。
依赖关系
~7–17MB
~190K SLoC