Shape continuation as an alternative search for packing congruent shapes
Most searches for dense packings move rigid pieces. Hardening starts every piece as the disk inscribed in it and deforms it into the target shape while the container is pushed inward. Tested against four other searches at matched budget and tuning, it is not a better default. It is a different search: it reaches packings the others miss on squares in a square, and loses on triangles and on families held out from development.
Searches, side by side
All tiles run on one clock, so every search starts, morphs and settles at the same moment; Pause shows the final packings and Play restarts them together. Each tile replays one method's best run on one instance, from random start to final packing: orange pieces are still soft, blue ones are hard. Squares, triangles, hexagons and disks in squares, circles and triangles, and cubes in a cube (slowly rotating). Tiles are chosen by a fixed rule (the largest instances where the run reached the best known value) and link to their family page. The number is the container size.
The answer, in four lines
Each line links to the experiment behind it in the journal. Details and caveats are in the paper.
Same instance, two searches
Hardening (left) and rigid starts (right) on the same instance, each the best of its runs. The first two are where hardening reaches a packing nothing else did; the last two are where it loses.
The paths
A piece's state is γ·[(1−τ)·P ⊕ τρ·D]: the polygon P scaled toward its incenter, plus a disk of radius τρ, all scaled by γ. Hardening, growing and rigid starts are paths through (γ, τ) on the same schedule; simulated annealing (sa) and perturbation–compression (pc) are classical rigid baselines. Two ablations separate the parts of hardening: snap compresses disks and then switches to polygons at once, and grow-area grows rigid polygons along hardening's area schedule.
Main comparison, by family
The study, experiment by experiment
Each experiment (campaign) was planned in writing, with its decision rule, before it ran. The latest recorded finding of each is below, in the order that tells the story; later findings correct earlier ones where needed, and nothing is deleted.
Check anything
Every run is a line in a campaign's runs.jsonl. Every number in the paper is generated from an event log of plans, runs, findings and decisions. Replays of the best run of every instance and method are on the family pages.
git clone https://github.com/yoheinakajima/soft-to-rigid.git && cd soft-to-rigid node engine/run.js campaigns/C07-breadth-best/plan.json --worker 0 --of 1 # rerun a campaign (deterministic per seed) python3 -m packing.ledger rebuild # rebuild the research ledger python3 -m packing.project && python3 -m packing.analyze # regenerate reports, site data, paper numbers