ノードのセットがあるとします。一部のノードはプロデューサー、一部はコンシューマー、一部はルーターです。各ノードには、1 日に受け入れることができるユニットの最大数と、1 日に送信できるユニットの最大数を定義する最大スループットがあります (この場合、受け入れと送信は互いに干渉しません)。各ノードにはユニット用のストレージ容量もあり、フローの変動に対応できます。また、各ノードは最大 8 つの近くのノード (平面上) とのみアウト接続でき、同じ制限がイン接続にも適用されます。
私はすでに、グラフを指定してノードを列挙し、次のノードにユニットをプッシュする十分な仕事をするヒューリスティックを持っています。各ノードを列挙し、max(ceil(remaining-sendable-units/remaining-following-nodes), left-receivable-units-at-receiver) を各ターゲット ノードに送信します。
ここで、ノードを自動的に見て、十分なフローを実現するためにグラフ トポロジをどのようにするかを決定する方法が必要です。私の基本的なアイデアは、各ノードに「責任」を割り当てることでした。最初は、それらが消費したユニット数に相当します。次に、n1 から n2 にエッジを追加すると、n2 の責任の一部が n1 に与えられます。しかし、ノードが消費できる量とノードが受け入れる量の違いがアルゴリズムを混乱させ、私をぐるぐる回らせることにすぐに気付きました。
編集 各プロデューサー/コンシューマーによって消費される量は、時間の経過とともに変化する可能性があり (最大値を下回る)、ノードを追加または削除できます。
簡単なアイデアはありますか?