packages feed

toysolver-0.2.0: samples/lp/baroque-tower.lp

\ ドラクエ7のバロックの塔 (バロックタワー) の謎解き (ギミック)
\
\ http://ryocotan.tumblr.com/post/46204757099
\ http://msakai.jp/d/?date=20130402#p01
\
\ 銅像が上下左右に4つあり、それを全て中心に向かせればOK。
\ 銅像の間 (四隅) にはボタンがあって、それを押すと、
\ そのボタンから反時計周りに3つの銅像が、右に90度回転する。
\ 初期状態では、上下左右の銅像の向きは順に右上上左。
\
\ x1, x2, x3, x4 をそれぞれ左上、右上、右下、左下の石を押す回数とすると、
\ 最短の手順を求める問題は、以下の最適化問題として定式化できる。
\
\ Minimize
\   x1 + x2 + x3 + x4
\ Subject To
\   3 + x1 + x2 + x3 ≡ 0 mod 4  (左の像の条件)
\   3 + x2 + x3 + x4 ≡ 0 mod 4  (上の像の条件)
\       x3 + x4 + x1 ≡ 0 mod 4  (右の像の条件)
\       x4 + x1 + x2 ≡ 0 mod 4  (下の像の条件)
\   x1, x2, x3, x4 ≥ 0
\   x1, x2, x3, x4 ∈ Z
\ 
\ 追加的な変数を導入してmodを取り除けば、これは整数線形計画問題になる。
\
Minimize
  x1 + x2 + x3 + x4
Subject To
  x1 + x2 + x3 - 4 n1 = -3
  x2 + x3 + x4 - 4 n2 = -3
  x3 + x4 + x1 - 4 n3 = 0
  x4 + x1 + x2 - 4 n4 = 0
Bounds
  0 <= x1
  0 <= x2
  0 <= x3
  0 <= x4
  0 <= n1
  0 <= n2
  0 <= n3
  0 <= n4
General
  x1 x2 x3 x4 n1 n2 n3 n4
End

\ o 6
\ s OPTIMUM FOUND
\ v n1 = 2
\ v n2 = 2
\ v n3 = 1
\ v n4 = 1
\ v x1 = 1
\ v x2 = 2
\ v x3 = 2
\ v x4 = 1