我有一个代理列表a = {a1, a2, a3,..., an}
,其中每个代理可以与零个或多个其他代理配对。例如,对于n = 6
,我可以有:
a1: a2, a3, a5
a2: a1, a3, a4
a3: a1, a2. a5
a4: a2
a5: a1, a3
a6:
每一对相互交互,并且每个代理作为交互的结果获得一个值(例如,他们可以玩游戏,但交互的细节可以在这里抽象掉)。我对基于给定的成对结构(例如上述)计算和存储这些交互的结果感兴趣。
显然,一个简单的算法将遍历每个代理,然后逐个计算与他的每个交互伙伴的成对交互。然而,同样明显的是,这种方法会重复一些(或可能很多)计算。使用上面的示例:
当我们完成 agenta1
时,我们已经获得了、 和的结果(a1, a2)
,因此当我们对 agent 、和进行计算时,这些对之间的后续计算就变得多余了,(a1, a3)
(a1, a5)
a2
a3
a5
一种改进的算法是在两个维度(即沿着代理本身和沿着它们各自的伙伴)按升序对输入结构进行排序,如上例所示,因此对于每个代理(例如a3
),我们只需要计算该代理 ( a3
) 与比他“更高”的代理 ( )a5
之间的交互,因为我们知道他与“下”伙伴 ( (a1, a3)
, (a2, a3)
) 之间的交互已经计算过了。
我想知道这个问题是否有不同的更好的算法?更好,我的意思是在时间和空间方面更有效的计算。