免責事項:これは私が現在取り組んでいる学期のプロジェクトのためのものです。私の質問は、実装レベルの詳細に関するものであり、評価スキームの一部ではありません。私が書く論文のために私が提案している理論をテストする方法として、このコードを書いているだけです。
また、私はこの質問の答えを少し運が悪かったので、これをその質問の複製と見なさないでください。
問題:
グラフがあります(G =(V、E))。アルゴリズムのある時点で、複数のノード(たとえば、v_1, v_2, ..., v_n
)を1つのノード(たとえば)に「折りたたむ」ことによって、これを(ある意味で)ハイパーグラフに変換する必要がありますv
。問題のコンテキストでは、これは、のいずれかのノードと他のノードの間のE
エッジが、現在との間にあるように変更されるように、エッジを変更する必要があることを意味します。e
v_1, v_2, v_n
u
V
e
u
v
ノードの任意のペアの間に複数の異なるエッジが存在する可能性があることをキャプチャするには、各エッジに一意の識別子を作成する必要があります。私はIDを使用してこれを実行しようとしましたが、現在適切に実装できません。
これは私が試したものです:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = Edge._ID
Edge._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
ただし、新しいエッジをインスタンス化しようとすると、次のエラーが発生します。
>>> e = Edge(1,3,5,10,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "UnsplittableFlow.py", line 14, in __init__
self.id = Edge._ID; Edge._ID += 1
UnboundLocalError: local variable '_ID' referenced before assignment
編集:
いくつかの回答の提案により、インスタンス化時間エラーを修正することができました。ただし、別のエラーが発生します。これが私のコードとエラーです:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = self._ID; self._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
エラー:
>>> e = Edge(1,3,5,10,0)
>>> e.id
0
>>> Edge._ID
0
>>> f = Edge(2,3,5,10,0)
>>> f.id
0
>>> Edge._ID
0
助けていただければ幸いです
ありがとうございました