pyint mindtpy示例程序,运行对于二进制变量变得不可行

问题描述 投票:0回答:1

所以我在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个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.