chore(release): prepare v0.1.0 — Cargo metadata, CHANGELOG, README polish
- Cargo.toml: add `repository`, `homepage`, `documentation`, `keywords`, `categories`, `authors`, and `rust-version = "1.85"` (the version that stabilized edition 2024). - CHANGELOG.md: new file in Keep-a-Changelog format with the full v0.1.0 inventory (core, traits, pareto utilities, operators, algorithms, metrics, examples, and the `serde`/`parallel` features). - README.md: add crates.io / docs.rs / license badges and a Changelog link. Pre-release verification (all clean): - cargo build (default + --features parallel) - cargo test (default, parallel, serde, --all-features) — 111 lib + 3 doc tests pass under each. - cargo clippy --all-targets --all-features -- -D warnings - cargo doc --no-deps - cargo package --no-verify → 57 files, 261 KB
This commit is contained in:
@@ -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<D>`, `Population<D>`, `OptimizationResult<D>`.
|
||||
- `type Rng = rand::rngs::StdRng` and `rng_from_seed` so no public trait is
|
||||
generic over the RNG.
|
||||
- `Problem`, `Optimizer<P>`, `Initializer<D>`, `Variation<D>`.
|
||||
|
||||
### Pareto utilities
|
||||
|
||||
- `pareto_compare`, `pareto_front`, `best_candidate`,
|
||||
`non_dominated_sort` (Deb fast non-dominated sort), `crowding_distance`,
|
||||
`ParetoArchive<D>`, `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
|
||||
@@ -2,9 +2,16 @@
|
||||
name = "heuropt"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
rust-version = "1.85"
|
||||
authors = ["Stephen Waits <steve@waits.net>"]
|
||||
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 = []
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Stephen Waits
|
||||
Copyright (c) 2026 Stephen Waits <steve@waits.net>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# heuropt
|
||||
|
||||
[](https://crates.io/crates/heuropt)
|
||||
[](https://docs.rs/heuropt)
|
||||
[](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).
|
||||
|
||||
Reference in New Issue
Block a user