diff --git a/README.md b/README.md index 6d2d16ea..98b909f7 100644 --- a/README.md +++ b/README.md @@ -82,8 +82,8 @@ lgp run iris_baseline Run the standalone Rust examples directly with cargo: ```bash -cargo run -p lgp --example cart_pole --features gym -cargo run -p lgp --example iris_classification +cargo run -p lgp-core --example cart_pole --features gym +cargo run -p lgp-core --example iris_classification ``` ## CLI Reference @@ -226,7 +226,7 @@ RUST_LOG=lgp::core=trace,lgp=info lgp run iris_baseline | Package | Description | |---------|-------------| -| [lgp](crates/lgp/README.md) | Core library — traits, evolutionary engine, built-in problems | +| [lgp-core](crates/lgp/README.md) | Core library — traits, evolutionary engine, built-in problems | | [lgp](crates/lgp-cli/README.md) | CLI binary for running experiments, search, and analysis | ## Extending the Framework diff --git a/crates/lgp-cli/README.md b/crates/lgp-cli/README.md index 859afabd..dae76a6e 100644 --- a/crates/lgp-cli/README.md +++ b/crates/lgp-cli/README.md @@ -50,11 +50,6 @@ lgp analyze # Run full pipeline (search -> run -> analyze) lgp experiment iris_baseline --iterations 10 -# Run a Rust API example -lgp example cart_pole - -# List available examples -lgp example --list ``` ## Global Options @@ -113,14 +108,6 @@ Run end-to-end pipeline: search -> run -> analyze. | `--n-threads ` | Search threads (default: 4) | | `--median-trials ` | Runs for median (default: 10) | -### `lgp example ` - -Runs a Rust API example from the `examples/` directory. - -| Option | Description | -|--------|-------------| -| `--list` | List available examples | - ## Available Experiments | Experiment | Description | diff --git a/crates/lgp/README.md b/crates/lgp/README.md index 9594c190..1e94f007 100644 --- a/crates/lgp/README.md +++ b/crates/lgp/README.md @@ -2,7 +2,7 @@ Core Rust library for Linear Genetic Programming. -[![Crates.io](https://img.shields.io/crates/v/lgp.svg)](https://crates.io/crates/lgp) +[![Crates.io](https://img.shields.io/crates/v/lgp-core.svg)](https://crates.io/crates/lgp-core) [![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](../../LICENSE) ## Overview @@ -15,14 +15,14 @@ Add to your `Cargo.toml`: ```toml [dependencies] -lgp = "1.3" +lgp-core = "1.6" ``` To enable OpenAI Gym environment support: ```toml [dependencies] -lgp = { version = "1.3", features = ["gym"] } +lgp-core = { version = "1.6", features = ["gym"] } ``` ## Core Traits @@ -48,22 +48,52 @@ The framework is built around these key traits: ## Quick Example ```rust -use lgp::core::engines::core_engine::CoreEngine; -use lgp::problems::iris::IrisLgp; +use itertools::Itertools; +use lgp::core::engines::core_engine::HyperParametersBuilder; +use lgp::core::engines::status_engine::{Status, StatusEngine}; +use lgp::core::instruction::InstructionGeneratorParametersBuilder; +use lgp::core::program::ProgramGeneratorParametersBuilder; +use lgp::problems::iris::IrisEngine; fn main() { - // Configure and run an Iris classification experiment - let engine = CoreEngine::::builder() - .n_generations(100) - .n_individuals(100) + let instruction_parameters = InstructionGeneratorParametersBuilder::default() + .n_actions(3) + .n_inputs(4) + .n_extras(2) + .external_factor(1.0) .build() .unwrap(); - engine.run(); + let program_parameters = ProgramGeneratorParametersBuilder::default() + .max_instructions(50) + .instruction_generator_parameters(instruction_parameters) + .build() + .unwrap(); + + let parameters = HyperParametersBuilder::::default() + .program_parameters(program_parameters) + .population_size(100) + .n_generations(50) + .n_trials(1) + .mutation_percent(0.5) + .crossover_percent(0.5) + .gap(0.5) + .default_fitness(0.0) + .build() + .unwrap(); + + let populations: Vec<_> = parameters + .build_engine() + .take(parameters.n_generations) + .collect_vec(); + + let best = populations.last().unwrap().first().unwrap(); + let accuracy = (StatusEngine::get_fitness(best) / 150.0) * 100.0; + println!("Best accuracy: {accuracy:.1}%"); } ``` -See the [examples](../../examples/) directory and [extension guide](../../skills/lgp-experiment/SKILL.md) for more. +See the [examples](examples/) directory and [extension guide](../../skills/lgp-experiment/SKILL.md) for more. ## Features diff --git a/crates/lgp/examples/cart_pole.rs b/crates/lgp/examples/cart_pole.rs index b5066328..c99024ea 100644 --- a/crates/lgp/examples/cart_pole.rs +++ b/crates/lgp/examples/cart_pole.rs @@ -3,7 +3,7 @@ //! This example demonstrates how to use the LGP framework to evolve programs //! that can balance a pole on a cart (the classic CartPole control problem). //! -//! Run with: `cargo run -p lgp --example cart_pole --features gym` +//! Run with: `cargo run -p lgp-core --example cart_pole --features gym` use itertools::Itertools; diff --git a/crates/lgp/examples/iris_classification.rs b/crates/lgp/examples/iris_classification.rs index 3e13cac3..156b90a0 100644 --- a/crates/lgp/examples/iris_classification.rs +++ b/crates/lgp/examples/iris_classification.rs @@ -3,7 +3,7 @@ //! This example demonstrates how to use the LGP framework for a classification task //! using the classic Iris flower dataset. //! -//! Run with: `cargo run -p lgp --example iris_classification` +//! Run with: `cargo run -p lgp-core --example iris_classification` use itertools::Itertools;