【发布时间】:2015-07-20 21:48:47
【问题描述】:
我正在尝试使用整数线性规划对 Conway's game of life 规则进行建模,但我坚持使用其中的一条规则。
我认为有限 n x n 网格。网格中的每个单元格都与一个变量 X(i,j) 相关联,如果该单元格已死,则该变量的值为 0,如果该单元格还活着,则其值为 1。
我对静物特别感兴趣,即根据规则,从一瞬间到下一瞬间都不会改变的配置。
为了找到它们,我对每个单元格的邻居数量施加了限制。所以,一个活着的细胞要保持静止,它必须有2 或3 邻居,这很容易表达:
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