Pyomo / pyomo

An object-oriented algebraic modeling language in Python for structured optimization problems.
https://www.pyomo.org
Other
2.01k stars 516 forks source link

cyipopt does not support `symbolic_solver_labels` or `load_solutions=False` #2218

Open SimonRubenDrauz opened 2 years ago

SimonRubenDrauz commented 2 years ago

Summary

Hi there,

I was trying to use a project on github which is called egret: https://github.com/grid-parity-exchange/Egret. Egret is doing optimizations in a power grid based on a pyomo model. I used the cyipopt solver, however, it raises an error if I do so. Unfortunately, I am not a developer of egret so I can only reference what I was doing when I used egret. I also got in contact with them and you find my issue here: https://github.com/grid-parity-exchange/Egret/issues/254. They adviced me to contact you as you might have a solution.

Steps to reproduce the issue

In egret run the following example (change the solver from 'cbc' to 'cyipopt') : Egret/examples/unit_commitment/uc_test_example.py. The solver within egret is built through 'solver = po.SolverFactory(solver)'. 'solver' is cyipopt.

Error Message

The error that is raised is the following:
File "...\pyomo\common\config.py", line 2178, in set_value raise ValueError( ValueError: key 'symbolic_solver_labels' not defined for ConfigDict '' and implicit (undefined) keys are not allowed

System information

Pyomo version: 6.2 Python version: 3.8 Operating system: Windows 10 How Pyomo was installed (PyPI, conda, source): conda-forge Solver (if applicable): cyipopt --> cyipot version: 1.1.0 --> ipopt version: 3.14.4

Additional information

If you cannot reproduce the problem, I will try to build a simple example that is not based on egret. Please let me know if it's required.

Looking forward to hearing from. Thank you! Kind regards, Simon

SimonRubenDrauz commented 2 years ago

Hi there again, I tried to find out a bit more about the problem and realized the following: If I run: solver.solve(model, tee=solver_tee, symbolic_solver_labels=False, load_solutions=False, **solve_method_options) passing symbolic_solver_labels=False it is not working. However, if I don't pass it at all: solver.solve(model, tee=solver_tee, load_solutions=False, **solve_method_options) at least the solver is returning a solution.

However, then the next error occurs when I call model.solution.load_from(results) and 'results' are the return of 'results = solver.solve(...)'. Following error occurs then:

AttributeError: Unknown attribute `_cuid' for object with type <class 'pyomo.opt.results.solution.Solution'>

Looking forward to your answer. (If I did any mistake in the parametrizing, sry for that, I am quite new to pyomo). Cheers, Simon

blnicho commented 1 year ago

@SimonRubenDrauz I'm cleaning up old issues and noticed that you never got a reply. Is this still an issue for you?

SimonRubenDrauz commented 1 year ago

Hi @blnicho, yes, the error still occurs, even though I updated all packages.

jsiirola commented 1 year ago

This is likely related to #2958