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