我正在用Python和Gurobi解决一个设施问题,其中一个决策变量是非负流变量g_ij > 0
,用于表示设施之间的连接。也就是说,g_ij > 0
当且仅当y_i = 1
和y_j = 1
其中y_i = 1
如果设施位于i
站点,否则0
。你知道吗
我的一个约束是g_ij*(d_ij - k) >= 0
其中:
g_ij
是非负流量变量
d_ij
是设施i
和j
之间的距离(单位:km)
k
是X
公里
也就是说,设施i
和j
之间的最大允许距离为X
km
我把变量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
变量?你知道吗
关于最大距离的限制是错误的:
如果
d_ij
是设施之间的距离,k
是允许的最大距离,那么您的约束应该是:g_ij*(k - d_ij) >= 0
而不是g_ij*(d_ij - k) >= 0
。你知道吗否则,如果
d_ij
在k
之内,则术语(d_ij - k)
将始终是<= 0
,这意味着g_ij
不能为正。你知道吗相关问题 更多 >
编程相关推荐