クロット - 鉛筆パズルの整数計画法による解法定式化集

鉛筆パズルの整数計画法による解法定式化集
クロット
http://www.nikoli.co.jp/ja/puzzles/kurotto.html
例題 (ニコリのパズル紹介より)
2
0
解答
2
0
3
3
1
1
1
1
ルール
下記の条件で、盤面のいくつかのマスを黒く塗る。
①丸の中の数字は、その数字の入っているマスにタテヨコに隣接し連続する黒マスの
合計個数を表す。
②丸のあるマスは黒く塗ってはならない。
(この例題にはないが、数字の入っていない丸だけのマスもある)
変数
マスの行・列番号を右図のように取り
丸の中の数字にも番号を振っておく。
B(I,J) = 1
マス(I,J)が黒マスのとき
〃
= 0
W(I,J) = 1
黒マスでないとき
J→
1 2
数字番号1
I 1
↓ 2
数字番号2
数字番号3
2
0
3
.
.
.
3
4
. . .
3
1
マス(I,J)が白のマスのとき
〃
= 0
BK(I,J,K) =1
=0
WK(I,J,K) =1
=0
白マスでないとき
Nr
黒マスB(I,J)が数字番号Kに所属しているとき
〃
していないとき
白マスW(I,J)が丸付きマスのとき
〃
でないとき
UK(I,J,K) =1
黒マスB(I,J,K)が上に繋がっているとき
〃
いないとき
=0
DK(I,J,K) =1
=0
黒マスB(I,J,K)が下に繋がっているとき
〃
いないとき
LK(I,J,K) =1
黒マスB(I,J,K)が左に繋がっているとき
〃
いないとき
=0
RK(I,J,K) =1
=0
黒マスB(I,J,K)が右に繋がっているとき
〃
いないとき
数字番号毎に、黒マスを矢印で繋いで行くので、同一黒マスでも別番号所属となり、
区別する必要がある。
Nc
51.
目的関数
minimize
(ダミー)
x
制約式
subject to
1.マスは白または黒マスである
(I=1,2,....Nr)
(J=1,2,....Nc)
B(I,J)+W(I,J) = 1
2.BK(I,J,K)=1は黒マスである
(I=1,2,....Nr)
(J=1,2,....Nc)
(K=1,2,....Nf) Nfは数字番号の数
BK(I,J,K) ≦ B(I,J)
3.丸付きマスは白マスである
W(I,J)=1
WK(I,J,K)=1
Nf
BK(I,J,K)=0
Σ
K=1
(K=1,2,....Nf)
(I=1,2,....Nr)
(J=1,2,....Nc)
但し(I,J)は丸入りますのみ
4.BK(I,J,K)にはBK(II,JJ,K)またはW(II,JJ,K)が連続する
BK(I,J,K) ≦ BK(I‑1,J,K)+WK(I‑1,J,K)
+BK(I,J‑1,K)+WK(I,J‑1,K)
+BK(I+1,J,K)+WK(I+1,J,K)
+BK(I,J+1,K)+WK(I,J+1,K)
(I=1,2,....Nr)
(J=1,2,....Nc)
(K=1,2,....Nf)
5.数字K入り丸マスの周りには黒マスBK(I,J,K)がある
BK(I‑1,J,K)+BK(I,J‑1,K)+BK(I+1,J,K)+BK(I,J+1,K)=0
=1
≧1
丸の中の数字が0のとき
丸の中の数字が1のとき
丸の中の数字が2以上のとき
(K=1,2,....Nf)
(I=1,2,....Nr)
(J=1,2,....Nc)
但し(I,J)は丸入りますのみ
6.数字番号K所属の黒マスの隣の黒マスはK所属とする
(I=1,2,....Nr)
BK(I,J,K)+B(I‑1,J)‑BK(I‑1,J,K)≦ 1
(J=1,2,....Nc)
BK(I,J,K)+B(I,J‑1)‑BK(I,J‑1,K)≦ 1
(K=1,2,....Nf)
BK(I,J,K)+B(I+1,J)‑BK(I+1,J,K)≦ 1
但し、丸入り数字は2以上
BK(I,J,K)+B(I,J+1)‑BK(I,J+1,K)≦ 1
7.丸入り数字の設定
Nr Nc
ΣBK(I,J,K)=N(K)
Σ
I=1 J=1
(K=1,2,....Nf)
但し、N(K)丸入り数字
8.数字番号K所属の黒マスには流出する矢印が1個付く
DK(I,J,K)+RK(I,J,K)+UK(I,J,K)+LK(I,J,K)≧ B(I,J,K)
(I=1,2,....Nr)
(J=1,2,....Nc)
(K=1,2,....Nf)
9.矢印は盤の枠から外へ向かない
Nc
UK(1,J,K)=0
Σ
J=1
Nc
DK(Nr,J,K)=0
Σ
J=1
(K=1,2,....Nf)
Nr
LK(I,1,K)=0
Σ
I=1
Nr
RK(I,Nc,K)=0
Σ
I=1
10.白マス(丸付きマス)に向かう矢印はない(但し、所属の数字白マスは除く)
UK(I,J,K)=0 (I,J)が白マスの下のマスのとき
DK(I,J,K)=0 (I,J)が白マスの上のマスのとき
LK(I,J,K)=0 (I,J)が白マスの右のマスのとき
RK(I,J,K)=0 (I,J)が白マスの左のマスのとき
(K=1,2,....Nf)
11.数字マスの隣の黒マス矢印は数字マスに向かう
BK(I‑1,J,K)≦
BK(I,J‑1,K)≦
BK(I+1,J,K)≦
BK(I,J+1,K)≦
DK(I‑1,J,K)
RK(I,J‑1,K)
UK(I+1,J,K)
LK(I,J+1,K)
(K=1,2,....Nf)
(I,J)は数字番号Kの座標
12.矢印の先に矢印の根本が繋がる(但し、隣接マスが白マスでないとき)
LK(I,J,K)≦
RK(I,J,K)≦
UK(I,J,K)≦
DK(I,J,K)≦
LK(I,J‑1,K)+UK(I,J‑1,K)+DK(I,J‑1,K)
RK(I,J+1,K)+UK(I,J+1,K)+DK(I,J+1,K)
UK(I+1,J,K)+LK(I+1,J,K)+RK(I+1,J,K)
DK(I‑1,J,K)+LK(I‑1,J,K)+RK(I‑1,J,K)
(I=1,2,....Nr)
(J=1,2,....Nc)
(K=1,2,....Nf)
13.矢印の4マス旋回流禁止
反時計回り
DK(I,J,K)+RK(I+1,J,K)+UK(I+1,J+1,K)+LK(I,J+1,K)≦ 3
時計回り
RK(I,J,K)+DK(I,J+1,K)+LK(I+1,J+1,K)+UK(I+1,J,K)≦ 3
14.矢印の剪断流禁止
ヨコ
LK(I,J,K)+RK(I+1,J,K)≦ 1
RK(I,J,K)+LK(I+1,J,K)≦ 1
タテ
UK(I,J,K)+DK(I,J+1,K)≦ 1
DK(I,J,K)+UK(I,J+1,K)≦ 1
(I=1,2,....Nr‑1)
(J=1,2,....Nc)
(K=1,2,....Nf)
(I=1,2,....Nr)
(J=1,2,....Nc‑1)
(K=1,2,....Nf)
(I=1,2,....Nr‑1)
(J=1,2,....Nc‑1)
(K=1,2,....Nf)
上下界
bounds
変数型
binary
B(I,J) W(I,J)
(I=1,2….…Nr)
(J=1,2….…Nc)
BK(I,J,K) WK(I,J,K)
UK(I,J,K) LK(I,J,K) DK(I,J,K) RK(I,J,K)
終端
end
(I=1,2….…Nr)
(J=1,2….…Nc)
(K=1,2….…Nf)