【发布时间】:2012-09-19 17:58:30
【问题描述】:
最小化瓷砖重新排序问题:
假设我有以下对称的 9x9 矩阵,N 个粒子之间的 N^2 相互作用:
(1,2) (2,9) (4,5) (4,6) (5,8) (7,8),
这些是对称的相互作用,所以它隐含地暗示存在:
(2,1) (9,2) (5,4) (6,4) (8,5) (8,7),
在我的问题中,假设它们以矩阵形式排列,仅显示上三角:
t 0 1 2 (tiles)
# 1 2 3 4 5 6 7 8 9
1 [ 0 1 0 0 0 0 0 0 0 ]
0 2 [ x 0 0 0 0 0 0 0 1 ]
3 [ x x 0 0 0 0 0 0 0 ]
4 [ x x x 0 1 1 0 0 0 ]
1 5 [ x x x x 0 0 0 1 0 ]
6 [ x x x x x 0 0 0 0 ]
7 [ x x x x x x 0 1 0 ]
2 8 [ x x x x x x x 0 0 ]
9 [ x x x x x x x x 0 ] (x's denote symmetric pair)
我有一些在 3x3 瓦片中计算的操作,并且任何包含至少一个 1 的 3x3 都必须完全计算。上例至少需要 5 个图块:(0,0), (0,2), (1,1), (1,2), (2,2)
但是,如果我通过排列输入来交换第 3 列和第 9 列(以及自对称矩阵以来的行):
t 0 1 2
# 1 2 9 4 5 6 7 8 3
1 [ 0 1 0 0 0 0 0 0 0 ]
0 2 [ x 0 1 0 0 0 0 0 0 ]
9 [ x x 0 0 0 0 0 0 0 ]
4 [ x x x 0 1 1 0 0 0 ]
1 5 [ x x x x 0 0 0 1 0 ]
6 [ x x x x x 0 0 0 0 ]
7 [ x x x x x x 0 1 0 ]
2 8 [ x x x x x x x 0 0 ]
3 [ x x x x x x x x 0 ] (x's denote symmetric pair)
现在我只需要计算 4 个图块:(0,0)、(1,1)、(1,2)、(2,2)。
一般问题:
给定一个 NxN 稀疏矩阵,找到一个重新排序以最小化必须计算的 TxT 瓦片的数量。假设 N 是 T 的倍数。通过尝试 N 可以找到最优但不可行的解决方案!输入排序的排列。
对于启发式方法,我尝试了带宽最小化例程(例如 Reverse CutHill McKee)、Tim Davis 的 AMD 例程,但到目前为止都无济于事。我不认为对角化是正确的方法。
这是一个示例起始矩阵:
http://proteneer.com/misc/out2.dat
希尔伯特曲线:
RCM:
莫顿曲线:
【问题讨论】:
-
只是第一个想法(我还没有喝第一杯咖啡,所以不要抱太大希望)——如果贪心重排序算法不是最优的,模拟退火通常会得到很好的结果。也就是说,对于每个可能的“移动”(一列/行),您获得了多少改进?
-
一般来说,单列/行交换很难(并且几乎不可能)提高分数,其中分数是要计算的 TxT 瓦片数。在现实情况下,大多数瓷砖已经至少有两个 1。一次交换可能永远无法移除瓷砖。更好的评分功能肯定会有所帮助。
-
当你说“但是,如果我通过排列我的输入来交换第 3 列和第 9 列(以及自从它是对称矩阵以来的行)。”您的意思是任何给定的行都可以与任何其他行交换吗?如果要交换的任一行中的列已经被交换,这有关系吗?此外,在您的示例中,当第 3 列与第 9 列交换时 - x 值似乎没有被交换,然后为第 3 列中的 x 值指定了零,现在在第 9 列中。所以,如果列8 将与第 1 列交换,是否允许?
-
@BobBryan 说明上述情况的更好方法是考虑元组的邻居列表: (1,2) (2,9) (4,5) (4,6) (5,8 ) (7,8),它们是对称的,所以它隐含地暗示存在一个 (2,1) (9,2) (5,4), .. 等。两个矩阵都代表这个邻居列表。
-
@proteneer: 莫顿曲线能不能说的更具体一点?这是 z 阶莫顿曲线还是只是希尔伯特曲线的 4 个副本,以美国数学家之后的莫顿曲线名称拼接在一起?
标签: algorithm permutation combinatorics sparse-matrix