Chebyshev scalarization for non-convex fronts + evolution-as-inference explorable (0.3.1) - #21
Merged
Conversation
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). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HmWLBR9Zq6hPG5o7URDuNJ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The two follow-ups noted at the close of #18.
Chebyshev scalarization (
inference::pareto::ChebyshevScalarization)The weighted-max norm
max_i w_i·(f_i − z_i)over an ideal pointz, with either a latent weight (likeParetoScalarization) or a fixed weight (with_weight) for uniform front sweeps. Pinned at the theorem level on the concave frontf1 = x, f2 = 1 − x²(Pareto set exactly [0,1], where every weighted-sum interior stationary point is a maximum):x* = (√5−1)/2 ≈ 0.618(posterior mean within ±0.08);Working the test surfaced an honesty fix worth calling out: in the latent-weight models the
w-marginal is tilted byexp(−s·m(w))(the scalarized optimum's value atw), so annealing concentrates mass on the best-scoring front regions rather than covering the front uniformly — the conditionalx | wis what tracks the front. Both scalarizations' docs now state this explicitly, and a new regression pins the conditional property for latent-w Chebyshev. (My earlier "the posterior traces the front" phrasing was stronger than the convex-case test had actually verified.)"Evolution as inference" explorable (evo.fugue.run)
ExploreSmcInference(fugue-evo-wasm, now with thepplfeature + a directfugue-ppldep) steps the crate's real inference layer one tempering rung perstep():GaussianPriorprogram, twin-peaks Boltzmann target viaFactorFitness, and fugue's SMC primitives (incremental reweight, ESS-triggered systematic resampling, typed-MH rejuvenation, crossover kernel).density_gridreturns the exact tempered target so the heat overlay is the analytic density the particles should (and visibly do) match at every β; β MAX extends past 1 into annealed-optimizer territory; log-evidence accumulates live.docs/viz/inference.js) follows the site conventions exactly: wasm gate + no-fallback notice, lazy IntersectionObserver init, seeded scrub, controls → canvas → instruction → readouts, reduced-motion synchronous batch, theme-aware heat rebuild.book.tomlregisters the viz file; no CI change needed (docs.yml already builds and stagespkg/).Validation
9/9 default suites + 5/5 wasm-crate suites green; both minimal feature configs check clean; my files clippy-clean and rustdoc-clean (the pre-existing
--all-featuresworkspace-clippy failure and 3 old wasm-crate warnings on main are untouched); fmt clean. Version0.3.0 → 0.3.1(additive).🤖 Generated with Claude Code
https://claude.ai/code/session_01HmWLBR9Zq6hPG5o7URDuNJ