【问题标题】:Modelling Conway's game of life in integer linear programming?在整数线性规划中建模康威的人生游戏?
【发布时间】:2015-07-20 21:48:47
【问题描述】:

我正在尝试使用整数线性规划对 Conway's game of life 规则进行建模,但我坚持使用其中的一条规则。

我认为有限 n x n 网格。网格中的每个单元格都与一个变量 X(i,j) 相关联,如果该单元格已死,则该变量的值为 0,如果该单元格还活着,则其值为 1

我对静物特别感兴趣,即根据规则,从一瞬间到下一瞬间都不会改变的配置。

为了找到它们,我对每个单元格的邻居数量施加了限制。所以,一个活着的细胞要保持静止,它必须有23 邻居,这很容易表达:

2(1-X(i,j)) + Σ(i,j) >= 2

-5(1 - X(i,j)) + Σ(i,j) <= 3

其中Σ(i, j)(i, j) 的邻居的总和(假设网格之外的值都是0s)。

如果X(i,j) == 0 则第一个加数保证约束条件得到满足。当X(i, j) == 1 约束保证我们有静物。

问题是另一条规则:一个死单元要保持死状态,它必须有任意数量的不同于3 的邻居。 但是,AFAIK 你不能在约束中使用!=

我最接近的是:

X(i, j) + |Σ(i, j) - 3| > 0

这确实表达了我想要的,但问题是我不认为可以那样使用绝对值(只能表达单个变量的绝对值。或者有没有办法表达这种特殊情况?)。

我想知道,有没有标准的方式来表达!=? 我在想也许我应该使用多个不等式而不是单个不等式(例如,对于每个可能的三重/四重邻居......),但我想不出任何明智的方法来实现这一点。

或者可能有某种方式滥用优化函数来惩罚这种情况,因此,获得一个最优值会产生一个正确的解决方案(或者说这是不可能的,具体取决于值)。

是否有人能够使用 线性 不等式和变量 X(i, j)(最终加上一些新变量)来表达该约束?

【问题讨论】:

    标签: modeling linear-programming conways-game-of-life


    【解决方案1】:

    标准表达方式

    是将其表示为

    通过引入一个新的二进制变量来指示哪个不等式成立。

    这在第 7.4 节 here 进行了解释。

    简而言之,如果我们这样定义y

    那么我们需要添加约束

    在哪里

    这是对其建模的标准方法,但在特定应用中可能有更好的方法。通常,总和的界限越紧,求解器的性能就越好。

    【讨论】:

    • 在这里看起来很容易应用。事实上,我相信这在某种程度上是我对 slobs 案例所做的,尽管在这种情况下它甚至不需要添加额外的变量。这里的界限非常严格,因为每个单元格都是从 0 到 8 个邻居。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    相关资源
    最近更新 更多