向Gurobi persistent添加变量/约束时的AttributeErrors

2024-04-25 04:56:10 发布

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

我试图通过添加变量/约束并在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的情况下实现这一点


Tags: inpyaddhomevarliblinesite
1条回答
网友
1楼 · 发布于 2024-04-25 04:56:10

不能将IndexedVarIndexedConstraint传递给add_varadd_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()索引

相关问题 更多 >