What (One-liner)
Herbert Simon's satisficing rule: sort candidates by score descending, return the first one that clears the threshold (not the global optimum). Models bounded rationality.
How to use
Drag b0_simon_v1 onto the Canvas, fill aspiration (threshold) + candidates ([{id, score}, ...]). Output is the first satisficing candidate.
Core formulas
scored = sorted(candidates, key=lambda c: -c.score)
for c in scored:
if c.score >= aspiration:
return {id: c.id, score: c.score}
return NoneTypical usage: aspiration=70, candidates are BLCV scores → after ranking, take the first >= 70.
Assumptions & applicability
Assumptions: comparable single-dimension scores; a 'good enough' decision posture; static candidates.
Fits: equity shortlists / strategy selection / teaching demos / fast decisions.
Does not fit: global optima (use max()); multi-objective (use MCDA); dynamic candidate sets.
Input / Output contract
{aspiration: float, candidates: list} → {aspiration, candidates_evaluated, chosen | None, satisficing: bool, _model}. Details in the frontmatter.
Known limitations
- Single score only (no multi-dimensional trade-offs)
- No 'closest miss' when nothing qualifies (returns None)
- Empty list → None (no error)
- Ties resolved by input order
References
Simon (1956) original + Gigerenzer (2008) extension. Full citations in the frontmatter.
Golden Test
tests/golden/fixtures/tier1/b0_simon/, 1e-12 tolerance, 4 tests (matches_reference / no_satisficer / picks_highest / empty_candidates). Passing as of 2026-04-20.
Changelog
- 1.0.0 (2026-04-20) — Initial Active release

