【问题标题】:pyomo mindtpy example program when run becomes unfeasible for binary variablepyomo mindtpy 示例程序在运行时对二进制变量变得不可行
【发布时间】:2020-05-30 20:17:40
【问题描述】:

所以我用 anaconda 安装了 pyomo、glpk 和 ipopt,

当我在这里运行示例代码时:https://pyomo.readthedocs.io/en/stable/contributed_packages/mindtpy.html

from pyomo.environ import *


model = ConcreteModel()

model.x = Var(bounds=(1.0,10.0),initialize=5.0)
model.y = Var(within=Binary)

model.c1 = Constraint(expr=(model.x-3.0)**2 <= 50.0*(1-model.y))
model.c2 = Constraint(expr=model.x*log(model.x)+5.0 <= 50.0*(model.y))

model.objective = Objective(expr=model.x, sense=minimize)
SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt',tee=True) 

model.objective.display()
model.display()
model.pprint()

我得到二进制变量显然变得不可行的输出:

python minlpex.py 
INFO: ---Starting MindtPy---
INFO: Original model has 2 constraints (2 nonlinear) and 0 disjunctions, with
    2 variables, of which 1 are binary, 0 are integer, and 1 are continuous.
INFO: NLP 1: Solve relaxed integrality
INFO: NLP 1: OBJ: 1.0  LB: 1.0  UB: inf
INFO: ---MindtPy Master Iteration 0---
INFO: MIP 1: Solve master problem.
WARNING: Empty constraint block written in LP format - solver may error
Traceback (most recent call last):
  File "minlpex.py", line 13, in <module>
    op.SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt',tee=True) 
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/contrib/mindtpy/MindtPy.py", line 370, in solve
    MindtPy_iteration_loop(solve_data, config)
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/contrib/mindtpy/iterate.py", line 30, in MindtPy_iteration_loop
    handle_master_mip_optimal(master_mip, solve_data, config)
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/contrib/mindtpy/mip_solve.py", line 62, in handle_master_mip_optimal
    config)
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/contrib/gdpopt/util.py", line 199, in copy_var_list_values
    v_to.set_value(value(v_from, exception=False))
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/core/base/var.py", line 173, in set_value
    if valid or self._valid_value(val):
  File "/anaconda3/envs/py36/lib/python3.6/site-packages/pyomo/core/base/var.py", line 185, in _valid_value
    "domain %s" % (val, type(val), self.domain))
ValueError: Numeric value `0.22709088987977885` (<class 'float'>) is not in domain Binary

所以我有点困惑,因为这是提供的代码,我不希望它会出现这样的错误。所以我觉得我搞砸了,或者我缺少一些必需的库?

非常感谢。

【问题讨论】:

    标签: pyomo


    【解决方案1】:

    看来 conda pyomo 安装或 ipopt 安装一定有问题。

    当我使用 pip for ipopt 重新安装并从 github 源编译 pyomo 时,一切正常。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2016-10-21
      • 2010-10-02
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多