覆面算 - 鉛筆パズルの整数計画法による解法定式化集

覆面算
(整数計画法によるパズル解法
例題 岡本吉央 第8章より)
S
E
N
D
+
M
O
R
E
M
O
N
E
Y
解答
9
5
6
7
+
1
0
8
5
1
0
6
5
2
ルール
以下の条件に従って記号を数字に置き換え計算式を成り立たせる。
①各記号は0から9までの数字の一つだけに置き換えられる。
②同じ記号には同じ数字が対応する。異なる記号を同じ数字にはしない。
③最上位の桁は0に置き換えられない。
④既に問題に使われている数字はそのまま用いる。その数字を他の記号に当てはめてもよい。
足し算、3口までを扱うことにする。
変数
記号と同じものをgeneral変数とし、それに0∼9の配列記号を付けたたものをbinary変数とする。
c(I) = 1
c に数字Iが入るとき
〃 = 0
PL(J)
入らないとき
(c=S,E,N,D,.....Y)
(I=0,1,....9)
演算J桁目の和の数
PL1(J) PL(J)の数字の1の位の数
(小位の桁から)(J=1,2,....)
PL2(J) PL(J)の数字の10の位の数
PL1(J,K) = 1
= 0
PL1(J)の数字がKのとき
〃 でないとき
PL2(J,K) = 1
= 0
PL2(J)の数字がKのとき
〃 でないとき
目的関数
minimize
(ダミー)
x
制約式
subject to
1.記号には0∼9のどれかの数字が当てはまるから
9
c(I)= 1
Σ
I=0
(c=S,E,N,D,.....Y)
先頭に来る記号(この例題ではSとM)
については S(0)=0、M(0)=0
2.一つの数字には一つの記号が対応するから
Y
c(I)≦ 1
Σ
c=S
(I=0,1,....9)
(K=0,1,....9)
3.文字変数とbinary文字変数の関係
9
I*c(I)= c
Σ
I=1
(c=S,E,N,D,.....Y)
ヘンな記号で分かりにくいかも、具体的に書くと
S(1)+2*S(2)+3*S(3)+ ......+9*S(9)= S など
4.足し算演算
PL(1)=
PL(2)=
PL(3)=
PL(4)=
D
N
E
S
+
+
+
+
E
R + PL2(1)
O + PL2(2)
M + PL2(3)
5.各桁の和の1の位の数は一つに限るから
9
PL1(J,I) = 1
Σ
I=0
(J=1,2,3,4)
6.各桁の和の10の位の数は一つに限り、3口の和では3を越さないから
3
PL2(J,I) = 1
Σ
I=0
(J=1,2,3,4)
7.各桁の和の1の位の数、10の位の数取り出し
9
[10*I*PL2(J,I) + I*PL1(J,I)] = PL(J)
Σ
I=0
8.各桁の和の1の位の数セット
9
I*PL1(J,I) = PL1(J)
Σ
I=1
(J=1,2,3,4)
9.各桁の和の10の位の数セット
3
I*PL2(J,I) = PL2(J)
Σ
I=1
上下界
bounds
変数型
binary
c(I)
PL1(J,I)
PL2(J,I)
general
c
(c=S,E,N,D,.....Y)
(I=0,1,...9)
(J=1,2,3,4)
(c=S,E,N,D,.....Y)
PL(J)
PL1(J)
PL2(J)
終端
end
(J=1,2,3,4)
(J=1,2,3,4)
(J=1,2,3,4)