GEP Toolkit

Implementation of Gene Expression Programming in Rust. Supports SL-GEP (Self-Learning Gene Expression Programming), check out references at the bottom of this README.

Usage

Add the GEP Toolkit dependency in your Cargo.toml file:

toml [dependencies] gep_toolkit = "0.2.3"

Use KExpressions as your genetic population chromosomes, and use k_expr.expression(ExpressionTreeType::RGEP) to build an expression tree and compute it (GEP and PGEP are not supported yet).

```rust use geptoolkit::operations::primitives::*; use geptoolkit::operations::opset::PrimitiveOperationSet; use geptoolkit::kexpr::builder::KExpressions; use geptoolkit::k_expr::core::{ExpressionTreeType, KExpressionParams};

fn main() { let operations: Vec = 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));

} ```

Note that the library is intended for expression trees generation and computing them. In order to run a simulation, you will need to use a separate GA library. Check out the examples below.

Examples

TODO

References