suggest_loosening
Find the loosest tolerance each link can accept to cut cost while the stack still passes a seeded Monte-Carlo Cpk check. Tight links are loosened first, ranked by cost.
Instructions
The loosest tolerance that works: which links can give up tolerance for the biggest cost saving while the stack still passes.
Greedy, one IT grade at a time — every trial loosening is re-verified against tolerance_stackup's seeded Monte-Carlo cpk before it is committed, so nothing it suggests can fail the spec. Candidates are ranked by the tolerance_cost_check curve, so the tightest (most expensive) links get opened first. Loosening preserves each link's MEAN, so the stack's nominal does not move.
Two honest refusals: a chain that does not already meet target_cpk returns
ok=False (there is no margin to give away — tighten or re-spec, do not loosen),
and an already-loosest chain returns steps=[] with saving=0 rather than
inventing a saving. stopped says which: 'no_further_move' | 'max_steps'
(re-run on the returned chain to continue) | 'no_margin'.
chain / handle / axis / default_tol / general as in
tolerance_cost_check; spec_min/spec_max default to the chain's own
worst-case bounds. Returns {ok, steps:[{link, index, from_it, to_it,
from_band_mm, to_band_mm, cost_before, cost_after, saving, cpk}], stopped,
chain (the loosened scheme), cost_index_before, cost_index_after, saving,
saving_pct, cpk_before, cpk_after, target_cpk, spec, note, fidelity, band_pct,
basis}.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | +z | |
| seed | No | ||
| chain | No | ||
| handle | No | ||
| general | No | m | |
| process | No | cnc | |
| samples | No | ||
| spec_max | No | ||
| spec_min | No | ||
| max_steps | No | ||
| target_cpk | No | ||
| coarsest_it | No | ||
| default_tol | No | ||
| step_grades | No |