Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38dfeafe56
|
||
|
|
2a7051c51d
|
||
|
|
7f623d5740
|
||
|
|
16e9f732b1
|
@@ -1,8 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Security vulnerability
|
||||
url: https://github.com/swaits/heuropt/security/advisories/new
|
||||
about: Please use private vulnerability reporting — do not open a public issue. See SECURITY.md.
|
||||
url: https://git.swaits.com/swaits/heuropt/src/branch/main/SECURITY.md
|
||||
about: Do not open a public issue. Email steve@waits.net — see SECURITY.md.
|
||||
- name: Question / discussion
|
||||
url: https://github.com/swaits/heuropt/discussions
|
||||
about: For open-ended questions or design discussions.
|
||||
url: https://git.swaits.com/swaits/heuropt/issues
|
||||
about: For open-ended questions or design discussions, open an issue and label it "question".
|
||||
|
||||
+12
-12
@@ -91,7 +91,7 @@ unchanged, verified by the per-algorithm snapshot tests.
|
||||
catch rate from ~74% to ~85%. See `.cargo/mutants.toml` for the
|
||||
campaign notes and the residual equivalent-mutant categories.
|
||||
|
||||
[0.11.0]: https://github.com/swaits/heuropt/releases/tag/v0.11.0
|
||||
[0.11.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.11.0
|
||||
|
||||
## [0.10.0] — 2026-05-06
|
||||
|
||||
@@ -151,7 +151,7 @@ strings (e.g. `if name == "Nsga3"`) needs updating to the new
|
||||
canonical strings. The names are stable now (they match the
|
||||
literature), so this is a one-time fix.
|
||||
|
||||
[0.10.0]: https://github.com/swaits/heuropt/releases/tag/v0.10.0
|
||||
[0.10.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.10.0
|
||||
|
||||
## [0.9.0] — 2026-05-06
|
||||
|
||||
@@ -236,7 +236,7 @@ compile untouched.
|
||||
count went from 229 to 242 (10 new explorer tests + 3 from the
|
||||
new `Objective` / `DecisionVariable` builders).
|
||||
|
||||
[0.9.0]: https://github.com/swaits/heuropt/releases/tag/v0.9.0
|
||||
[0.9.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.9.0
|
||||
|
||||
## [0.8.0] — 2026-05-06
|
||||
|
||||
@@ -319,7 +319,7 @@ gated behind a new `async` feature flag.
|
||||
flag ULP-level slop in the simplex projection's
|
||||
`max(x_i − τ, 0)` clamp boundary.
|
||||
|
||||
[0.8.0]: https://github.com/swaits/heuropt/releases/tag/v0.8.0
|
||||
[0.8.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.8.0
|
||||
|
||||
## [0.5.0] — 2026-05-05
|
||||
|
||||
@@ -405,7 +405,7 @@ Three new polished examples covering distinct domains:
|
||||
- `lib.rs` crate-level docs polished — better intro, points readers
|
||||
at the user guide and the design spec.
|
||||
|
||||
[0.5.0]: https://github.com/swaits/heuropt/releases/tag/v0.5.0
|
||||
[0.5.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.5.0
|
||||
|
||||
## [0.4.0] — 2026-05-05
|
||||
|
||||
@@ -543,7 +543,7 @@ last decimal in every benchmark.
|
||||
ratio, and is robust to floating-point precision loss in the
|
||||
algorithm's inner loop.
|
||||
|
||||
[0.4.0]: https://github.com/swaits/heuropt/releases/tag/v0.4.0
|
||||
[0.4.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.4.0
|
||||
|
||||
## [0.3.0] — 2026-05-05
|
||||
|
||||
@@ -622,7 +622,7 @@ constraint-handling gaps. No breaking changes to the v0.2.0 public API.
|
||||
preserves the existing midpoint-of-bounds default; `IpopCmaEs` sets
|
||||
it to inject restart diversity without shrinking the search box.
|
||||
|
||||
[0.3.0]: https://github.com/swaits/heuropt/releases/tag/v0.3.0
|
||||
[0.3.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.3.0
|
||||
|
||||
## [0.2.0] — 2026-05-05
|
||||
|
||||
@@ -688,7 +688,7 @@ benchmark problems. No breaking changes to the v0.1.0 public API.
|
||||
- `benchmarks` — canonical reference runs of NSGA-II on ZDT1 and DE on
|
||||
Rastrigin.
|
||||
- `jiggly_tuning` — real-world 4-objective NSGA-III firmware tuning
|
||||
for the [`jiggly`](https://github.com/swaits/jiggly) USB-mouse-jiggler,
|
||||
for the [`jiggly`](https://git.swaits.com/swaits/jiggly) USB-mouse-jiggler,
|
||||
with an a-posteriori weighted-decision step that picks one
|
||||
recommendation off the Pareto front.
|
||||
|
||||
@@ -714,7 +714,7 @@ benchmark problems. No breaking changes to the v0.1.0 public API.
|
||||
`Problem` / decision type without exotic interior mutability already
|
||||
satisfies these.
|
||||
|
||||
[0.2.0]: https://github.com/swaits/heuropt/releases/tag/v0.2.0
|
||||
[0.2.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.2.0
|
||||
|
||||
## [0.1.0] — 2026-05-04
|
||||
|
||||
@@ -772,7 +772,7 @@ Initial release.
|
||||
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
|
||||
[`jiggly`](https://git.swaits.com/swaits/jiggly) USB-mouse-jiggler firmware
|
||||
with an a-posteriori weighted-decision step that picks one
|
||||
recommendation off the Pareto front.
|
||||
|
||||
@@ -783,5 +783,5 @@ Initial release.
|
||||
`RandomSearch`, `Nsga2`, and `DifferentialEvolution`. Seeded runs stay
|
||||
bit-identical to serial mode.
|
||||
|
||||
[Unreleased]: https://github.com/swaits/heuropt/compare/v0.10.0...HEAD
|
||||
[0.1.0]: https://github.com/swaits/heuropt/releases/tag/v0.1.0
|
||||
[Unreleased]: https://git.swaits.com/swaits/heuropt/compare/v0.10.0...main
|
||||
[0.1.0]: https://git.swaits.com/swaits/heuropt/releases/tag/v0.1.0
|
||||
|
||||
+3
-3
@@ -1,14 +1,14 @@
|
||||
[package]
|
||||
name = "heuropt"
|
||||
version = "0.11.0"
|
||||
version = "0.11.1"
|
||||
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"
|
||||
repository = "https://git.swaits.com/swaits/heuropt"
|
||||
homepage = "https://git.swaits.com/swaits/heuropt"
|
||||
documentation = "https://docs.rs/heuropt"
|
||||
keywords = ["optimization", "evolutionary", "nsga", "pareto", "moead"]
|
||||
categories = ["algorithms", "science", "mathematics", "simulation"]
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
[](https://docs.rs/heuropt)
|
||||
[](https://swaits.github.io/heuropt/)
|
||||
[](LICENSE)
|
||||
[](https://github.com/swaits/heuropt/actions/workflows/ci.yml)
|
||||
[](https://git.swaits.com/swaits/heuropt/actions?workflow=ci.yml)
|
||||
|
||||
**A practical Rust toolkit for heuristic optimization.** Single-objective.
|
||||
Multi-objective. Many-objective. 33 algorithms — every one of them with a
|
||||
|
||||
+5
-4
@@ -17,14 +17,15 @@ minor versions.
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
Please **do not** open a public GitHub issue for a security bug.
|
||||
Instead use one of these channels:
|
||||
Please **do not** open a public issue for a security bug.
|
||||
Instead:
|
||||
|
||||
- GitHub's [private vulnerability reporting](https://github.com/swaits/heuropt/security/advisories/new)
|
||||
on the repository.
|
||||
- Email **steve@waits.net** with subject line `[heuropt security]
|
||||
<short summary>`.
|
||||
|
||||
(This project is hosted on [git.swaits.com](https://git.swaits.com/swaits/heuropt),
|
||||
which has no private-advisory feature, so email is the reporting channel.)
|
||||
|
||||
Please include:
|
||||
|
||||
1. A description of the vulnerability and the affected versions.
|
||||
|
||||
@@ -42,7 +42,6 @@ library_benchmark_group!(
|
||||
// (`Ir`) only, so callgrind's cache simulation is pure overhead here —
|
||||
// disabling it roughly halves each profiling run.
|
||||
main!(
|
||||
config = LibraryBenchmarkConfig::default()
|
||||
.tool(Callgrind::with_args(["--cache-sim=no"])),
|
||||
config = LibraryBenchmarkConfig::default().tool(Callgrind::with_args(["--cache-sim=no"])),
|
||||
library_benchmark_groups = compare_group
|
||||
);
|
||||
|
||||
+2
-2
@@ -12,8 +12,8 @@ create-missing = false
|
||||
[output.html]
|
||||
default-theme = "rust"
|
||||
preferred-dark-theme = "navy"
|
||||
git-repository-url = "https://github.com/swaits/heuropt"
|
||||
edit-url-template = "https://github.com/swaits/heuropt/edit/main/docs/book/{path}"
|
||||
git-repository-url = "https://git.swaits.com/swaits/heuropt"
|
||||
edit-url-template = "https://git.swaits.com/swaits/heuropt/_edit/main/docs/book/{path}"
|
||||
site-url = "/heuropt/"
|
||||
no-section-label = true
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ are heavily optimized — see the perf entry in the v0.4.0 CHANGELOG.
|
||||
On the comparison harness in `examples/compare.rs` (10-seed mean,
|
||||
30 000 evaluations on DTLZ2), the total wall-clock time across 12
|
||||
algorithms is ~5 seconds. Per-algorithm timings are in
|
||||
[`examples/compare-results.md`](https://github.com/swaits/heuropt/blob/main/examples/compare-results.md).
|
||||
[`examples/compare-results.md`](https://git.swaits.com/swaits/heuropt/src/branch/main/examples/compare-results.md).
|
||||
|
||||
For comparison-shopping speed against Python libraries, the gap is
|
||||
typically 10×–100× in heuropt's favor for compute-bound
|
||||
@@ -106,4 +106,4 @@ Hyperband+BO hybrids, distributed runners). heuropt is younger; the
|
||||
core is solid but the ecosystem is small.
|
||||
|
||||
If you adopt heuropt and miss a thing, the project is small enough
|
||||
that contributions land fast. See [CONTRIBUTING.md](https://github.com/swaits/heuropt/blob/main/CONTRIBUTING.md).
|
||||
that contributions land fast. See [CONTRIBUTING.md](https://git.swaits.com/swaits/heuropt/src/branch/main/CONTRIBUTING.md).
|
||||
|
||||
@@ -444,4 +444,4 @@ let neighbors = |x: &Vec<usize>, _rng: &mut Rng| -> Vec<Vec<usize>> {
|
||||
[`InsertionMutation`]: https://docs.rs/heuropt/latest/heuropt/operators/struct.InsertionMutation.html
|
||||
[`ScrambleMutation`]: https://docs.rs/heuropt/latest/heuropt/operators/struct.ScrambleMutation.html
|
||||
[`CompositeVariation`]: https://docs.rs/heuropt/latest/heuropt/operators/struct.CompositeVariation.html
|
||||
[CompareExample]: https://github.com/swaits/heuropt/blob/main/examples/tsp_operators_compare.rs
|
||||
[CompareExample]: https://git.swaits.com/swaits/heuropt/src/branch/main/examples/tsp_operators_compare.rs
|
||||
|
||||
@@ -35,7 +35,7 @@ hyperopt, optuna, DEAP). heuropt's design priorities:
|
||||
outputs.
|
||||
3. **Algorithms that work.** Every algorithm is benchmarked against
|
||||
the canonical test problems (ZDT, DTLZ, Rastrigin, Rosenbrock,
|
||||
Ackley) and the results are checked into [examples/compare-results.md](https://github.com/swaits/heuropt/blob/main/examples/compare-results.md)
|
||||
Ackley) and the results are checked into [examples/compare-results.md](https://git.swaits.com/swaits/heuropt/src/branch/main/examples/compare-results.md)
|
||||
so you can see what each algorithm's strengths actually are.
|
||||
4. **Testing as a first-class concern.** 316+ unit / integration /
|
||||
property tests, eight cargo-fuzz targets in CI, gungraun
|
||||
|
||||
@@ -89,7 +89,7 @@ breaking API change.
|
||||
- **Migration guides** — per-release, in this book at
|
||||
[migration](./migration.md).
|
||||
- **GitHub releases** — each tag has release notes.
|
||||
- **Watch the repo** — https://github.com/swaits/heuropt — to be
|
||||
- **Watch the repo** — https://git.swaits.com/swaits/heuropt — to be
|
||||
notified of new releases.
|
||||
|
||||
[`heuropt::prelude`]: https://docs.rs/heuropt/latest/heuropt/prelude/index.html
|
||||
|
||||
Reference in New Issue
Block a user