You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The docs cover how to declare thermal heuristics in optim-config.yml, but nowhere explain what the fast and accurate heuristics actually do — their algorithms, the two-pass solve mechanism they plug into, or their known boundary-condition caveats. The only place this logic is currently explained is in code docstrings, which a study author configuring optim-config.yml is unlikely to read.
What exists today
docs/user-guide/optim-config.md (§"heuristics — integer strategy and thermal heuristics") documents the config schema: how to set integer-strategy: heuristic, wire inputs/outputs, and the fixed heuristic-element names each built-in heuristic expects. It's a wiring reference only.
docs/user-guide/building.md mentions HeuristicId.FAST only as a usage example for setting integer_strategy on a component.
AGENTS.md has a one-line pointer to find_min_generation_fast / find_num_units_accurate in thermal_heuristic.py, with no mechanism description.
What's missing
No doc page explains, in terms a study author can use without reading the source:
The two-pass solve mechanism (heuristic_runner.py): first LP solve with the component relaxed to continuous, heuristic computes tightened bounds from that solution, second solve enforces them.
What fast computes: the sliding-window / offset-search logic that derives a minimum generation floor from the relaxed generation-power timeseries (find_min_generation_fast, thermal_heuristic.py:74-157).
What accurate computes: the small LP enforcing true min-up/min-down dynamics on unit counts (find_num_units_accurate, thermal_heuristic.py:160-287), including that its min-up/min-down constraints assume a cyclic (wrap-around) horizon — a caveat a user would need to know before combining it with resolution.mode: sequential-subproblems (see Accurate thermal heuristic's cyclic min-up/down model is unsound in sequential-subproblems mode #268).
General guidance on when to prefer fast vs accurate (accuracy/cost trade-off).
This logic is currently documented only in the docstrings of find_min_generation_fast, find_num_units_accurate (thermal_heuristic.py), and the module docstring of heuristic_runner.py.
Suggested scope
Add a user-guide page (or a new section in optim-config.md) explaining the two heuristics' mechanics and caveats, cross-linked from the existing config-schema section. Not prescribing exact placement/format here — just tracking that the gap exists.
Summary
The docs cover how to declare thermal heuristics in
optim-config.yml, but nowhere explain what thefastandaccurateheuristics actually do — their algorithms, the two-pass solve mechanism they plug into, or their known boundary-condition caveats. The only place this logic is currently explained is in code docstrings, which a study author configuringoptim-config.ymlis unlikely to read.What exists today
docs/user-guide/optim-config.md(§"heuristics — integer strategy and thermal heuristics") documents the config schema: how to setinteger-strategy: heuristic, wireinputs/outputs, and the fixedheuristic-elementnames each built-in heuristic expects. It's a wiring reference only.docs/user-guide/building.mdmentionsHeuristicId.FASTonly as a usage example for settinginteger_strategyon a component.AGENTS.mdhas a one-line pointer tofind_min_generation_fast/find_num_units_accurateinthermal_heuristic.py, with no mechanism description.What's missing
No doc page explains, in terms a study author can use without reading the source:
heuristic_runner.py): first LP solve with the component relaxed to continuous, heuristic computes tightened bounds from that solution, second solve enforces them.fastcomputes: the sliding-window / offset-search logic that derives a minimum generation floor from the relaxed generation-power timeseries (find_min_generation_fast,thermal_heuristic.py:74-157).accuratecomputes: the small LP enforcing true min-up/min-down dynamics on unit counts (find_num_units_accurate,thermal_heuristic.py:160-287), including that its min-up/min-down constraints assume a cyclic (wrap-around) horizon — a caveat a user would need to know before combining it withresolution.mode: sequential-subproblems(see Accurate thermal heuristic's cyclic min-up/down model is unsound in sequential-subproblems mode #268).fastvsaccurate(accuracy/cost trade-off).This logic is currently documented only in the docstrings of
find_min_generation_fast,find_num_units_accurate(thermal_heuristic.py), and the module docstring ofheuristic_runner.py.Suggested scope
Add a user-guide page (or a new section in
optim-config.md) explaining the two heuristics' mechanics and caveats, cross-linked from the existing config-schema section. Not prescribing exact placement/format here — just tracking that the gap exists.Related
accurateheuristic's algorithm would naturally surface this caveat to users.