BricRoboでブロック並べを解いてみる(2) – ブロック並べ解法アプリ

さて、経路探索のアルゴリズムは決めたので、これを使って実際にどういうものが出来上がるかのビデオ。 最終的にこんな風になります。純粋に経路を探してブロックを運ぶだけなので、実物のロボット制御がない単純なもの。この通りにロボットを制御するのは、また別の難しさになるので、それは今回の目的じゃないです。

画面にはサークルとブロックとローバー(つまり走行体です)があって、最初にブロックをセットして、ローバーを進入口にセットして、一番近くのブロックから順番に、同じ色のサークルへ移動して、最後はゴールするというもの。
ボタンの意味は、
RESET BLOCK:ブロックを消し去って初期化する
OMMIT:使わないブロック色の選択
NEXT BLOCK:次のブロック配置
RAND BLOCK:乱数でブロック位置を決定
SET ROVER:ローバーを進入口へセット
SEARCH ROUTE:ローバーから一番近い移動が済んでないブロックまでのルートを探す
GOTO BLOCK:見つけたブロックまでローバーを移動する
SEARCH ROUTE:ローバーの位置からサークルまでの距離を計算する
CARRY BLOCK:一番近い同じ色のサークルまでブロックを運ぶ
AUTO:上記の4つを順番に自動で行う
ALL PATTERN:全部のブロック配置についてやってみる
画面更新:そのとき画面を更新する(計算を速くするには画面更新を止めるのがいい)
ひみつ:じつは昔、この画面を流したとき何をしているか分からないように、ルートの距離を非表示にする機能をつけた
LOG:ブロック配置に対してローバーがゴールできたか、できたらその移動数はどれだけか、のログをファイルに保存する
Ui
ログファイルにはこんな形式で記録されていきます。
左から黄緑赤青黒の位置、ブロックが置かれた位置を16進表記にしたもの、ブロックの移動回数、最後まで解けたかどうか。
Log
位置に関しては、こんな風に番号を付与してあります。今回は4×4マス目で、丁度、0-15に対応させると表現し易いのでこのようにしてますが、結果をどう表現するかの問題なので、解法とは関係はないです。
Photo
この迷路法で近くのブロックから手当たりしだいに移動すると、考えなしなので、手詰まりが発生して、解けない! というブロック配置が出てくるのですが、それがどれぐらいあるのか?とか、どれぐらいの移動距離のバラつきがあるのか。ということを調べたりしていたわけです。 巷ではダイクストラ法というのが流行りみたいですね。そんなの知らんかったです。 けど、どのみち、経路探索にしか使わなければ、手詰まりが発生するのは同じでしょうけど。 手詰まりが発生したらどうするか? ブロックを動かす優先順位を遠くからに変えてみるとか、なるべく遠くのサークルに置くような評価にするか、なんか変化を加えてみれば解ける場合もあるんでしょうね。
>>BricRoboでブロック並べを解いてみる(3) – アプリの仕組み