Crates.io | gep_toolkit |
lib.rs | gep_toolkit |
version | 0.2.3 |
source | src |
created_at | 2022-07-30 17:37:56.286295 |
updated_at | 2023-01-31 21:28:25.503938 |
description | Gene Expressions Programming toolkit |
homepage | |
repository | https://github.com/Defake/gep_toolkit |
max_upload_size | |
id | 635651 |
size | 52,428 |
Implementation of Gene Expression Programming in Rust. Supports SL-GEP (Self-Learning Gene Expression Programming), check out references at the bottom of this README.
Add the GEP Toolkit dependency in your Cargo.toml file:
[dependencies]
gep_toolkit = "0.2.3"
Use KExpression
s 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.
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