为什么在使用后会得到“gurobieror:Variable not in model”模型.复制()?

2024-10-01 11:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用不同的约束集优化模型,但是这些约束的子集对于每个模型都是相同的。我的想法是构建一个基本模型,其中包含每次需要的所有变量和所有约束条件。不过,它看起来不像古罗比模型.复制()方法以我想象的方式复制变量。这是一个非常简单的版本,我希望它能显示出我得到的错误。在

>>> from gurobipy import Model
>>> m0 = Model("test")
>>> v = m0.addVar(lb=-1, ub=1)
>>> m0.update()
>>> print m0
<gurobi.Model Continuous instance test: 0 constrs, 1 vars, Parameter changes: LogFile=gurobi.log>
>>> print v in m0.getVars()
True

>>> m = m0.copy()
>>> print m
<gurobi.Model Continuous instance test_copy: 0 constrs, 1 vars, Parameter changes: LogFile=gurobi.log>
>>> print v in m.getVars()
True

>>> m0.addConstr(v <= 0)
<gurobi.Constr *Awaiting Model Update*>
>>> m0.update()
>>> print m0
<gurobi.Model Continuous instance test: 1 constrs, 1 vars, Parameter changes: LogFile=gurobi.log>

>>> m.addConstr(v >= 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "model.pxi", line 2196, in gurobipy.Model.addConstr (../../src/python/gurobipy.c:66304)
  File "model.pxi", line 2089, in gurobipy.Model.__addConstr (../../src/python/gurobipy.c:64663)
gurobipy.GurobiError: Variable not in model

>>> print m
<gurobi.Model Continuous instance test_copy: 0 constrs, 1 vars, Parameter changes: LogFile=gurobi.log>
  1. 为什么m.getVars()时m.addconst(v>;=0)找不到变量v 清楚地表明v在模型中?在
  2. 有没有其他方法可以在中重用同一组变量和约束 为了避免从头开始重建每个模型?在

软件:在OS X El Capitan上的Python2.7.11和Gurobi6.5(也在Ubuntu15.04上测试过)


Tags: instancein模型testmodelparametervarscontinuous
1条回答
网友
1楼 · 发布于 2024-10-01 11:35:05

关于为什么m.getVars()中的v在原始示例中返回True,我找不到问题1的明确答案。我想“in”只是比较对象内部的值,而不是对象本身,但是我没有这个来源。在

关于问题2,我找到了一个解决方案:

  1. 用名称创建变量,保存名称。在
  2. 复制模型。在
  3. 使用名称映射副本中的变量。在

简单示例:

from gurobipy import Model
m0 = Model("test")
v_name = 'v'
v0 = m0.addVar(lb=-1, ub=1, name=v_name)
m0.update()

m = m0.copy()
# returns True
print v0 in m.getVars()

m0.addConstr(v0 <= 0)
m0.update()
# won't work
#m.addConstr(v0 >= 0)
# will work
v = m.getVarByName(v_name)
m.addConstr(v >= 0)
m.update()

更复杂的例子:

^{pr2}$

。。。等等。在

相关问题 更多 >