gep_toolkit

Crates.iogep_toolkit
lib.rsgep_toolkit
version0.2.3
sourcesrc
created_at2022-07-30 17:37:56.286295
updated_at2023-01-31 21:28:25.503938
descriptionGene Expressions Programming toolkit
homepage
repositoryhttps://github.com/Defake/gep_toolkit
max_upload_size
id635651
size52,428
(Defake)

documentation

README

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:

[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).

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));
}

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

  • Saving/loading operation set and expressions

  • Support KExpression.mutate() with regard to ADFs and SLEs positions

  • More concise K-Expression display format

  • GEP and PGEP expressions parsing (only RGEP is supported currently)

  • Support pure ADFs without arguments

  • Support restricting usage of primitive operations in main expression to support only-ADFs approach

References

Commit count: 29

cargo fmt