Skip to content

Latest commit

 

History

29 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Genetic Expression Programming generation library

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages