我正在使用Gurobi解决Python中的设施问题,决策变量之一是非负流变量g_ij > 0
,用于表示设施之间的连接。也就是说,{且仅当g_ij > 0
和y_i = 1
时y_j = 1
,如果设施位于站点y_i = 1
上则i
,否则0
,则g_ij*(d_ij - k) >= 0
。 / p>
我的约束之一是g_ij
其中:
d_ij
是非负流量变量
i
是设施j
和k
之间的距离(以公里为单位)
X
是i
公里
也就是说,设施j
和X
之间的最大允许距离为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}}变量的人吗?
答案 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
不能为正。