エージェントのリストがa = {a1, a2, a3,..., an}
あります。各エージェントは、0個以上の他のエージェントとペアになっている可能性があります。たとえば、の場合、次のn = 6
ようにできます。
a1: a2, a3, a5
a2: a1, a3, a4
a3: a1, a2. a5
a4: a2
a5: a1, a3
a6:
各ペアは相互作用し、各エージェントはこの相互作用の結果として値を取得します(たとえば、ゲームをプレイすることはできますが、相互作用の詳細はここで抽象化できます)。上記のような特定のペアワイズ構造に基づいて、これらの相互作用の結果を計算して保存することに興味があります。
明らかに、単純なアルゴリズムは、各エージェントを調べてから、相互作用する各パートナーとのペアワイズ相互作用を1つずつ計算することです。ただし、このアプローチが一部の(または潜在的に多くの)計算を複製することも明らかです。上記の例を使用すると:
エージェントの処理が終了するまでに、、、、およびa1
の結果はすでに取得されているため(a1, a2)
、エージェント、、、(a1, a3)
および、(a1, a5)
の処理を行うと、これらのペア間の後の計算が冗長になります。a2
a3
a5
改善されたアルゴリズムは、上記の例のように、入力構造を両方の次元で昇順で(つまり、エージェント自体とそれぞれのパートナーに沿って)並べ替えることです。これにより、各エージェント(たとえばa3
)について、このエージェント(a3
)と彼よりも「高い」エージェント()の間の相互作用は、彼自身と「低い」パートナー( 、)の間の相互作用がすでに計算されていることがa5
わかっているためです。(a1, a3)
(a2, a3)
この問題には別のより良いアルゴリズムがあるのだろうか?より良いのは、時間と空間の両方の観点から、より効率的な計算を意味します。