最大化数字循环排列的得分

时间:2014-10-30 12:44:57

标签: algorithm search tree permutation maximize

我正在寻找一种有效的算法来解决在1-12之间安排一组循环数字以获得最高分数的问题。

排列的得分由其所有相邻对的得分总和给出

要获得相邻对(a,b)的分数,请计算以下步骤:

1. Find x such that (a+x) mod 12 = b
2. Look up x in a score table
3. The value in the score table at index 'x' is the score of the pair (a,b).

对于每个相邻的对重复这个,并且总和是该安排的分数。

Here is an example:

Suppose the score table is [5,4,6,7,2,7,-2,-6,-8,-2,6,12,13]

Consider these numbers: 5, 12, 8, 9

For each adjacent pairs,
the values for x are:   5 -> 12: 7
                        12 -> 8: 8
                        8 -> 9:  1
                        9 -> 5:  8

The values for score[x] are:
                        score[7] = -6
                        score[8] = -8
                        score[1] = 4
                        score[8] = -6

The sum of the score[x] values is: (-6) + (-8) + (4) + (-6) 
                                   = -18

目标是提出一种算法,有效地安排数字以最大化分数,给定数字本身 - 最多20个在1到12之间 - 和分数表。

非常感谢,

1 个答案:

答案 0 :(得分:0)

您可以使用精确的TSP求解器解决此问题。

想象一下,有一组城市,每个都有一个"值"。我们会说城市x的价值是V(x)。现在想象一下,从城市xy的旅行费用为S(V(y) - v(X) (mod 12))。请注意,S是您的分数表,V(y) - V(x) (mod 12)是要在分数表中查找的值。

TSP的目标是找到您应该访问所有城市的订单,以优化您的成本 - 在这种情况下,您希望最大化您的成本。 (或者,您可以将评分功能设为负值并最大限度地降低成本。)

也就是说,TSP会为您提供优化分数的城市集合的排列。由于您的城市实际上是您在置换时感兴趣的值,因此它会为您提供值,从而产生最佳分数。

所以..查找一个程序或库,可以指定从城市x飞到城市y的费用,然后让它运行,它会给你城市的最佳排列 - 然后您可以使用值(V(id))替换城市ID,以获得您正在寻找的最佳解决方案。

您也可以编写自己的TSP求解器 - 分支&绑定技术看起来很受欢迎。