1个不稳定版本

0.1.4 2024年5月2日
0.1.3 2024年4月6日
0.1.2 2024年4月6日
0.1.1 2024年4月6日
0.1.0 2024年4月5日

374算法 中排名

Download history 96/week @ 2024-04-26 44/week @ 2024-05-03 1/week @ 2024-05-24 6/week @ 2024-06-28 44/week @ 2024-07-05

每月328次下载
用于 neuros

MIT许可协议

120KB
2K SLoC

Sefar

Sefar 是一个简单且全面的 Rust 进化优化算法库,完全使用安全代码编写。它通过其特性支持在顺序并行模式下进行连续二进制优化。在当前版本中,并行模式通过使用rayon库来并行执行目标函数评估(多线程)。

当前状态(开发中)

  1. Sefar 默认进行最小化。在最大化的情况下,目标函数 $f(X)$ 可以表示为 $-f(X)$。

  2. 在此版本中,Sefar 支持

  • 粒子群优化 (PSO);
  • 平衡优化器 (EO);
  • [] 修改的平衡优化器 (MEO);
  • 增长优化器 (GO).

重要

在当前版本中,二进制和并行优化仅针对平衡优化器(EO)和增长优化器(GO)实现。很快,这些功能也将适用于其他算法。

二进制优化

在当前版本中,二值化使用以下提供的S形函数执行

$S(x) = 1/(1 + e^{(-x)})$

在此上下文中,x代表一个“基因”,表示候选解X(“基因组”)在长度为d的搜索空间中的每个元素,其中 $X= {x_1, x_2, ..., x_d}$。

可以使用二进制功能执行二进制优化。

示例

  1. 在项目的 Cargo.Toml 文件中导入带有binary特征的Sefar

[dependencies]
sefar = {version = "0.1.3", features = ["binary"]}
  1. main.rs 文件
extern crate sefar;
use sefar::core::eoa::EOA;
use sefar::core::optimization_result::OptimizationResult;
use sefar::algos::go::{GOparams, GO};
use sefar::core::problem::Problem;

fn main() {

    println!("Binary optimization using Growth optimizer in Sefar crate:");
   
    go_f1_binary_test();
}

///
/// run the binary version of Growth Optimizer (Binary-GO).
/// 
fn go_f1_binary_test(){

    // Define the parameters of GO:
    let search_agents : usize = 20;
    let dim : usize = 10;
    let max_iterations : usize = 100;
    let lb = vec![0.0; dim];
    let ub = vec![1.0; dim];
    
    // Build the parameter struct:
    let settings : GOparams = GOparams::new(search_agents, dim, max_iterations, &lb, &ub);
    
    // Define the problem to optimize:
    let mut fo = F1{};
  
    // Build the optimizer:
    let mut algo : GO<F1> = GO::new(&settings, &mut fo);
    
    // Run the GO algorithm: 
    let result : OptimizationResult = algo.run();

    // Print the results:
    println!("The optimization results of Binary-GO : {}", result.to_string());

    // The results show something like :
    // Binary optimization using Growth optimizer in Sefar crate:
    // The optimization results of Binary-GO : Best-fitness : Some(0.0) 
    // ; Best-solution : Some(Genome { id: 22, genes: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], fitness: Some(0.0) }) 
    // ; Time : Some(3.326498ms) 
    // ; Err-report: None   
}

// Define the objective function to minimize. Here, the Sphere function is implemented.

///
/// F1 : Sphere benchmark function. 
/// Fi(X) = Sum(|X|)
/// where X = {x1, x2, ..... xd}, and 'd' is the problem dimension.
/// 
#[derive(Debug,Clone)]
pub struct F1{}

impl Problem for F1 {
    fn objectivefunction(&mut self, genome : &[f64])->f64 {         
       genome.iter().fold(0.0f64, |sum, x| sum +x)
    }
}

支持的功能

功能 指定
binary 使用S-Shape函数运行二进制优化(仅限EO & GO)
parallel 使用Rayon库在并行模式下运行优化(仅限EO & GO)
report 在每次迭代时显示优化过程的演变

依赖关系

~4.5MB
~81K SLoC