在python中编写非负流变量

时间:2019-12-07 13:07:47

标签: python gurobi

我正在使用Gurobi解决Python中的设施问题,决策变量之一是非负流变量g_ij > 0,用于表示设施之间的连接。也就是说,{且仅当g_ij > 0y_i = 1y_j = 1,如果设施位于站点y_i = 1上则i,否则0,则g_ij*(d_ij - k) >= 0。 / p>

我的约束之一是g_ij

其中:

d_ij是非负流量变量

i是设施jk之间的距离(以公里为单位)

Xi公里

也就是说,设施jX之间的最大允许距离为g_ij公里

我将变量0作为具有下界1和上限m = Model("flowTest") n = 10 g = {} for i in range(n): for j in range(n): g[(i,j)] = m.addVar(lb=0, ub=1, vtype=GRB.CONTINUOUS, name="g%d%d" % (i,j)) 的连续变量:

for i in range(n):
    for j in range(n):
        m.addConstr(g[(i,j)] * (d[(i,j)] - k) >= 0)

和约束:

g_ij

但是我得到了一个不可行的解决方案。我很确定这是因为g_ij流变量。

能发现错误或建议如何编程{{1}}变量的人吗?

1 个答案:

答案 0 :(得分:1)

您对最大距离的约束是错误的:

如果d_ij是设施之间的距离,而k是您允许的最大距离,则约束应为: g_ij*(k - d_ij) >= 0,而不是g_ij*(d_ij - k) >= 0

否则,如果(d_ij - k)<= 0之内,则术语d_ij将始终为k,这意味着g_ij不能为正。