【问题标题】:Gurobi, How to change a continuous variable to a binary variableGurobi,如何将连续变量更改为二进制变量
【发布时间】:2015-05-22 21:45:38
【问题描述】:

我正在使用 gurobi-python 界面。无论如何将连续变量转换为二进制变量。我只是不想转换

m.addVar(lb=0, ub=1, vtype=GRB.CONTINUOUS)

m.addVar(lb=0, ub=1, vtype=GRB.BINARY). 

我必须用另一种方式来做,而不是使用

m.addVar() 

感谢您的反馈。

谢谢。

【问题讨论】:

  • 我在想我可以定义一个新的二进制变量,然后使它等于我当前的变量。这会起作用,但会对我的模型施加不必要的限制。

标签: python linear-programming gurobi integer-programming


【解决方案1】:

在 gurobi python API 中,您可以简单地在变量上设置 vtype 属性。如果您保存对变量的引用,这很容易在您的情况下,如果您创建一个变量

x = m.addVar(lb=0, ub=1, vtype=GRB.CONTINUOUS)

你可以设置它的属性

x.vtype = GRB.BINARY

您可以在这个更长的示例中看到它的工作原理。

import gurobipy  as grb
GRB = grb.GRB
m = grb.Model()

x = m.addVar(0.0, 1.0, vtype=GRB.CONTINUOUS)
y = m.addVar(0.0, 1.0, vtype=GRB.CONTINUOUS)
m.update()
# add constraints so that y >= |x - 0.75|
m.addConstr(y >= x-0.75)
m.addConstr(y >= 0.75 - x)
m.setObjective(y)
m.update()
m.optimize()
print x.X
# 0.75
x.vtype=GRB.BINARY
m.optimize()
print x.X
# 1.0

在第一次求解中,x 是连续的,因此 x 的最佳值为 0.75。在第二个求解中,x 是二进制的,因此 x 的最佳值为 1.0。

【讨论】:

  • 太棒了!谢谢您的答复!我认为我们不需要 m.addConstr(y > x-0.75)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
相关资源
最近更新 更多