Fix Kaibel GDP reformulation failures#136
Conversation
|
5 minute Kaibel MINLP reformulation campaign after the Hull vapor-pressure evaluation fix. Command: /home/bernalde/.pixi/bin/pixi run gdplib-benchmark run --cases-file /tmp/kaibel_issue68_minlp_5min.csv --run-id issue68_kaibel_minlp_5min_after_hullfix_20260512 --no-skip-existing --no-summaryCampaign result: 6 result rows, 0 benchmark failures. This is the main improvement from the latest fix: the Hull reformulations no longer fail in Pyomo/GAMS expression evaluation.
Model sizes from the result JSON:
Bottom line: the Hull expression-evaluation blocker is fixed, so all three Hull solver settings now run through the benchmark path. It does not yet push the best feasible incumbent forward in 5 minutes. The only clear feasible integer incumbent in this campaign is Big-M/DICOPT at Generated artifacts were left under ignored benchmark output paths:
|
|
5 minute GDPOpt campaign for Kaibel after the Hull/GAMS expression fixes, excluding complete enumeration. Command: /home/bernalde/.pixi/bin/pixi run gdplib-benchmark run --cases-file /tmp/kaibel_issue68_gdpopt_no_enum_5min.csv --run-id issue68_kaibel_gdpopt_no_enum_5min_20260512 --no-skip-existing --no-summaryCase file used the local GDPOpt GAMS role stack:
Campaign result: 4 result rows, 0 benchmark failures.
Bottom line: yes, GDPOpt helps this instance. Without enumeration, LOA/RIC pushed the best feasible incumbent to Generated artifacts were left under ignored benchmark output paths:
|
|
Follow-up on the GDPOpt benchmark interpretation: the The contradiction is real:
For a minimization problem, a feasible incumbent at What appears to be happening:
Corrected interpretation of the no-enumeration GDPOpt run:
|
|
Follow-up on the GDPOpt/GLOA contradiction: I instrumented the 5-minute Kaibel GLOA run to map the generated affine cut that caused the premature certificate. Findings:
Conclusion: the GLOA |
|
Follow-up on whether Pyomo/pyomo#3939 explains the Kaibel GLOA failure: Yes, it appears to address the invalid GLOA certificate we observed here. The failing Kaibel row was a generated GLOA convex affine cut: Default GLOA produced the false certificate: That happened after the discrete master declared the generated affine cut infeasible and GDPOpt exited through "bounds have converged or crossed." I ran a local control monkeypatch matching the fix proposed in Pyomo #3939: build the concave lower cut with This does not make Kaibel globally solved in 5 minutes. It changes the result from an invalid certificate to a conservative open-gap result. The best 5-minute feasible incumbent from the no-enumeration GDPOpt campaign remains the LOA/RIC point: So for this PR, the Kaibel model fix is still valid, but the GLOA benchmark should be interpreted as affected by upstream Pyomo GLOA cut generation until Pyomo #3939 is fixed. |
9dfc324 to
43c235c
Compare
|
Heads up from PR #102: while wrapping up the pandemic PR after the base update, I ran the repository Black check/fix and it touched Relevant commits on #102: This may be relevant when rebasing or reviewing this Kaibel PR so the formatting noise is not mistaken for part of the Kaibel model fix. |
Summary
Tests run
pixi run pytest tests/test_kaibel.py -v --tb=short-> 5 passedpixi run pytest tests/test_module_imports.py -v --tb=short-> 68 passedpixi run test-> 289 passed, 1 skippedpixi run lint-> exit 0; Black clean, critical flake8 count 0, broader flake8 statistics are existing exit-zero findings, typos cleangit diff --checkandgit diff --cached --check-> passedpixi run gdplib-benchmark run --cases-file /tmp/kaibel_issue68_hull_eval_fix.csv --run-id issue68_kaibel_hull_eval_fix2_20260512 --no-skip-existing --no-summary-> 1 result row, 0 failures;gdp.hull/gams-local/DICOPT reached GAMS and returnedintermediateNonIntegerunder the 60 s limit with objective/upper bound151820.17183655952Notes
pixi.lockwas left unstaged as environment churn.Closes #68