鉛筆パズルの整数計画法による解法定式化集 81. 2015.07.07 改訂 流れるループ http://puzzleblog542.blog.fc2.com/blog-entry-819.html 解答 例題 トクナキラのパズル製造工場 から ルール 以下の条件に従って、盤面の白マスを通る単一な、向きのあるループを描く。 ①ループの線は交差、枝別れしない。 ②白マスにある黒矢印は、ループ線がこの矢印方向に直進しなければならないことを表す。 ③黒マス中の白矢印は、その黒マスから矢印の方向に、別の黒マスまたは外枠まで 風が吹くことを表し、風が吹いているマスに横から入ったループ線は、風の方向に 曲がらなければならない。 ループは単一なので、どこか(黒矢印のどれか)で切り、そこから通過マスに番号を振って 行けば、全体が一つに繋がる。 風の吹いているマスは最初から決まっているので、座標と風向を入れたデータセットを 用意しておく。 ↑ ← ← ← ↑ ← ← ↑ ← ← ← ↓ ← → ↓ → → → ↑ ↑ ↑ ↓ → → ↓ → → ↓ → → ↓ → → → 変数 I マスの座標(I,J)を右図のように取り 1 2 3 4 . . . 1 B(I,J) = 1 〃 = 0 W(I,J) = 1 〃 U(I,J) =1 白マスでないとき Nr 白マス(I,J)から上向きにループ線が出て行くとき 〃 行かないとき =0 白マス(I,J)から下向きにループ線が出て行くとき 〃 行かないとき D(I,J) =1 =0 白マス(I,J)から左向きにループ線が出て行くとき 〃 行かないとき L(I,J) =1 =0 =0 黒マスでないとき マス(I,J)が白のマスのとき = 0 R(I,J) =1 2 J 3 . . . マス(I,J)が黒マスのとき 白マス(I,J)から右向きにループ線が出て行くとき 〃 行かないとき N(I,J); 矢印番号 目的関数 minimize x (ダミー) 制約式 subject to 1.マスは白または黒に塗られるから、 B(I,J)+W(I,J) = 1 (I=1,2….…Nr) (J=1,2….…Nc) 2.白マスをセット W(I,J) = 1 3.黒マスをセット B(I,J) = 1 (I,J)は盤面から読み取り (I,J)は盤面から読み取り 4.白マスの矢印方向は1つ U(I,J)+D(I,J)+L(I,J)+R(I,J) ≦ 1 (I=1,2….…Nr) (J=1,2….…Nc) (I,J)は白マスのみ 5.矢印は合流しない U(I+1,J)+D(I-1,J)+L(I,J-1)+R(I,J+1) ≦ 1 (I=1,2….…Nr) (J=1,2….…Nc) (I,J)は白マスのみ Nc 6.盤面指定の黒矢印 ←のとき →のとき ↑のとき ↓のとき L(I,J)= 1 L(I,J+1)= R(I,J)= 1 R(I,J-1)= U(I,J)= 1 U(I+1,J)= R(I,J)= 1 R(I-1,J)= (I,J)は黒矢印座標 1 1 1 1 7.矢印の先に矢印がつながる 上)矢の先のマスに風が吹いていないとき U(I,J)≦ U(I-1,J)+L(I-1,J)+R(I-1,J) 右向きの風のとき U(I,J)≦ R(I-1,J) 左向きの風のとき U(I,J)≦ L(I-1,J) (I=1,2….…Nr) (J=1,2….…Nc) 白マスのみ 左)矢の先のマスに風が吹いていないとき L(I,J)≦ L(I,J+1)+U(I,J+1)+D(I,J+1) 下向きの風のとき L(I,J)≦ D(I,J+1) 上向きの風のとき L(I,J)≦ L(I,J+1) 下)矢の先のマスに風が吹いていないとき D(I,J)≦ D(I+1,J)+L(I+1,J)+R(I+1,J) 右向きの風のとき D(I,J)≦ R(I+1,J) 左向きの風のとき D(I,J)≦ L(I+1,J) 右)矢の先のマスに風が吹いていないとき R(I,J)≦ R(I,J+1)+U(I,J+1)+D(I,J+1) 下向きの風のとき R(I,J)≦ D(I,J+1) 上向きの風のとき R(I,J)≦ U(I,J+1) 8.矢印は盤から外に出ない U (1,J)= 0 D(Nr,J)=0 L (I,1)= 0 R(I,Nc)=0 (J=1,2,....Nc) (I=1,2,....Nr) 白マスのみ 9.黒マスに矢印は付かない B(I,J)+U(I,J)+D(I,J)+L(I,J)+R(I,J)≦ 1 (I,J)は黒マス 10.枠の外に向かう矢印はない U (1,J)= 0 D(Nr,J)=0 L (I,1)= 0 R(I,Nc)=0 (J=1,2,....Nc) (I,J)は白マス (I=1,2,....Nr) 11.矢印は黒マスに向かない B(I,J)+D(I-1,J)≦ 1 B(I,J)+U(I+1,J)≦ 1 B(I,J)+L(I,J+1)≦ 1 B(I,J)+R(I,J-1)≦ 1 (I=1,2….…Nr) (J=1,2….…Nc) (I,J)は黒マス 12.矢印番号付けのスタート番号セット 与えられた黒矢印のどれかを採り、座標を(Is,Js)として N(Is,Js)=1 →のとき N(Is,Js+1)=2 N(Is,Js)=1 ←のとき N(Is,Js-1)=2 N(Is,Js)=1 ↑のとき N(Is-1,Js)=2 N(Is,Js)=1 ↓のとき N(Is+1,Js)=2 13.矢印番号付け R(I,J-1) = 1 のとき N(I,J) = N(I,J-1)+1 すなわち N(I,J) ≦ N(I,J-1)+1 N(I,J) ≧ N(I,J-1)+1 であるから、ビッグMを使って N(I,J) ≦ N(I,J-1)+1+bigM*{1-R(I,J-1)} N(I,J)+bigM*{1-R(I,J-1)} ≧ N(I,J-1)+1 同様に N(I,J) ≦ N(I,J+1)+1+bigM*{1-L(I,J+1)} N(I,J)+bigM*{1-L(I,J+1)} ≧ N(I,J+1)+1 N(I,J) ≦ N(I+1,J)+1+bigM*{1-U(I+1,J)} N(I,J)+bigM*{1-U(I+1,J)} ≧ N(I+1,J)+1 N(I,J) ≦ N(I-1,J)+1+bigM*{1-D(I-1,J)} N(I,J)+bigM*{1-D(I-1,J)} ≧ N(I-1,J)+1 (I=1,2,....Nr) (J=1,2,....Nc) (I,J)≠(Is,Js) 上下界 bounds 変数型 binary B(I,J) W(I,J) (I=1,2….…Nr) (J=1,2….…Nc) L(I,J) D(I,J) R(I,J) U(I,J) general N(I,J) 終端 end (I=1,2….…Nr) 白マスのみ (J= 1,2.…… Nc ) (I=1,2….…Nr) 白マスのみ (J= 1,2.…… Nc )
© Copyright 2024 ExpyDoc