Skip to content

Commit 51dc9fa

Browse files
alexnodelandclaude
andauthored
Chebyshev scalarization + evolution-as-inference explorable (0.3.1) (#21)
Chebyshev (inference/pareto.rs): ChebyshevScalarization - weighted-max norm over an ideal point, latent or fixed weight. Reaches non-convex Pareto front interiors where weighted-sum optima provably collapse to endpoints; pinned at the theorem level on the concave front f1=x, f2=1-x^2 (fixed-w contrast + weight sweep + latent-w conditional tracking). Docs now state the latent-w marginal tilt exp(-s*m(w)) honestly for both scalarizations. Explorable (crates/fugue-evo-wasm + docs): ExploreSmcInference steps the real inference layer one tempering rung per call (GaussianPrior program, twin-peaks factor likelihood, fugue smc_prior_particles/normalize/resample/ rejuvenate_particles/CrossoverKernel), streaming particles, ESS, resampling events, crossover swaps, and the running log-evidence; density_grid returns the exact tempered target for the heat overlay. Engine tests: determinism, ladder shape, analytic posterior mean + evidence vs grid quadrature, annealing concentration (distance-to-nearest-mode). Widget (viz/inference.js) follows the site conventions (wasm gate + notice, lazy init, seeded scrub, controls/canvas/instruction/readouts, reduced-motion batch); mounted on the "Evolution as Inference" architecture page; wasm crate gains ppl feature + direct fugue-ppl dep. Verified live in a browser against the built pkg (autoplay ladder, Replay, Reset, Step, readouts). Claude-Session: https://claude.ai/code/session_01HmWLBR9Zq6hPG5o7URDuNJ Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 0b052b2 commit 51dc9fa

10 files changed

Lines changed: 1211 additions & 13 deletions

File tree

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.3.1] - 2026-07-28
11+
12+
### Added
13+
14+
- **Chebyshev scalarization for non-convex Pareto fronts**
15+
(`inference::pareto::ChebyshevScalarization`): the weighted-max norm
16+
`max_i w_i·(f_i − z_i)` over an ideal point `z`, reaching every weakly
17+
Pareto-optimal point — including the non-convex front regions where every
18+
weighted-sum optimum provably collapses onto the endpoints. Supports a
19+
latent weight (like `ParetoScalarization`) or a **fixed** weight
20+
(`with_weight`) for uniform front sweeps. Pinned at the theorem level on
21+
the concave front `f1 = x, f2 = 1 − x²`: fixed-w weighted-sum mass avoids
22+
the interior (< 0.1) while fixed-w Chebyshev concentrates on the interior
23+
front point `x* = (√5−1)/2`, and a weight sweep traces the whole front.
24+
- **Honest marginal-tilt documentation** for the latent-weight Pareto models:
25+
the `w`-marginal is tilted by `exp(−s·m(w))` (the scalarized optimum's
26+
value), so the *conditional* `x | w` is what tracks the front; uniform
27+
coverage comes from fixed-weight sweeps. New regression
28+
`test_chebyshev_latent_weight_conditional_tracks_front` pins the
29+
conditional property.
30+
- **"Evolution as inference" explorable** (evo.fugue.run, Architecture →
31+
Evolution as Inference): `ExploreSmcInference` in `fugue-evo-wasm` steps
32+
the crate's real inference layer one tempering rung at a time — Gaussian
33+
prior program, twin-peaks Boltzmann target, fugue's SMC primitives
34+
(reweight / ESS-triggered systematic resampling / typed-MH rejuvenation /
35+
crossover kernel), exact tempered-density heat recomputed each rung,
36+
β-ladder up to annealed-optimizer territory, and live ESS / log-evidence /
37+
swap readouts. The wasm crate now enables the `ppl` feature and depends on
38+
`fugue-ppl` directly. Engine pinned by determinism, ladder-shape,
39+
analytic-posterior-mean, analytic-evidence, and annealing-concentration
40+
tests; the page verified live in a browser against the built wasm.
41+
42+
1043
## [0.3.0] - 2026-07-28
1144

1245
**Inference-first.** fugue-evo's identity is now "an implementation of fugue

Cargo.lock

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ lto = true
1212

1313
[package]
1414
name = "fugue-evo"
15-
version = "0.3.0"
15+
version = "0.3.1"
1616
edition = "2021"
1717
authors = ["Alex Nodeland"]
1818
description = "An implementation of fugue for running evolutionary algorithms as Bayesian inference: priors and likelihoods as probabilistic programs, tempered SMC in trace space, annealed optimization, Pareto posteriors - plus a standalone classical EC toolkit"

crates/fugue-evo-wasm/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ crate-type = ["cdylib", "rlib"]
1818

1919
[dependencies]
2020
# Classic EC layer without parallel/checkpoint/ppl features
21-
fugue-evo = { path = "../..", default-features = false, features = ["std", "classic"] }
21+
fugue-evo = { path = "../..", default-features = false, features = ["std", "classic", "ppl"] }
22+
fugue-ppl = { path = "../../../fugue", version = "0.2.1" }
2223

2324
# WASM bindings
2425
wasm-bindgen = "0.2"

0 commit comments

Comments
 (0)