ノードのセットがあるとします。いくつかのノードはプロデューサーであり、一部は消費者であり、一部はルーターです。各ノードには最大スループットがあり、1日に受け付けることができるユニットの最大数と、1日に送信できるユニットの最大数を定義します(この場合、受け入れと送信はお互いに干渉しません)。各ノードには単位の記憶容量もあり、フローの変化に対処できます。また、各ノードは、(プレーン上の)最大8つの近隣ノードとだけアウト・コネクトすることができ、イン・コネクションにも同じ制限が適用されます。動的ディスクリートノードフロー制御のための良好なローカルヒューリスティックは何ですか?
私は既にグラフを与えられたノードを列挙し、ノードをフォローするノードにユニットをプッシュするヒューリスティックを既に持っています。それは各ノードを列挙し、各ターゲットノードにmax(ceil(残存送信可能ユニット/残存ノード)ノード、受信可能残存ユニット数)を送信する。
ここで、ノードを自動的に見て、十分なフローを得るためにグラフのトポロジをどのようにするかを決定する方法が必要です。私の基本的なアイデアは、最初は各ノードが消費したユニットの数に相当する「責任」を各ノードに割り当てることでした。次に、n1からn2へのエッジを追加すると、n2にn2の責任の一部が与えられます。しかし、私はすぐに、ノードが消費できる量とノードが受け取ることのできる量の違いがアルゴリズムを混乱させ、私をサークルに導きました。各プロデューサ/コンシューマによって消費
編集 量は、(いくつかの最大の下方に)時間とともに変化することができ、ノードを追加または削除することができます。
簡単なアイデアはありますか?
定常状態の解はおそらく良い近似を与えるだろうが、消費者が消費する量は日々変化する(最大限まで)ため、「動的」と言った理由がある。生産者にとっても同じことです。また、ノードは比較的頻繁に追加および削除されます。 –
OK。その場合、可能な限り、すべてのノードに完全な記憶容量をロードするだけの理由はありませんか? –
これは、最初の場所にストレージを持たないことと同等です。消費が上がるとノードは空になり、ノードが減少すると埋められます。しかし、ノードを満たすことが何もしないよりも優れているという一般的な考え方は正しいです。 –