好的,这是一个抽象的算法挑战,它将保持抽象,因为这是我将要使用它的最高机密。
假设我们有一组对象 O = {o_1, ..., o_N} 和一个对称相似矩阵 S,其中 s_ij 是对象 o_i 和 o_j 的成对相关性。
还假设我们有一个具有离散位置的一维空间,可以放置对象(例如有 N 个连续的盒子或供人使用的椅子)。
有了一定的位置,我们可以测量从一个对象的位置移动到另一个对象的位置的成本,作为我们到达目标之前需要经过的框的数量乘以它们的成对对象相似度。在该位置之后或之前从一个位置移动到该位置的成本为零。
想象一个例子,对于三个对象,我们有以下相似度矩阵:
1.0 0.5 0.8
S = 0.5 1.0 0.1
0.8 0.1 1.0
那么,树框中对象的最佳排序显然是:
[o_3] [o_1] [o_2]
此排序的成本是从一个对象移动到所有其他对象的成本(计数框)的总和。所以这里我们只计算 o_2 和 o_3 之间的距离等于 1box * 0.1sim = 0.1,与以下相同:
[o_3] [o_1] [o_2]
另一方面:
[o_1] [o_2] [o_3]
成本 = 成本(o_1-->o_3)= 1box * 0.8sim = 0.8。
目标是确定 N 个对象在可用位置的位置,以使上述所有可能的对象对的总成本最小化!
一个类比是想象我们只有一排并排的桌子和椅子(就像盒子一样),你需要让 N 个人坐在椅子上。现在那些人有一些关系,那就是-让我们说-他们中的一个人想要与另一个人交谈的可能性有多大。这是站起来经过许多椅子并与那里的人交谈。当人们坐在两个连续的椅子上时,他们不需要移动就可以互相交谈。
那么我们如何才能放下这些 ppl 以使两个 ppl 之间的每个距离成本最小化。这意味着在夜间,客人步行的总距离接近最低限度。
贪婪搜索是……好吧,算了吧!我很想知道是否有这样的问题的标准公式,我可以找到一些文献,以及不同的搜索方法(例如组合优化领域的动态规划、禁忌搜索、模拟退火等)。
期待听到你的想法。
PS。我的问题与这个线程Algorithm for ordering a list of Objects有一些共同点,但我认为在这里它最好作为问题提出,并且可能略有不同。