尝试使用quicksum对图表中节点组合的求和进行编码以进行gurobi优化

时间:2015-08-31 08:06:20

标签: python networkx gurobi integer-programming

我试图使用gurobi和networkx将其编码为python,

对于N

中的每个i,

S> = = quicksum(对于j中的j为uij)

我的代码是

import gurobipy as grb
import networkx as nx

g = nx.Graph()
g.add_edges_from(edges)

for i in g.nodes_iter():
     m.addConstr(S >= grb.quicksum(u[i,j] for j in g.nodes_iter()))

问题是我得到了Key Error(1,1),因为我没有边缘(1,1)

但我确实希望对节点中的每个i求和,即连接到特定节点i的所有j的所有uij的总和。

这不是一个程度问题,它实际上是对连通分量进行求和,因此如果i和j之间存在通路,则uij为1。我把它编码为关键节点检测问题。

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:0)

您希望总和刚好位于图中的节点上。 networkx有一个方法neighbors_iter可以做到这一点

for i in g.nodes_iter():
 m.addConstr(S >= grb.quicksum(u[i,j] for j in g.neighbors_iter(i)))

在任何情况下,除非您只使用非常密集的图形,否则应该避免遍历所有节点对。