diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2a687fb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,78 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.1.0] — 2026-05-04 + +Initial release. + +### Core types and traits + +- `Direction`, `Objective`, `ObjectiveSpace` (with `as_minimization` direction + conversion). +- `Evaluation` with feasibility (`constraint_violation <= 0.0`). +- `Candidate`, `Population`, `OptimizationResult`. +- `type Rng = rand::rngs::StdRng` and `rng_from_seed` so no public trait is + generic over the RNG. +- `Problem`, `Optimizer

`, `Initializer`, `Variation`. + +### Pareto utilities + +- `pareto_compare`, `pareto_front`, `best_candidate`, + `non_dominated_sort` (Deb fast non-dominated sort), `crowding_distance`, + `ParetoArchive`, `das_dennis` (structured reference points for NSGA-III + and MOEA/D). + +### Operators + +- Real: `RealBounds`, `GaussianMutation`, `BoundedGaussianMutation`, + `SimulatedBinaryCrossover` (SBX), `PolynomialMutation`. +- Binary: `BitFlipMutation`. +- Permutation: `SwapMutation`. +- `CompositeVariation` pipeline (typically crossover → mutation). + +### Selection helpers + +- `select_random`, `tournament_select_single_objective`. + +### Reference algorithms + +- `RandomSearch` — sample-evaluate-keep baseline. +- `Paes` — small (1+1) Pareto Archived Evolution Strategy. +- `Nsga2` — canonical Pareto-based EA with crowding distance. +- `Nsga3` — many-objective NSGA-III with reference-point niching. +- `Spea2` — Strength Pareto Evolutionary Algorithm 2. +- `Moead` — decomposition-based MOEA/D with the Tchebycheff scalar. +- `DifferentialEvolution` — single-objective DE/rand/1/bin. + +### Metrics + +- `spacing` (Schott), `hypervolume_2d` (exact 2-D dominated hypervolume). + +### Examples + +- `random_search`, `toy_nsga2`, `custom_optimizer` — minimum-viable + walkthroughs. +- `benchmarks` — ZDT1 and Rastrigin reference runs. +- `compare` — multi-seed comparison harness running every applicable + algorithm on ZDT1 (2-obj), DTLZ2 (3-obj), and Rastrigin (single-obj), + reporting hypervolume, spacing, mean L2, front size, and wall time. +- `jiggly_tuning` — 4-objective NSGA-III tuning of the + [`jiggly`](https://github.com/swaits/jiggly) USB-mouse-jiggler firmware + with an a-posteriori weighted-decision step that picks one + recommendation off the Pareto front. + +### Optional features + +- `serde` — `Serialize` / `Deserialize` derives on the core data types. +- `parallel` — rayon-backed parallel population evaluation in + `RandomSearch`, `Nsga2`, and `DifferentialEvolution`. Seeded runs stay + bit-identical to serial mode. + +[Unreleased]: https://github.com/swaits/heuropt/compare/v0.1.0...HEAD +[0.1.0]: https://github.com/swaits/heuropt/releases/tag/v0.1.0 diff --git a/Cargo.toml b/Cargo.toml index 2a2d8d2..4cb8a7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,9 +2,16 @@ name = "heuropt" version = "0.1.0" edition = "2024" +rust-version = "1.85" +authors = ["Stephen Waits "] description = "A practical Rust toolkit for heuristic single-, multi-, and many-objective optimization." license = "MIT" readme = "README.md" +repository = "https://github.com/swaits/heuropt" +homepage = "https://github.com/swaits/heuropt" +documentation = "https://docs.rs/heuropt" +keywords = ["optimization", "evolutionary", "nsga", "pareto", "moead"] +categories = ["algorithms", "science", "mathematics", "simulation"] [features] default = [] diff --git a/LICENSE b/LICENSE index 1c20050..694cb77 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 Stephen Waits +Copyright (c) 2026 Stephen Waits Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 9dab3ca..eb4dcfe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # heuropt +[![Crates.io](https://img.shields.io/crates/v/heuropt.svg)](https://crates.io/crates/heuropt) +[![Documentation](https://docs.rs/heuropt/badge.svg)](https://docs.rs/heuropt) +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) + A practical Rust toolkit for implementing heuristic single-objective, multi-objective, and many-objective optimization algorithms. @@ -136,4 +140,8 @@ See `docs/heuropt_tech_design_spec.md` for the full design rationale. ## License -MIT. +MIT — see [LICENSE](LICENSE). + +## Changelog + +See [CHANGELOG.md](CHANGELOG.md).