fx-durable-ga
A durable, auditable genetic algorithm optimization library built on PostgreSQL.
What is this?
fx-durable-ga is designed for long-running genetic algorithm optimizations where durability and auditability matter more than framework speed. It's built for scenarios where fitness evaluations are expensive (seconds to hours) and you need:
- Crash recovery: Resume optimizations exactly where they left off
- Full audit trails: Every evaluation, generation, and decision is recorded
- Concurrent execution: Multiple workers can contribute to the same optimization
When to use
Well suited for:
- AI model hyperparameter optimization
- Neural architecture search
- Feature selection for ML models
- Any optimization where evaluation takes much longer than the GA framework overhead and where parameters can be represented as discrete numbers.
Not ideal for:
- Fast, in-memory optimizations (use traditional GA libraries)
- Real-time applications requiring sub-second responses
How does it work?
The library uses PostgreSQL for both storage and coordination:
- Durable state: All populations, genotypes, and evaluations persist in the database
- Event-driven: Optimizations progress through database events, enabling crash recovery
- Deduplication: Identical genomes are never evaluated twice for the same request
- Smart initialization: Latin Hypercube Sampling for better space coverage
- Fitness-based termination: Automatic stopping when target fitness thresholds are reached
Network latency to the database is the primary overhead, but this is negligible when fitness evaluations take seconds or longer.
Quick start
use ;
use BoxFuture;
// 2. Implement genetic encoding
// 3. Implement fitness evaluation
;
// 4. Start optimization
let service = bootstrap.await?
..await?
.build;
service.new_optimization_request.await?;
Documentation and examples
- API documentation: https://docs.rs/fx-durable-ga/0.1.5/fx_durable_ga/index.html or run
cargo doc --open - Examples:
examples/point_search.rs- basic exampleexamples/regression_model.rs- hyperparameter optimization for a regression model
Migrations
Run migrations using the migrator: https://docs.rs/fx-durable-ga/0.1.5/fx_durable_ga/migrations/fn.run_migrations.html
You may also need to run migrations for
- fx-mq-jobs: https://docs.rs/fx-event-bus/0.1.7/fx_event_bus/fn.run_migrations.html
- fx-event-bus: https://docs.rs/fx-mq-jobs/0.1.8/fx_mq_jobs/fn.run_migrations.html See examples for more detail.
Running migrations for development
Running cargo sqlx prepare may require setting search path options for the DATABASE_URL variable:
DATABASE_URL="postgres://postgres:postgres@localhost:5432/fx-durable-ga?options=-c%20search_path%3Dfx_mq_jobs%2Cfx_event_bus%2Cfx_durable_ga"
Keeping the search path parameters may however make tests fail, so some juggling is currently required.
Contributing
Contributions are welcome! Please feel free to submit pull requests for bug fixes, improvements, or new features.