鉛筆パズルの整数計画法による解法定式化集 クロット 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)
© Copyright 2024 Paperzz