#gene #expressions #genetic #regression #symbolic

gep_toolkit

基因表达式编程工具包

5 个版本

0.2.3 2023年1月31日
0.2.2 2022年9月29日
0.2.1 2022年8月26日
0.2.0 2022年8月26日
0.1.0 2022年7月30日

#117模拟

每月 23 次下载

自定义许可证

42KB
920 代码行

GEP Toolkit

Rust 中基因表达式编程的实现。支持 SL-GEP(自学习基因表达式编程),请参阅本 README 文件底部的引用。

用法

在您的 Cargo.toml 文件中添加 GEP Toolkit 依赖项

[dependencies]
gep_toolkit = "0.2.3"

使用 KExpression 作为您的遗传种群染色体,并使用 k_expr.expression(ExpressionTreeType::RGEP) 来构建表达式树并计算它(目前不支持 GEP 和 PGEP)。

use gep_toolkit::operations::primitives::*;
use gep_toolkit::operations::op_set::PrimitiveOperationSet;
use gep_toolkit::k_expr::builder::KExpressions;
use gep_toolkit::k_expr::core::{ExpressionTreeType, KExpressionParams};

fn main() {
    let operations: Vec<PrimitiveOperation> = vec![
        PrimitiveOperation::Constant(Constant::CNeg1),
        PrimitiveOperation::Constant(Constant::C1),
        PrimitiveOperation::Constant(Constant::C2),
        PrimitiveOperation::Constant(Constant::C3),
        PrimitiveOperation::Constant(Constant::C10),
        PrimitiveOperation::Constant(Constant::C100),
        PrimitiveOperation::Constant(Constant::C1000),
        PrimitiveOperation::Modifier(Modifier::Sqr),
        PrimitiveOperation::Modifier(Modifier::Pow3),
        PrimitiveOperation::Modifier(Modifier::Sqrt),
        PrimitiveOperation::Modifier(Modifier::Log2),
        PrimitiveOperation::Modifier(Modifier::Log10),
        PrimitiveOperation::Modifier(Modifier::Sin),
        PrimitiveOperation::Modifier(Modifier::Cos),
        PrimitiveOperation::Modifier(Modifier::Tanh),
        PrimitiveOperation::Modifier(Modifier::Sigmoid),
        PrimitiveOperation::Operator(Operator::Plus),
        PrimitiveOperation::Operator(Operator::Minus),
        PrimitiveOperation::Operator(Operator::Multiply),
        PrimitiveOperation::Operator(Operator::Divide),
        PrimitiveOperation::Operator(Operator::Pow),
        PrimitiveOperation::Operator(Operator::Root),
        PrimitiveOperation::Operator(Operator::Log),
    ];
    
    let args_count = 2;
    let set = PrimitiveOperationSet::new(operations, args_count);
    let params = KExpressionParams {
        root_length: 5,
        sub_length: 10,
        subs_count: 3,
        // If true, sub expressions can use other sub expressions 
        reuse_sub_expr: true,
        ..KExpressionParams::default()
    };
    let ctx = KExpressions::new(set, params);

    let k_expr = ctx.new_k_expr();
    let root_expr = k_expr.expression(ExpressionTreeType::RGEP);

    let args = vec![1.0, 2.0];
    println!("{:?}", root_expr.compute_result(&args));
}

请注意,库旨在用于生成表达式树和计算它们。要运行模拟,您需要使用单独的 GA 库。请参阅下面的示例。

示例

待办事项

  • 保存/加载操作集和表达式
  • 支持 KExpression.mutate() 与 ADFs 和 SLEs 位置相关
  • 更简洁的 K-表达式显示格式
  • GEP 和 PGEP 表达式解析(目前仅支持 RGEP)
  • 支持不带参数的纯 ADFs
  • 支持限制主表达式中的原始操作的使用,以支持仅 ADFs 方法

参考

依赖项

~1.1–1.7MB
~39K SLoC