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:
2026-05-04 20:38:46 -06:00
parent 5bd8b571e7
commit b91c26d86e
4 changed files with 95 additions and 2 deletions
+78
View File
@@ -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
+7
View File
@@ -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 -1
View File
@@ -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
+9 -1
View File
@@ -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).