23. わんくま同盟 名古屋勉強会 #37
「一つでも組み合わせが見つかればよい問題」
を解くソルバーの例:SATソルバー
• 論理式を入力する。
• それを満たす真/偽の組み合わせがあれば
一つ返す。なければ「ない」と答える。
例:
A, B, Cが真理値(「真」か「偽」を取る)のとき
[A or B] and [(not A) or C] and [(not B) or (not C)]
が真になるA, B, Cの組み合わせは存在する?
Satisfiability Problem
(充足可能性問題)から
24. わんくま同盟 名古屋勉強会 #37
• ソフトウェア多数
• ただ、Excel標準のソルバーでは解けない(?)
• ここでは「minisat」の例を示す http://minisat.se/
※Windowsではcygwinが必要(mingwでは不可)
[A or B] and [(not A) or C] and [(not B) or (not C)]
p cnf 3 3 /* “3変数・式3行”の意味 */
1 2 0 /* 0が1つの式の終わり */
-1 3 0 /* マイナスはnotの意味 */
-2 -3 0
↓ “dimacs”というフォーマットで記述(上記のような “[… or …] and …” の形の式に特化)
→
解かせる
SAT /* 組み合わせあり */
-1 2 -3 0
37. わんくま同盟 名古屋勉強会 #37
• 高校数学で出てくる問題です
例:
制約条件 2x + y ≦ 100, x + 2y ≦ 140 のもとで、
x + y の最大値は?
x
y
140
100
2x + y ≦ 100 を満たす範囲
x + 2y ≦ 140 を満たす範囲
実際に x, y が存在できる範囲
50
70
38. わんくま同盟 名古屋勉強会 #37
• 高校数学で出てくる問題です
例:
制約条件 2x + y ≦ 100, x + 2y ≦ 140 のもとで、
x + y の最大値は?
x
y
140
100
50
70
x + y = 20 である箇所の集合
x + y = 50 である箇所の集合
x + y = 80 である箇所の集合
→ x + y の最大値はこれ!
39. わんくま同盟 名古屋勉強会 #37
• 高校数学で出てくる問題です
例:
制約条件 2x + y ≦ 100, x + 2y ≦ 140 のもとで、
x + y の最大値は?
x
y
70
140
100
50
• これを、変数や条件の数が
増えてもちゃんと解いてくれるのが
線形計画ソルバー
44. わんくま同盟 名古屋勉強会 #37
例題(Excelファイル参照)
制約条件 2x + y ≦ 100, x + 2y ≦ 130 のもとで、
x + y の最大値は?
(さっきと微妙に値が違う。きれいな値にはならない)
制約条件 2x + y ≦ 100, x + 2y ≦ 130 のもとで、
x + y の最大値は?(ただしx, yは整数に限る)