【问题标题】:"Matrix decomposition" of a matrix with holonic sub structure具有完整子结构的矩阵的“矩阵分解”
【发布时间】:2010-09-13 21:29:06
【问题描述】:

在我开始之前,我必须说,对于那些有线性代数背景的人来说,这不是你所知道的矩阵分解。请阅读以下段落,以更清楚地了解我要解决的问题。

以下是矩阵及其子矩阵的显着属性/定义:

  1. 我有一个 SxP 矩阵,它形成了一个 S.P“盒子”的网格状结构。这是主矩阵

这就是(空)主矩阵的样子。矩阵中的每个正方形都简称为一个框。矩阵可以看作是一种“游戏板”,例如棋盘。纵轴使用区间尺度(即实数)测量,横轴使用单调递增的非负整数测量。

  1. 还有一个额外的子矩阵概念(如前所述)。子矩阵只是特定配置中的框的集合,并具有特定的编号和片段类型(请参见下面的黑白片段),分配给框。我有一组有限的这些 子矩阵 - 我将其称为我的 lexicon 或用于执行有效矩阵组合/分解的词汇表。

子矩阵的“正式”定义是它是包含在主矩阵中的 M 个框的配置,满足标准:

  • 1
  • 任意两个相邻框之间的“间隙”G(即距离)满足:1

垂直单位是主矩阵中垂直轴线之间的间隙。下图中,垂直单位为100。

上图展示了一个简单的子矩阵加法。带有橙色边框/框的单元是子矩阵 - 构成我词典一部分的公认单元。您会注意到我在子矩阵中引入了进一步的注释。这是因为(使用国际象棋类比),我可以在棋盘上使用两种类型的棋子。 B 表示黑色棋子,W(图中未显示)表示白色棋子。一个可识别的单元(或词素/子矩阵) 有一个简单的等价关系,允许在白色块和黑色块之间进行转换。这种关系可用于进一步分解子矩阵,以仅使用黑色块、白色块或两者的组合。

为了简单起见,我省略了指定等价关系。但是,如果有人觉得提出的问题在没有额外细节的情况下不是“太难”,我很乐意扩大范围。目前,我正努力使事情尽可能简单,以避免将人们与“信息过载”混淆。

  1. 子矩阵中的每个框都包含一个有符号整数,表示项目的单元数。盒子的每个“配置”(连同其有符号整数和棋子类型,即黑色或白色棋子)都被称为“可识别单元”。

  2. 子矩阵可以以重叠的方式放置在主矩阵中。无论“框”在哪里重叠,生成的子矩阵框中的单元数是组成框中单元数的总和(如上图第二张所示)。

问题变得有点困难,因为上面定义的“识别单元”有时会与其他“识别单元”组合形成另一个“识别单元” - 即子矩阵(即识别单元)是"holons"。例如,在上面的第二张图中,被添加到矩阵中的识别单元本身可以进一步分解为“更小的”子矩阵。

这种holarchy 类似于(在物理化学中)元素如何形成化合物,然后再形成更复杂的化合物(氨基酸、蛋白质等)。

回到我们的问题,给定一个主矩阵 M,我希望能够做到以下几点:

我。识别包含在主矩阵中的子矩阵(或识别的单元)。这是第一次“矩阵分解”。 (注意:子矩阵必须满足上面给出的标准)

二。对于每个已识别的子矩阵,我希望能够识别它是否可以进一步分解为 2 个或更多已识别的子矩阵。这个想法是迭代分解在上面步骤 i 中找到的子矩阵,直到达到指定的层次结构级别,或者直到我们有一个无法进一步分解的有限子矩阵集。

我正在尝试提出一种算法来帮助我完成上述 (i) 和 (ii)。我将在 C++、Python 或 C# 中实现逻辑(优先级越来越高),这取决于哪一个最容易做和/或我碰巧在哪个 sn-ps 中开始实现算法。

【问题讨论】:

  • “盒子”是指矩阵的一个元素吗?也就是说,“盒子”只是给定位置的无符号整数吗?您如何定义块之间的“距离”?你能举一个实际矩阵的例子,而不仅仅是数字相加吗?
  • 亚伦,我已经编辑了这个问题,试图回答你的问题。如果还有什么不清楚的地方,请告诉我。
  • 顺便说一句,我想知道这个问题是否同样(或更多)适合其他 stackexchange 社区之一?机器学习是最合适的,但既然存在这种情况,也许 stats.exchange 或 maths.exchange?我将其发布在 SO 上,因为我只对执行此操作的算法感兴趣(这可能是一种启发式算法)——我并不特别关心基础理论(如果有的话)
  • @skyeagle 我仍然不确定您如何定义距离。让我们使用词素添加的图片作​​为参考(1)最左边矩阵中+1B和-1B之间的距离是多少。 (2) 中间矩阵中两个-1B 之间的距离是多少 (3) 最右边矩阵中+1B 和-1B 之间的距离是多少。
  • 可能也值得在cstheory.stackexchange.commath.stackexchange.com 上提问

标签: c# c++ python


【解决方案1】:

我不确定我是否正确理解了这个问题。

所以首先你想要找到所有符合你的 2 标准的子矩阵。 这就像我认为的图分解问题或集合覆盖问题,您可以在其中使用递归函数并迭代矩阵以找到所有可用的子矩阵。

enum PieceTypes
{
    White,
    Black
}

class Box
{
    public PieceTypes PieceType { get; set; }

    public uint Units { get; set; }

    public int s, p;
    public Box(PieceTypes piecetype, uint units)
    {
        PieceType = piecetype;
        Units = units;
    }
}

class Matrix
{
    public Box[,] Boxes;
    public int Scale, S, P, MaxNum, MaxDist;
    public List<List<Box>> Configurations;
    public Matrix(int s, int p, int scale, int maxnum, int maxdist)
    {
        S = s;
        P = p;
        Scale = scale;
        Boxes = new Box[S, P];
        MaxNum = maxnum;
        MaxDist = maxdist;
        Configurations = new List<List<Box>>();
    }

    public void Find(List<Box> Config, int s, int p)
    {
        // Check the max number thats valid for your configuration
        // Check that the current p and s are inside matrix
        if (Config.Count() < MaxNum && s >= 0 && s < S && p >= 0 && p < P)
        {

            foreach (Box b in Config)
            {
                if (Valid(b, Boxes[s, p]))
                {
                    Boxes[s, p].s = s;
                    Boxes[s, p].p = p;
                    Config.Add(Boxes[s, p]);
                    break;
                }

            }
            Find(Config, s + 1, p);
            Find(Config, s - 1, p);
            Find(Config, s, p + 1);
            Find(Config, s, p - 1);
        }
        if (Config.Count() > 0) Configurations.Add(Config);
        Config.Clear();
    }

    public bool Valid(Box b1, Box b2)
    {
        // Create your dist funtion here
        // or add your extra validation rules like the PieceType
        if (Math.Sqrt((b1.s - b2.s) ^ 2 + (b1.p - b2.p) ^ 2) <= MaxDist && b1.PieceType == b2.PieceType) return true;
        else return false;
    }

}

我没有使用最好的数据结构,我简化了解决方案。我希望它对您有所帮助。

【讨论】:

  • 我刚看到这个。您提供的代码是一个很好的起点 - 谢谢
猜你喜欢
  • 2021-04-28
  • 2022-08-14
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多