Pyomo / pyomo

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

scaling_factor is not compatible with Baron solver #2332

Closed damdaepark closed 2 years ago

damdaepark commented 2 years ago

Summary

Pyomo's scaling_factor functionality is not compatible with Baron solver.

Error Message

Backend QtAgg is interactive backend. Turning interactive mode on.
Traceback (most recent call last):
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "c:\Users\Damdae\.vscode\extensions\ms-python.python-2022.2.1924087327\pythonFiles\lib\python\debugpy\__main__.py", line 45, in <module>
    cli.main()
  File "c:\Users\Damdae\.vscode\extensions\ms-python.python-2022.2.1924087327\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 444, in main
    run()
  File "c:\Users\Damdae\.vscode\extensions\ms-python.python-2022.2.1924087327\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\runpy.py", line 265, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "c:\Users\Damdae\OneDrive - SNU\Graduate\Project\Modeling\Biopharm\script\modeling\main.py", line 54, in <module>
    main(target)
  File "c:\Users\Damdae\OneDrive - SNU\Graduate\Project\Modeling\Biopharm\script\modeling\main.py", line 38, in main
    m, results = runsolver(m, solver='baron', scaling=True, tee=True)
  File "c:\Users\Damdae\OneDrive - SNU\Graduate\Project\Modeling\Biopharm\script\modeling\util.py", line 121, in runsolver
    results = m_scaled.solver.solve(m_scaled, tee=tee)
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\opt\base\solvers.py", line 569, in solve
    self._presolve(*args, **kwds)
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\opt\solver\shellcmd.py", line 205, in _presolve
    OptSolver._presolve(self, *args, **kwds)
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\opt\base\solvers.py", line 666, in _presolve
    self._convert_problem(args,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\solvers\plugins\solvers\BARON.py", line 275, in _convert_problem
    return OptSolver._convert_problem(self,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\opt\base\solvers.py", line 717, in _convert_problem
    return convert_problem(args,
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\opt\base\convert.py", line 100, in convert_problem
    problem_files, symbol_map = converter.apply(*tmp, **tmpkw)
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\solvers\plugins\converter\model.py", line 123, in apply
    instance.write(
  File "C:\Users\Damdae\anaconda3\envs\arena\lib\site-packages\pyomo\core\base\block.py", line 1822, in write
    (filename, smap) = problem_writer(self,
  File "pyomo\repn\plugins\baron_writer.pyx", line 548, in pyomo.repn.plugins.baron_writer.ProblemWriter_bar.__call__
  File "pyomo\repn\plugins\baron_writer.pyx", line 549, in pyomo.repn.plugins.baron_writer.ProblemWriter_bar.__call__
  File "pyomo\repn\plugins\baron_writer.pyx", line 691, in pyomo.repn.plugins.baron_writer.ProblemWriter_bar._write_bar_file
  File "pyomo\repn\plugins\baron_writer.pyx", line 275, in pyomo.repn.plugins.baron_writer.ProblemWriter_bar._write_equations_section
ValueError: The BARON writer can not export suffix with name 'scaling_factor'. Either remove it from the model or deactivate it.

Information on your system

Pyomo version: 6.2 Python version: 3.8.12 Operating system: Windows 10 (64bit) How Pyomo was installed (PyPI, conda, source): PyPI Solver (if applicable): Baron

Additional information

jsiirola commented 2 years ago

Suffix components are mechanisms for communicating extra information / annotations to the solver / transformation as part of the target model. They are (somewhat by definition) solver- or transformation-specific, and whether or not a particular solver interface supports a particular Suffix is up to the solver.

In this case, (to my knowledge) BARON does not support a mechanism for rescaling a problem internally, so I believe the error message is correct. You will probably need to explicitly rescale your model before passing it to BARON (one approach is to use the core.scale_model transformation; see https://github.com/Pyomo/pyomo/blob/6.3.0/pyomo/core/plugins/transform/scaling.py).