【问题标题】:Minimum Tile Ordering最小瓷砖订购
【发布时间】: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


【解决方案1】:

您可以尝试几个众所周知的选项(其中一些您有,但仍然存在):

  • (Reverse) Cuthill-McKee 减少了矩阵带宽,使条目靠近对角线。
  • Approximage Minimum Degree - 一种轻量级的减少填充的重新排序。
  • 稀疏 LU/LL' 分解的填充减少重新排序(METISSCOTCH) - 计算量很大。
  • 空间填充曲线重新排序(these lines 中的某些内容)
  • 用于 2D 的四叉树或用于 3D 问题的八叉树 - 您将粒子分配给四边形/八分圆,然后根据四边形/八分圆 ID 对它们进行编号,在某种意义上类似于空间填充曲线。
  • Self Avoiding Walk 用于结构化网格以遍历网格点,使得所有点只被访问一次
  • 在稀疏矩阵-向量乘法的背景下,已经对稀疏矩阵项的阻塞进行了大量研究。许多研究人员都试图为此目的找到良好的重新排序(我没有关于该主题的完美概述,但请查看例如this paper

所有这些都倾向于在您的矩阵中找到结构,并且在某种意义上将非零条目分组。既然你说你处理粒子,这意味着你的连接图在某种意义上是“局部的”,因为粒子相互作用的空间局部性。在这种情况下,这些方法应该很有用。

当然,它们不能提供问题的确切解决方案 :) 但是它们通常用于这种情况,因为它们在实践中产生了非常好的重新排序。我想知道你说你尝试的方法失败了是什么意思?您希望找到最佳解决方案吗?当然,与随机矩阵排序相比,它们改善了这种情况。

编辑让我简要介绍几张图片。我创建了一个由 20 节点砖元素组成的 3D 结构化笛卡尔网格。我匹配了网格的大小,使其与您的相似(约 1000 个节点)。此外,每行的非零条目数并不算太远(在我的情况下为 51-81,在您的情况下为 59-81,但是两者都有非常不同的分布)下面的图片显示了 RCM 和非周期性网格(左)和具有完全 xyz 周期性的网格(右)的 METIS 重新排序:

下一张图片显示了使用 METIS 和填充减少重新排序的相同矩阵

区别是惊人的 - 周期性的不良影响是显而易见的。现在你的矩阵用 RCM 和 METIS 重新排序了

哇。你有问题 :) 首先,我认为你的 rcm 有问题,因为我的看起来不一样;)另外,我确信你不能得出任何关于基于这个特定矩阵的重新排序的一般性和有意义的结论。这是因为您的系统尺寸非常小(大约小于 10x10x10 点),并且您的粒子之间似乎有相对长程的相互作用。因此,在如此小的系统中引入周期性对重新排序的不良影响比我在结构化案例中看到的要大得多。

我会通过关闭周期性来开始搜索良好的重新排序。一旦你有一个令你满意的重新排序,就引入定期交互。在您展示的系统中,几乎没有周期性:因为它非常小,并且因为您的交互是相当长的,至少与我的网格相比。在更大的系统中,周期性对模型中心的影响较小。

较小,但仍为负数。也许你可以改变你对周期性的方法?与其在矩阵中显式包含周期性连接,不如在没有这些的情况下构造和重新排序矩阵,并引入将周期性粒子绑定在一起的显式方程,例如:

V_particle1 = V_particle100

或者换句话说

V_particle1 - V_particle100 = 0

并将这些方程式添加到矩阵的末尾。这种方法称为拉格朗日乘数。这是它在我的系统中的样子

您保持非周期性系统的重新排序,并且周期性连接位于矩阵末尾的一个块中。当然,您可以将其用于任何其他重新排序。

下一个想法是您从重新排序的非周期性系统开始,并通过将周期性节点添加到它们映射到的行中来明确消除周期性节点的矩阵行。当然,您还应该消除这些列。

您是否可以使用这些取决于您对矩阵的操作。例如,拉格朗日乘数在对角线上引入 0 - 并非所有求解器都这样......

无论如何,这是一项非常有趣的研究。我认为由于您的问题的具体情况(据我了解 - 3D 中不规则放置的粒子,具有相当长的交互作用)使得矩阵条目分组变得非常困难。但我很好奇你最终会做什么。请告诉我!

【讨论】:

  • 我原本打算让它尽可能黑箱,而不引入坐标系。主要原因是我们正在处理的空间可以是周期性的(从拓扑上讲,是 3 维平面环面)。这是 AFAIK,不知道是否存在可以在周期性空间中保持局部性的空间填充曲线。希尔伯特曲线(通过简单地假设空间是非周期性的)是我们目前使用的,但我们最终会遇到边界问题。 CHMK、AMD、SAW、Morton 的表现都明显低于希尔伯特曲线。
  • hm 我不太熟悉拉格朗日乘数的工作原理。我必须阅读它。后一种选择似乎有点困难,当你说“剩下的数字”时,剩下的到底是什么?您是否考虑了中心 1 的所有 26 个周期性图像?
  • @proteneer 我现在看到我关于编号的评论令人困惑 - 我删除了它。昨天是星期五晚上很晚;)今晚晚些时候我会试着写点东西。一般的观点是,对明确包含周期性节点之间的连通性的矩阵进行重新排序会产生比相同系统更糟糕的重新排序,只是不是周期性的。因此,以另一种方式引入周期性可能对您有益(例如拉格朗日乘数,或对已重新排序的矩阵进行行列操作)。但这也取决于您以后如何处理矩阵...
  • 惊人的回复。是的,发布的示例有点愚蠢。事实上,它是在一个 3 埃、截止半径为 0.8 的周期盒中使用约 900 个原子完成的模拟。如果我理解拉格朗日乘数法,它似乎基本上是对所有周期性副本与某个特定原子有交互的原子进行显式副本,并将其解耦(此外,为这些替换副本引入新索引)。现在,增加矩阵的大小存在技术限制。另外,我很想知道瓷砖的数量。
  • 今晚晚些时候我还将试用 METIS,看看它在更真实的系统(24k 原子、6.223 埃、0.8 埃)上的表现如何。如果您给我发一封电子邮件,我可以向您发送更多信息(与该主题没有直接关系): gmail dot com 的 proteneer
【解决方案2】:

您可以查找 kd-tree、R-tree、四叉树或空间填充曲线等数据结构。尤其是空间填充曲线可以提供帮助,因为它可以减少维度并重新排列图块,从而可以向网格添加一些新信息。使用 9x9 网格,查看 peano 曲线可能会很好。 z 阶莫顿曲线更适合 2 格的幂。

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多