これは重複した質問かもしれませんが、スタックオーバーフローでこれを見つけることができませんでした。
いくつかの変数を取ります。これらはすべて、何かの可能性を表しています。つまり、すべての変数の値は0から1(両方を含む)の間です。これらの値は不明です。ただし、これらの変数の一部またはすべてを含む方程式がいくつかあり、その結果がわかっています。
たとえば、変数を取る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
1であることが判明、彼らはフラグを立てることができます。
私の一般的な目的は、この手法を使用して地雷除去ボードを解決することですが、他のソフトウェアでも使用できます。ただし、この手法を使用してコンピューターでマインスイーパボードを解決する場合、コンピューターは、任意の量の変数と任意の量の方程式を使用して、このような状況を解決するためのアルゴリズムを使用する必要があります。これを行う一般的なアルゴリズムはありますか?そして、もしあれば、そのアルゴリズムをどのように実装すればよいですか?
物事を明らかにするために
- 方程式は、1つの変数またはいくつかの変数の合計であり、結果は限定的または一定であり、常に正です。
- 変数は、0から1(両方を含む)の間の未知の値です。
- アルゴリズムは、それぞれの変数名を持つ変数の量と、いくつかの変数を定義する方程式を取り込みます。
- アルゴリズムは、できるだけ多くの値を計算しようとします。決定できなかった値は未定のままです。
一般に、N個の独立変数が変化する可能性のあるN次元のベクトル空間があります。それぞれの制約はベクトル空間の領域を定義し、そのようなすべての領域の共通部分が決定したい領域です。領域はすでに制約のコレクションによって記述されているため、実際には、その領域の最も単純な(最も複雑でない)記述を探しています。3つの可能性があります。1つは、この地域に解決策がないことです。第二に、この地域には有限数の解決策があるということです。第三に、この地域には無限に多くの解決策があるということです。
最初のステップは、もしあれば、方程式を連立方程式として扱い、連立方程式を解くためのアルゴリズムを使用して、方程式だけから可能な限り解くことです。他に何もないとしても、いくつかの変数を削除しておくと、次のステップで役立ちます。
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が機能し、唯一の解です。これらのステップのほとんどすべては、自動化できるものでなければなりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加