鉛筆パズルの整数計画法による解法定式化集 75. マイナリズム http://indi.s58.xrea.com/minarism/より 例題(連続発破保管庫 マイナリズム編 No.00) > > 4 >3 >2 >1 ② ① 3 1 2 4 1 2 3 1 3 4 4 2 > > > ② ① 解答 ルール すべてのマスに、1から列数(=行数)までの数字を入れる。 ①各行、各列で数字が重複してはいけない。 ②数字の大きさは盤面の不等号に従う。 ③丸付き数字のあるところでは、その両側にある二つの数字の差 (大きいほうから小さいほうを引いたもの)が、丸の数字と等しくならなければいけない。 Excelで扱うと、罫線の上に配置された不等号、○入り数字とその座標を読み取るのが面倒であるが、 整数計画法の定式化は楽である。 マスと罫線の行番号I、列番号Jを下記の通りとする。 J→ 0 1 1 I 0 ↓ 1 2 線番号 3 . . . Nc マス番号 2 3 4 . . . Nc 1 2 マ3 ス . 番 . . 号 2 . 線 . 番 . 号 Nr Nr 変数 C(I,J,K) = 1 = 0 zD(I,J) = 1 = 0 zR(I,J) = 1 = 0 マス(I,J)に数字Kが入るとき 〃 入らないとき マス(I,J)の下のマスの数字との差の絶対値計算のための補助変数 マス(I,J)の右のマスの数字との差の絶対値計算のための補助変数 F(I,J): マス(I,J)に入る数字 D(I,J): マス(I,J)の下のマスの数字との差の絶対値 R(I,J): マス(I,J)の右のマスの数字との差の絶対値 目的関数 minimize (ダミー) x 制約式 subject to 1.マスには1∼Ncまでのどれかの数字が入る Nc C(I,J,K)=1 Σ K=1 (I=1,2.......Nr) (J=1,2.......Nc) 2.C(I,J,K)=1のときマスに入る数字、F(I,J)=Kとする Nc {K*C(I,J,K)}=F(I,J) Σ K=1 (I=1,2.......Nr) (J=1,2.......Nc) 3.同じ列に同じ数字は来ない Nr C(I,J,K)=1 Σ I=1 (J=1,2.......Nc) (K=1,2.......Nc) 4.同じ行に同じ数字は来ない Nc C(I,J,K)=1 Σ J=1 (I=1,2.......Nr) (K=1,2.......Nc) 5.盤面不等号指定 ">"の線番号がJ、マス番号がIのとき F(I,J)≧F(I,J+1) " > < "<"の線番号がJ、マス番号がIのとき F(I,J)≦F(I,J+1) " "の線番号がI、マス番号がJのとき F(I,J)≧F(I+1,J) "の線番号がI、マス番号がJのとき F(I,J)≦F(I+1,J) 6.マス(I,J)の下のマスとの数値差の絶対値 D(I,J) "○"の線番号がI、マス番号がJのとき (L=1,2.......Nf) F(I,J)-F(I+1,J)≦D(I,J) Nfは○の総数 F(I,J)-F(I+1,J)+bigM*zD(I,J)≧D(I,J) F(I+1,J)-F(I,J)≦D(I,J) F(I+1,J)-F(I,J)+bigM*{1-zD(I,J)}≧D(I,J) 7.マス(I,J)の右のマスとの数値差の絶対値 R(I,J) "○"の線番号がJ、マス番号がIのとき (L=1,2.......Nf) F(I,J)-F(I,J+1)≦R(I,J) F(I,J)-F(I,J+1)+bigM*zR(I,J)≧R(I,J) F(I,J+1)-F(I,J)≦R(I,J) F(I,J+1)-F(I,J)+bigM*{1-zR(I,J)}≧R(I,J) 8.数字差D(I,J)とR(I,J)を指定値に合わせる "○"の線番号がI、マス番号がJのとき (L=1,2.......Nf) D(I,J)=○内数値 "○"の線番号がJ、マス番号がIのとき R(I,J)=○内数値 上下界 bounds 変数型 binary C(I,J,K) (I=1,2….…Nr) (J=1,2….…Nc) (K=1,2….…Nc) zD(I,J) zR(I,J) general F(I,J) (I=1,2….…Nr) (J=1,2….…Nc) D(I,J) R(I,J) 終端 end (L=1,2….…Nf) (I,J)はL番目の○の座標 (L=1,2….…Nf) (I,J)はL番目の○の座標
© Copyright 2024 ExpyDoc