用python编程非负流变量

2024-06-02 15:03:32 发布

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

我正在用Python和Gurobi解决一个设施问题,其中一个决策变量是非负流变量g_ij > 0,用于表示设施之间的连接。也就是说,g_ij > 0当且仅当y_i = 1y_j = 1其中y_i = 1如果设施位于i站点,否则0。你知道吗

我的一个约束是g_ij*(d_ij - k) >= 0

其中:

g_ij是非负流量变量

d_ij是设施ij之间的距离(单位:km)

kX公里

也就是说,设施ij之间的最大允许距离为Xkm

我把变量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变量?你知道吗


Tags: in距离formodel站点单位range流量
1条回答
网友
1楼 · 发布于 2024-06-02 15:03:32

关于最大距离的限制是错误的:

如果d_ij是设施之间的距离,k是允许的最大距离,那么您的约束应该是: g_ij*(k - d_ij) >= 0而不是g_ij*(d_ij - k) >= 0。你知道吗

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

相关问题 更多 >