0

gurobi と networkx を使用して、これを Python にコーディングしようとしています。

S >= quicksum(N の j の場合は uij) N のすべての i について

私のコードは

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()))

問題は、エッジ (1,1) を持っていないので理にかなっている Key Error (1,1) を取得することです

しかし、ノード内のすべての i について合計したいのですが、特定のノード i に接続されているすべての j のすべての uij の合計です。

これは度数の問題ではなく、実際には連結成分を合計しているため、i と j の間に経路がある場合、uij は 1 です。これをクリティカル ノード検出問題としてコーディングしました。

助けてください!ありがとう!

4

1 に答える 1

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)))

いずれにせよ、非常に密集したグラフのみを操作している場合を除き、ノードのすべてのペアを反復することは避ける必要があります。

于 2015-08-31T15:24:22.860 に答える