将 variables/constraints 添加到 Gurobi 持久性时出现 AttributeErrors
AttributeErrors when adding variables/constraints to Gurobi persistent
我正在尝试通过添加 variables/constraints 修改模型并重新求解更新后的模型,遵循 the guide。
问题是这两种情况都因属性错误而失败,对于变量:
Traceback (most recent call last):
File "seqdesign.py", line 98, in <module>
main()
File "seqdesign.py", line 71, in main
problem._solver.add_var(problem._model.McBernoulliTrials)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/persistent_solver.py", line 153, in add_var
self._add_var(var)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 208, in _add_var
vtype = self._gurobi_vtype_from_var(var)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 377, in _gurobi_vtype_from_var
if var.is_binary():
AttributeError: 'IndexedVar' object has no attribute 'is_binary'
对于约束:
Traceback (most recent call last):
File "seqdesign.py", line 98, in <module>
main()
File "seqdesign.py", line 71, in main
problem._solver.add_constraint(problem._model.McBernoulliTrialsSetPositive)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/persistent_solver.py", line 132, in add_constraint
self._add_constraint(con)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 272, in _add_constraint
if is_fixed(con.body):
AttributeError: 'IndexedConstraint' object has no attribute 'body'
是我使用索引变量和约束的问题吗?如何在不将所有代码从 pyomo.environ
迁移到 pyomo.core
的情况下完成这项工作?
您不能将 IndexedVar
或 IndexedConstraint
传递给 add_var
和 add_constraint
方法。您必须遍历各个变量和约束并一次添加一个:
for v in my_var.values():
solver.add_var(v)
for c in my_con.values():
solver.add_constraint(c)
此外,您可以检查变量或约束是否使用 my_var.is_indexed()
或 my_con.is_indexed()
进行索引。
我正在尝试通过添加 variables/constraints 修改模型并重新求解更新后的模型,遵循 the guide。
问题是这两种情况都因属性错误而失败,对于变量:
Traceback (most recent call last):
File "seqdesign.py", line 98, in <module>
main()
File "seqdesign.py", line 71, in main
problem._solver.add_var(problem._model.McBernoulliTrials)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/persistent_solver.py", line 153, in add_var
self._add_var(var)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 208, in _add_var
vtype = self._gurobi_vtype_from_var(var)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 377, in _gurobi_vtype_from_var
if var.is_binary():
AttributeError: 'IndexedVar' object has no attribute 'is_binary'
对于约束:
Traceback (most recent call last):
File "seqdesign.py", line 98, in <module>
main()
File "seqdesign.py", line 71, in main
problem._solver.add_constraint(problem._model.McBernoulliTrialsSetPositive)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/persistent_solver.py", line 132, in add_constraint
self._add_constraint(con)
File "/home/edo/miniconda3/envs/spacers/lib/python3.7/site-packages/pyomo/solvers/plugins/solvers/gurobi_direct.py", line 272, in _add_constraint
if is_fixed(con.body):
AttributeError: 'IndexedConstraint' object has no attribute 'body'
是我使用索引变量和约束的问题吗?如何在不将所有代码从 pyomo.environ
迁移到 pyomo.core
的情况下完成这项工作?
您不能将 IndexedVar
或 IndexedConstraint
传递给 add_var
和 add_constraint
方法。您必须遍历各个变量和约束并一次添加一个:
for v in my_var.values():
solver.add_var(v)
for c in my_con.values():
solver.add_constraint(c)
此外,您可以检查变量或约束是否使用 my_var.is_indexed()
或 my_con.is_indexed()
进行索引。