Skip to content

Commit 4132200

Browse files
jkiviluoclaude
andcommitted
release: v4.0.0b21 — Benders in-out stabilization + polar-high>=3.4.0 floor
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent a89488b commit 4132200

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,36 @@
1+
## Release 4.0.0b21 (1.7.2026) — Benders in-out stabilization (degeneracy tail-off)
2+
3+
No database migration (schema stays **v62**). Dependency floor raised to
4+
**`polar-high>=3.4.0`** (`polars>=1.40`, `highspy<=1.14.0` unchanged). Opt-in and
5+
OFF by default — the converged solution is unchanged on every model.
6+
7+
### Decomposition (Benders)
8+
9+
- **Optional in-out separation to speed up a slowly-converging (tailing-off)
10+
spatial-Benders solve.** When storage (or any inter-temporal coupling) makes
11+
timesteps fungible, the region recourse is flat in the per-timestep coupling
12+
flow and the cut slopes become basis-dependent; the master then wanders among
13+
cost-equivalent flow schedules and the lower bound closes very slowly even
14+
though the best feasible solution is near-optimal early. In-out separation
15+
(Ben-Ameur & Neto 2007) generates each cut at an interior point
16+
`f_sep = λ·centre + (1-λ)·f_out` instead of the extreme master vertex — better-
17+
centred cuts, no wandering, faster bound closure, at **zero extra subproblem
18+
solves** (the region is solved once per iteration either way, just at a better
19+
point). Enabled per solve via the environment variable
20+
`FLEXTOOL_BENDERS_IN_OUT_WEIGHT` (the weight `λ`): **`0.0` (the default) is OFF**
21+
and byte-identical to before; `λ ∈ (0, 1)` turns it on, larger = more
22+
stabilisation. On a hydrogen-trade tail-off benchmark, `λ ≈ 0.3–0.7` reached the
23+
practical optimality gaps about 30% faster and closed the bound tighter than the
24+
un-stabilised run (which plateaued above the gap it could otherwise reach). The
25+
stabilisation math is the domain-free `polar_high.decomposition.InOutStabilizer`
26+
(3.4.0); FlexTool drives one instance per node group. Correctness is preserved
27+
regardless of `λ`: a cut generated at any point is a valid supporting hyperplane
28+
(valid lower bound), the interior point is clamped to the chosen capacity (valid
29+
upper bound), and the moment a region's cut fails to separate the master vertex
30+
the method falls back to an exact-Benders step for that region — so the optimum
31+
is unchanged and convergence is guaranteed. A future release will promote the
32+
knob to a `solve` database parameter once a default is settled.
33+
134
## Release 4.0.0b20 (1.7.2026) — Benders stall guard (fail fast with a diagnostic)
235

336
No database migration (schema stays **v62**). Dependency floor raised to

pyproject.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "flextool"
77
# restructure are in. 4.0.0 final follows after the remaining
88
# minor-functionality additions, cleanup and testing land. PEP 440
99
# pre-release suffix: 4.0.0a1, 4.0.0a2, ... 4.0.0b1, 4.0.0rc1, then 4.0.0.
10-
version = "4.0.0b20"
10+
version = "4.0.0b21"
1111
description = "IRENA FlexTool is an energy and power systems model for understanding the role of variable power generation in future energy systems."
1212
readme = "README.md"
1313
license = { file = "LICENSE.txt" }
@@ -54,9 +54,10 @@ dependencies = [
5454
# self-check reads to size its tolerance. 3.2.0 makes autoscale Layer 3
5555
# centre the objective over HiGHS' cost comfort zone (clearing the
5656
# "excessively small costs" warning that the legacy 1e-6 scale_the_objective
57-
# provokes). 3.3.0 adds polar_high.decomposition.StallMonitor, the generic
58-
# tail-off detector the Benders stall guard drives — so it is the hard floor.
59-
"polar-high>=3.3.0",
57+
# provokes). 3.3.0 adds polar_high.decomposition.StallMonitor (the Benders
58+
# stall guard). 3.4.0 adds decomposition.InOutStabilizer, the generic in-out
59+
# separation picker the Benders in-out stabilization drives — the hard floor.
60+
"polar-high>=3.4.0",
6061
# Cap pins the install default to 1.14.0 (the highest tested
6162
# version) while leaving room for users to downgrade to older
6263
# 1.x releases that have been validated against their setup.

0 commit comments

Comments
 (0)