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

Algorithm 最大化数字循环排列的分数,algorithm,search,tree,permutation,maximize,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). 对每个相邻的对重复此操作,总和为排列的分

我正在寻找一种有效的算法来解决在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之间)和分数表


非常感谢,

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

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

TSP的目标是找到您应该访问所有城市一次的顺序,以优化您的成本——在这种情况下,您希望最大化您的成本。(或者,您可以将评分函数设置为负值,并将成本降至最低。)

也就是说,TSP将为您提供一组城市的排列,以优化您的分数。因为你的城市实际上是你感兴趣的排列值,它会给你一个排列值,产生一个最佳分数

所以。。找到一个程序或库,它允许您指定从城市
x
飞往城市
y
的费用,然后让它运行,它将为您提供城市的最佳排列方式——然后您可以用值(
V(id)
)替换城市id,以获得您所寻找的最佳解决方案


您也可以编写自己的TSP求解器——分支和绑定技术看起来很流行。

问题是。。这看起来很像旅行商问题(TSP)。而以最佳方式解决这些问题并不总是很快。不过,你们没有大尺寸的套装,这可能是弥补的因素。我想我应该问问。。你是在寻找一个能找到最大分数的算法,还是一个很好的分数?我更喜欢最大分数。非常感谢。在这种情况下,寻找允许不对称和任意权重的精确TSP解算器。它的实现不会很简单,所以如果您可以利用预先存在的库,那就更好了。这里有一些。这里有一些关于TSP的讨论:因为分数也取决于访问的第一个和最后一个城市之间的分数,我需要改变算法吗?不应该改变——标准定义是找到一个循环。这意味着最后一个城市需要连接到第一个城市。