ABCプレース - 鉛筆パズルの整数計画法による解法定式化集

鉛筆パズルの整数計画法による解法定式化集 23.
2015.11.28 Easy as ABC 追加
ABCプレース
例題(2014年1月4日 毎日新聞より)
B
A
A
A
解答
A
(A∼C)
B
C
C
A
C
B
B
B
B
B
A
B
A
C
B
A
C
A
C
B
C
C
A
B
C
B
A
A
B
B
C
A
B
B
C
B
A
A
A
B
C
ルール
①タテ・ヨコの各列に、Aから指定の範囲のアルファベットが一つずつあるように、
アルファベットを入れる。
②マスの外側のアルファベットは、その列で最も近くにあるアルファベットを示している。
2015.11.28 http://puzzlepicnic.com/の「Easy as ABC」がこのルールの拡張型なので末尾に追加した。
変数
マスの行番号をI、列番号をJとして
dA(I,J) = 1
= 0
dB(I,J) = 1
= 0
dC(I,J) = 1
= 0
dX(I,J) = 1
= 0
マス(I,J)にAが入るとき
〃 入らないとき
マス(I,J)にBが入るとき
〃 入らないとき
マス(I,J)にCが入るとき
〃 入らないとき
マス(I,J)に空白が入るとき
〃 入らないとき
colA(J)
第J列の文字Aの行位置
colB(J)
第J列の文字Bの行位置
colC(J)
第J列の文字Cの行位置
rowA(I)
第I行の文字Aの列位置
rowB(I)
第I行の文字Bの列位置
rowC(I)
第I行の文字Cの列位置
J →
1 2
I 1
↓ 2
3
.
.
.
Nr
3
4
. . .
Nc
目的関数
minimize
x
(ダミー)
制約式
subject to
1.マスにはどれかの文字が入る
dA(I,J)+dB(I,J)+dC(I,J)+dX(I,J)
=
1
(I=1,2….…Nr)
(J=1,2….…Nc)
2.文字A,B,Cは各行一回しか現れない
Nr
dA(I,J)
Σ
I=1
=
1
=
1
=
1
Nr
dB(I,J)
Σ
I=1
(J=1,2….…Nc)
Nr
dC(I,J)
Σ
I=1
3.文字A,B,Cは各列一回しか現れない
Nc
dA(I,J)
Σ
J=1
=
1
=
1
=
1
Nc
dB(I,J)
Σ
J=1
(I=1,2….…Nr)
Nc
dC(I,J)
Σ
J=1
4.列内、文字A,B,Cの行位置セット
Nr
I*dA(I,J)
Σ
I=1
=
colA(J)
=
colB(J)
=
colC(J)
Nr
I*dB(I,J)
Σ
I=1
(J=1,2….…Nc)
Nr
I*dC(I,J)
Σ
I=1
5.行内、文字A,B,Cの列位置セット
Nc
J*dA(I,J)
Σ
J=1
=
rowA(I)
=
rowB(I)
=
rowC(I)
Nc
J*dB(I,J)
Σ
J=1
(I=1,2….…Nr)
Nc
J*dC(I,J)
Σ
J=1
6.枠外側の文字条件
第1列であれば、上がA、下がCであるから
colB(1)≧colA(1)
colC(1)≧colB(1)
第3行であれば、左のBのみであるから
rowA(3)≧rowB(3)
rowC(3)≧rowB(3)
などとすべてセットする。
上下界
bounds
変数型
binary
dA(I,J)
dB(I,J)
dC(I,J)
dX(I,J)
(I= 1,2.…… Nr )
(J= 1,2.…… Nc )
general
終端
end
colA(J) colB(J) colC(J)
(J= 1,2.…… Nc )
rowA(I) rowB(I) rowC(I)
(I= 1,2.…… Nr )
鉛筆パズルの整数計画法による解法定式化集 23.
Easy as ABC
http://puzzlepicnic.com/
例題(Genres Easy as ABC
A
A
nyancharov, April 5,2015より)
解答
B2
A
B
C
E2
D2
D
E
(A∼E)
E
A2
D
A
B2
A
E
A
E
C
D
C
D
B
B
D
B
C
C
B
E
A
D
A
C
E
E
A
D2
B
D
D
B
C
E
E
C
A
E2
B
A2
D
(A∼E)
D
E
枠周囲のアルファベットの後ろの数字1は省略した。こういう形式の出題もある。
ルール
①タテ・ヨコの各列に、Aから指定の範囲のアルファベットが一つずつあるように、
アルファベットを入れる。
②マスの外側のアルファベットは、その列で最も近くにあるアルファベットを示している。
数字が付いたときは、何番目に来るかを示す。2であれば、最も近くから2番目。
(http://puzzlepicnic.com/ より)
変数
マスの行番号をI、列番号をJとして
d(I,J,K) = 1
マス(I,J)に文字Kが入るとき
〃 = 0
入らないとき
文字番号Kは1から順にA,B,C・・・とし
最終文字(この例題ではE)の次に空欄用にXを置く。
row(J,K)
第J列の文字Kの行位置
col(I,K)
第I行の文字Kの列位置
rowk(J,K,KK) =
=
colk(J,K,KK) =
=
1
0
1
0
row(J,K)≦row(J,KK) のとき
row(J,K)>row(J,KK) のとき
col(J,K)≦col(J,KK) のとき
col(J,K)>col(J,KK) のとき
J →
1 2
I 1
↓ 2
3
.
.
.
Nr
3
4
. . .
Nc
目的関数
minimize
x
(ダミー)
制約式
subject to
1.マスにはどれかの文字が入る
Nk+1
d(I,J,K)
Σ
K=1
=
1
(I=1,2….…Nr)
(J=1,2….…Nc) Nkは文字種総数、
K=Nk+1は空欄用文字X
2.文字は各行一回しか現れない
Nc
d(I,J,K)
Σ
J=1
=
1
(I=1,2….…Nr)
(K=1,2….…Nk)
3.文字は各列一回しか現れない
Nr
d(I,J,K)
Σ
I=1
=
1
(J=1,2….…Nc)
(K=1,2….…Nk)
4.空欄文字は各行(Nc-Nk)個ある
Nc
d(I,J,Nk+1)
Σ
J=1
=
Nc-Nk
(I=1,2….…Nr)
5.空欄文字は各列(Nr-Nk)個ある
Nr
d(I,J,Nk+1)
Σ
I=1
=
Nr-Nk
(J=1,2….…Nc)
6.列内、文字の行位置セット
Nr
I*d(I,J,K)
Σ
I=1
=
row(J,K)
(J=1,2….…Nc)
(K=1,2….…Nk)
7.行内、文字の列位置セット
Nc
J*d(I,J,K)
Σ
J=1
=
col(I,K)
(I=1,2….…Nr)
(K=1,2….…Nk)
8.列内、文字の行位置上下関係セット
row(J,K)≦row(J,KK)のときrowk(J,K,KK)=1、
row(J,K)≧row(J,KK)のときrowk(J,K,KK)=0 であるから
row(J,K)≦ row(J,KK)+bigM*{1-rowk(J,K,KK)}
row(J,K)+bigM*rowk(J,K,KK)≧ row(J,KK)
(J=1,2….…Nc)
(K=1,2….…Nk)
(KK=1,2….…Nk)
K≠KK
(I=1,2….…Nr)
(K=1,2….…Nk)
(KK=1,2….…Nk)
K≠KK
9.行内、文字の列位置左右関係セット
col(I,K)≦ col(I,KK)+bigM*{1-colk(I,K,KK)}
col(I,K)+bigM*colk(I,K,KK)≧ col(I,KK)
10.上欄数字条件合わせ
文字がK、その後ろの数字がL(省略時は1)であればrowk(J,K,KK)=1となるKKの
ものがその列の中に(L-1)個あるから
Nk
rowk(J,KK,K)=
Σ
KK=1
L-1
(J= 1,2.…… Nc )
L-1
(J= 1,2.…… Nc )
KK≠K
11.下欄数字条件合わせ
Nk
rowk(J,K,KK)=
Σ
KK=1
KK≠K
順序逆転
12.左欄数字条件合わせ
Nk
colk(I,KK,K)=
Σ
KK=1
L-1
(I= 1,2.…… Nr )
L-1
(I= 1,2.…… Nr )
KK≠K
13.右欄数字条件合わせ
Nk
colk(I,K,KK)=
Σ
KK=1
KK≠K
上下界
bounds
変数型
binary
d(I,J,K)
(I= 1,2.…… Nr )
(J= 1,2.…… Nc )
(K= 1,2.…… Nk)
rowk(J,K,KK)
(J= 1,2.…… Nc )
(K= 1,2.…… Nk)
(KK= 1,2.…… Nk)
(I= 1,2.…… Nr )
(K= 1,2.…… Nk)
(KK= 1,2.…… Nk)
colk(I,K,KK)
general
row(J,K)
col(I,K)
終端
end
(J= 1,2.…… Nc )
(K= 1,2.…… Nk)
(I= 1,2.…… Nr )
(K= 1,2.…… Nk)