首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在python中编写非负流变量

在python中编写非负流变量
EN

Stack Overflow用户
提问于 2019-12-07 13:07:48
回答 1查看 115关注 0票数 0

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

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

其中:

g_ij是非负流变量

d_ij是设施点ij之间的距离(以公里为单位

kXkm

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

我将变量g_ij作为一个具有下界0和上界1的连续变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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))

以及约束条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in range(n):
    for j in range(n):
        m.addConstr(g[(i,j)] * (d[(i,j)] - k) >= 0)

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

有谁能发现错误或建议我如何对g_ij变量进行编程?

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 09:29:19

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59226292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文