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