这可能是一个重复的问题,但是我在堆栈溢出时找不到。
带一些变量,这些变量都代表某种机会。这意味着所有变量的值都介于零到一之间(包括两者之间)。这些值未知。但是,我有一些方程,其中一些或所有这些变量的结果是已知的。
例如,使用变量a
,b
,c
,x
和y
。它们的值都是0到1(含两者)之间的未知数。我有以下等式:
1: a + b + c = 1
2: a + b + x = 2
3: b + c + y = 2
4: a + x <= 1 -> 0 <= a + x <= 1
5: c + y <= 1 -> 0 <= c + y <= 1
解决此问题可获得以下结果:
2: a + x + b = 2
(something between 0 and 1) + b = 2
b = 2 - (something between 0 and 1)
1 <= b <= 2
b = 1 (since 0 <= b <= 1 applies too)
1: a + b + c = 1
a + 1 + c = 1
a + c = 0
a = -c
a = 0 (since 0 <= a <= 1 and 0 <= c <= 1 apply)
c = 0
2: a + b + x = 2 | 3: b + c + y = 2
0 + 1 + x = 2 | 1 + 0 + y = 2
x = 1 | y = 1
-> a = 0, b = 1, c = 0, x = 1 and y = 1
我在纸上解决了这个问题,我的实际目的是通过给每个未公开的单元分别分配一个变量x a b c y
来证明以下扫雷情况。由于x
,y
和b
成为一个,因此可以对其进行标记:
我的一般目的是使用这种技术来解决扫雷板,但是它可以在其他软件中使用。但是,如果我想让计算机使用此技术来解决扫雷板,那么计算机必须使用一种算法来解决这种情况,其中包括任意数量的变量和任意数量的方程式。是否有通用的算法可以做到这一点?如果有的话,我应该如何实现该算法?
使事情变得显而易见
- 方程式是一个变量或某些变量的总和,结果有限或恒定,始终为正。
- 变量是介于0到1(包括两者)之间的未知值。
- 该算法吸收具有相应变量名称的变量数量,以及定义一些变量的方程式。
- 该算法尝试计算尽可能多的值。无法确定的值仍然不确定。
答案 0 :(得分:3)
通常,您有一个N维向量空间,N个独立变量可以在该向量空间上变化。您的每个约束都定义了向量空间的一个区域,所有这些区域的交集就是您要确定的区域。实际上,您正在寻找该区域的最简单(最少复杂)描述,因为该区域已经由约束集合进行了描述。存在三种可能性:第一,该地区没有解决方案;第二,该地区没有解决方案。第二,该地区有有限数量的解决方案;第三,该地区有无数种解决方案。
您的第一步可能是将方程式(如果有的话)视为方程式系统,并使用一种求解方程式的算法来仅从方程式中解决尽可能多的问题。如果没有其他问题,则消除一些变量将有助于下一步。
1: a + b + c = 1
2: a + b + x = 2
3: b + c + y = 2
1: a = 1 - b - c
2: 1 - b - c + b + x = 2
3: b + c + y = 2
1: a = 1 - b - c
2: c = x - 1
3: b + x - 1 + y = 2
1: a = 1 - b - c
2: c = x - 1
3: b = 3 - x - y
1: a = y - 1
2: c = x - 1
3: b = 3 - x - y
这是我们所能做到的。接下来,我们将其替换为完整的不平等系统:
A: 0 <= a <= 1
B: 0 <= b <= 1
C: 0 <= c <= 1
D: 0 <= x <= 1
E: 0 <= y <= 1
F: 0 <= a + x <= 1
G: 0 <= c + y <= 1
A: 0 <= y - 1 <= 1
B: 0 <= 3 - x - y <= 1
C: 0 <= x - 1 <= 1
D: 0 <= x <= 1
E: 0 <= y <= 1
F: 0 <= y - 1 + x <= 1
G: 0 <= x - 1 + y <= 1
A: 1 <= y <= 2
B: 3 >= x + y >= 2
C: 1 <= x <= 2
D: 0 <= x <= 1
E: 0 <= y <= 1
F: 1 <= y + x <= 2
G: 1 <= x + y <= 2
这时,您需要孤立地查找每个变量的约束(如果有),并找到这些约束的交集。
A: 1 <= y <= 2 \
> taken together, the only solution is y = 1
E: 0 <= y <= 1 / this is the intersection of intervals [0,1] and [1,2]
C: 1 <= x <= 2 \
> taken together, the only solution is x = 1
D: 0 <= x <= 1 / this is the intersection of intervals [0,1] and [1,2]
B: 3 >= x + y >= 2 \ taken together, this means x + y = 2
F: 1 <= y + x <= 2 > this is the intersection of [1,2] and [2,3]
G: 1 <= x + y <= 2 / note that G turns out to be redundant after subbing
解x = 1,y = 1与我们的不等式系统一致。这是唯一的解决方案。我们可以在方程组中代入替代以获得其他变量的值:
1: a = y - 1
= 1 - 1
= 0
2: c = x - 1
= 1 - 1
= 0
3: b = 3 - x - y
= 3 - 1 - 1
= 1
因此,解决方案a = 0,b = 1,c = 0,x = 1,y = 1有效,并且是唯一的解决方案。这些步骤几乎都应该是可以自动化的。