SSブログ
ゲーム欲 BASIC ブログトップ
前の10件 | 次の10件

迷路探索シミュレーター A法その1 [ゲーム欲 BASIC]

拡張左手法で迷路を全面探索することができました.
  このあと,マイクロマウス競技では最短コースを計算して本番走になります.
  最短コースを求めるためには,全面探索することが必要でしょうか.
  そこで,「最短コースを求めるには,どこまで探索すれば良いのか.」
  これこそが,マイクロマウスの,それまでとは違う探索法の誕生につながりました.

マイクロマウス競技をよく知っている人には,
  これから記述するアルゴリズムが,○○法と呼ばれていることを,
  私はよく存じていますが,個人情報の観点から,このブログ内だけでは,
  A法と呼ばせてください.(これはお願いです.コメントも要りません)

<趣味画像 3459> 当時の研究ノート
3459 マウスノート003.jpg

最短コースの確定が判定できるプログラムを考えました.
  MAPを用意して壁を記憶していて,スタートとゴールは決まっているとします.
  ① 通過したことのある区画のみ通って,S→Gの最短コース.
  ② 未通過の区画も含めて通って,S→Gの最短コース.
  ポイントは,壁の有無が不明なところには壁が無いとしていること.
  ①=②となれば,そのコースが最短コースであり確定する.
  別の言い方をすれば,②のコース上に未通過区画がなくなれば終わりです.

このプログラム(サブルーチン)の使い方は,
  ①のコースをたどれば,途中で探索が時間切れになっても,
  ゴールへのコースが確定しているので,本番記録が残せるということです.
  ①も②も区画の判定以外は,同様にしてコースを求めるので,
  そこだけ変数で指定すれば,共通のプログラムで済みます.

このプログラムを使用して,現在地をS,中央のゴールをGとすると,
  現在地からマウスが,次に進むべきは②のコースです.
  その中には未探索区画が含まれますから,すぐ壁に阻まれて進めなくなります.
  その時点で,再び現在地をSとして再計算すれば,いつか必ずGに到着します.

<趣味画像 3460> 迷路探索中
3460 迷路2015年2月.jpg

ゴールGに着いたら,スタートとゴールを入れ替えて,スタートSを目指す.
  行き来しているうちに,最短コースが確定するはず.
  ゴールからスタートへ向かう方が,迷路は簡単な場合がありそうですから,
  これは有利な作戦です.ゴールで止まらなければ,1回の試走で最短コースが確定します.
  途中で時間が無くなったら,探索を中止して①のコースで本番走をすれば,
  このプログラムだけで,(クラシックの)マイクロマウス競技の迷路探索は十分でした.

<趣味画像 3461> プログラムはBASICで書きます
3461 プチコン3号ガイドブック.jpg

文字ばかりになりましたが,けっこう大事なポイントを説明しました.
  今回の記事がよくわからないけど理解したい奇特な方が居ましたら,
  財団のT代さんに聞いてください.(人任せにしてすみません)
  次は,A法の走行パターンを示します.

<関連記事> プチコン3号カテゴリーで読み直してください
3441 迷路シミュレーター402.jpg 平成27年 3月27日 迷路ルーチン 拡張左手法その3
3435 迷路シミュレーター310+.JPG 平成27年 3月25日 迷路ルーチン 拡張左手法その2

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (A-No.1): Private Material Life.

迷路ルーチン 拡張左手法その3 [ゲーム欲 BASIC]

左手法で迷路を探索すると,迷路の外周を回って戻ります.
  この走行図のように,外周しか探索できません.

<趣味画像 3439> 左手法の走行図
3439 迷路シミュレーター400.jpg

一度通った区画へ入って,同じ探索をしないようにルールを作ると,
  だんだん内側を探索していくので,ゴールに着きます.
  これを拡張左手法といって,全面探索には基本的な方法です.
  ゴールしても同様のルールで探索を続けると,
  全面を探索してスタートに戻ります.

<趣味画像 3440> 拡張左手法でゴール
3440 迷路シミュレーター401.jpg

それにしても,「BASICは遅い」というイメージがありましたが,
  プチコンなのに処理が速くて驚いています.
  大昔30年前の8bit-CPUである,Z80マシンのクロックは2MHz.
  それでも,1MHzの2倍だと驚いていました.
  現在の3DSは,Nintendo 1048 CPUが2個とGPUも搭載があり,
  クロックは推定で266MHzとか.単純に100倍以上速いわけです.

シミュレーションなので実際の走行ではないのですが,
  探索にかかる時間を調べてみました.TIME$を表示しただけです.
  Yボタンでビューッと走らせると,全面探索でも3秒でした.
  このBASICは,「速い」です.

<趣味画像 3441> 拡張左手法の全面探索
3441 迷路シミュレーター402.jpg

さて,次回からは,拡張左手法を越える探索法について説明します.

<関連記事> 
3433 迷路シミュレーター308+.JPG 平成27年 3月25日 迷路ルーチン 拡張左手法その2
3422 迷路シミュレーター305+.JPG 平成27年 3月22日 迷路ルーチン 拡張左手法その1

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.11): Private Material Life.

迷路ルーチン 拡張左手法その2 [ゲーム欲 BASIC]

まずは,現在区画の壁の探索です.前右左の壁を調べて,記憶して表示します.
  現在地が通過済みの区画であれば,この探索を省略します.
  MAP2の値が,0で未通過,1で通過済みです.

<趣味画像 3431> 拡張左手法メインの探索部分
3431 迷路シミュレーター306+.JPG

<趣味画像 3432> 拡張左手法メインの壁表示部分
3432 迷路シミュレーター307+.JPG

拡張左手法では,「通過済み区画」に進入できる条件が,「逆戻り」のみです.
  これから入る区画のMAP3の値が,「逆向き」でなければ進入しません.
  「その区画から出た時の頭の向き」と「これから進もうとする頭の向き」を比較する.
  こうすることで,左手法で一周してしまう迷路でも全区画が探索できます.

<趣味画像 3433> 拡張左手法メインの思考部分(左)
3433 迷路シミュレーター308+.JPG

<趣味画像 3434> 拡張左手法メインの思考部分(前右後ろ)
3434 迷路シミュレーター309+.JPG

ゴールに着いても探索を継続することで,全面を探索してスタートに戻れます.
  全面探索は,最短経路を確定させるのに必要十分な条件ですから,
  時間が許せばそれがいいはずです.実際は制限時間があります.

<趣味画像 3435> 壁探索から呼び出す,壁記憶ルーチン
3435 迷路シミュレーター310+.JPG

今日はここまで.次回は走行例の写真など.

<関連記事> 
3421 迷路シミュレーター304+.JPG 平成27年 3月22日 迷路ルーチン 拡張左手法その1
3414 迷路シミュレーター300+.JPG 平成27年 3月19日 迷路探索思考ルーチン 左手法

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.10): Private Material Life.

迷路ルーチン 拡張左手法その1 [ゲーム欲 BASIC]

スタートから1本のヒモを伸ばし,あしあとも付けながら探索すると考えてください.
  通過済み区画に戻ってきた場合,そこにヒモが通っているので気付きます.
  そこへの再侵入を許すと,同じ道をグルグル進むことになるので禁止します.
  進めなくなれば,ヒモをたどる方向にだけ,戻ることを許し,
  途中で枝分かれしていた,未探索の区画へ向かって,左手法で探索します.

これで,浮島のゴールも探しに行けます.拡張左手法と呼ばれています.
  実際にはヒモや,あしあとではなく,履歴を使いMAPに記憶します.
  通過履歴はMAP2に記憶します.0で未通過,1で通過済み.
  MAP3には,通過済み区画から出た時の頭の向き:0~3を記憶します.

<趣味画像 3421> 拡張左手法の準備部分
3421 迷路シミュレーター304+.JPG

MAP読み出しを早く処理するために,今回から迷路記憶MAPを少し変更します.
  MAP1のbit0,bit1を使い,一区画に2方向の壁のみ記憶しましたが,
  4bitで,四方の壁を記憶します.ただ,記憶時に二重に書き込む必要があります.
  これに伴い,MAPサイズは17×17が,16×16になります.

8bitマシン語で記述していた頃(30年前)は,256バイトで1単位であり,
  迷路サイズが16×16と決まっていました.このMAPが扱いやすかった.
  最近は迷路サイズも可変ですから,いずれ100×100ぐらいに対応しておきたい.

<趣味画像 3422> ボタン読み込みループです(左手法と同じ)
3422 迷路シミュレーター305+.JPG

ここまでは,前回と同じです.
  拡張左手法で探索すれば,必ずゴールに着きます.
  ゴールに着いても,そのまま探索を続けることで全面探索が可能です.
  次回がメインルーチンです.

<私的物欲生活.In Amazon> プチコンの本が届きました
 

<関連記事> 
3414 迷路シミュレーター300+.JPG 平成27年 3月19日 迷路探索思考ルーチン 左手法
3392 迷路シミュレーター209+.JPG 平成27年 3月 8日 迷路探索シミュレーター その7

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.9): Private Material Life.

迷路探索思考ルーチン 左手法 [ゲーム欲 BASIC]

さて,左手法の思考ルーチンの製作です.
  手動操作ルーチンで,現在位置NX,NY,NHが独立していませんでした.
  これからは,NOWX,NOWY,NOWHで現在位置を記憶します.
  スタートすると,Aボタンを押すたびに,1区画ずつ進みます.
  自動的に周囲の壁も探索します.

<趣味画像 3414> 左手法の準備部分
3414 迷路シミュレーター300+.JPG

左手法は,左に壁がなければ左に進むので,左の壁に沿って進みます.
  Xボタンで元の迷路表示を消せば,探索がよくわかります.
  Yボタンは,押している間進み続けるので,ビューと行きます.

<趣味画像 3415> ボタン読み込みループです
3415 迷路シミュレーター301+.JPG

やってみればわかりますが,左手法では浮島のゴールに着きません.
  グルグル回り続けることがわかります.

<趣味画像 3416> 左手法メインの探索部分
3416 迷路シミュレーター302+.JPG

<趣味画像 3417> 左手法メインの思考行動部分
3417 迷路シミュレーター303+.JPG

一度通過した区画を覚えておいて,同じ探索を繰り返さないこと.
  それを考えたのが,次に説明する拡張左手法です.

<関連記事> 
3394 迷路シミュレーター211+.JPG 平成27年 3月 8日 迷路探索シミュレーター その7
3385 迷路シミュレーター206+.JPG 平成27年 3月 5日 迷路探索シミュレーター その6

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.8): Private Material Life.

迷路探索シミュレーター その7 [ゲーム欲 BASIC]

やっと,手動操作プログラムです.シミュレーターの動作確認でもあります.
  十字キーを読み込んで,「F」「R」「B」「L」の指令を送るのは簡単です.
  BUTTON(2)関数で,3DSの十字キーやABボタンの情報を得ます.
  前進,右向き,後進,左向きは,そのまま@MAINに指令します.

<趣味画像 3392> プログラム2 その9/11
3392 迷路シミュレーター209+.JPG

追加で作成した機能として,Aボタンで現在地の四方の壁を探索表示します.
  探索された壁だけの表示のために,BGスクリーン1を用意しました.
  そのままでは,BG2に隠れてしまいますから,
  Xボタンで,元の迷路表示を消すことができます.

<趣味画像 3393> プログラム2 その10/11
3393 迷路シミュレーター210+.JPG

<趣味画像 3394> プログラム2 その11/11
3394 迷路シミュレーター211+.JPG

Aボタンを押すと,探索した四方壁だけが表示されます.
  元の迷路を消すと,本当に迷子になりますね.

<趣味画像 3395> 実行画面 探索中です
3395 迷路シミュレーター212+.jpg

さて,次は左手法の思考ルーチンの製作です.
  作ってから気付きましたが,現在位置変数のNX,NY,NHが独立していません.
  次からはローカル変数にも気をつけましょう.

<関連記事> 
3387 迷路シミュレーター208+.JPG 平成27年 3月 5日 迷路探索シミュレーター その6
3376 迷路シミュレーター204+.JPG 平成27年 3月 1日 迷路探索シミュレーター その5

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.7): Private Material Life.

迷路探索シミュレーター その6 [ゲーム欲 BASIC]

さて,ここから新しいプログラムですが,今後のために,
  手動と左手法が切り替えられるようにします.
  手動を選択すると,<プログラム2 その9~11> に飛びます.

<趣味画像 3384> プログラム2 その5/11
3384 迷路シミュレーター205+.JPG

そして,マウスを動かして表示する@MAINルーチンですが,
  指令で,F,Bなどをもらって,マウスを前進させたり,
  前の壁の状態を調べたりして,応答情報を返します.

<趣味画像 3385> プログラム2 その6/11
3385 迷路シミュレーター206+.JPG

左手法などの探索ルーチンから,このルーチンに指令を出すことで,
  ゴールまでの動きが検証できます.
  迷路の大きさは,まだ16×16ですが,次のバージョンでは32×32を目指します.

<趣味画像 3386> プログラム2 その7/11
3386 迷路シミュレーター207+.JPG

実際のマウスは,迷路の中で迷いますから,
  自分が今どちらに向いているか,覚えていることが必要です.
  指令では,前の壁を調べられますが,それが北の壁とは限りません.
  そのあたりを,ON GOSUB で分岐するのが一手間です.

<趣味画像 3387> プログラム2 その8/11
3387 迷路シミュレーター208+.JPG

ここまでが,シミュレーター部分です.
  次がいよいよ思考ルーチンですが,まだ「手動」しかできていません.
  続きます.
<関連記事> 
3376 迷路シミュレーター204+.JPG 平成27年 3月 1日 迷路探索シミュレーター その5
3338 シミュレーション指令一覧.JPG 平成27年 2月16日 迷路探索シミュレーター その4

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.6): Private Material Life.

迷路探索シミュレーター その5 [ゲーム欲 BASIC]

前回その4で,指令コマンドで動くシミュレーターを説明しました.
  そのプログラムを表示しながら,「プチコン3号 Smile BASIC」の説明をします.

<趣味画像 3373> プログラム2 その1/11
3373 迷路シミュレーター201+.JPG

  任天堂が発売している,3DSで動作するゲーム(アプリケーション)の一つで,
  ダウンロード販売ですが,わずか1000円でBASICプログラミングが記述できます.
  三十数年前なら,マイコンを購入して,キーボードを繋いで使っていたものが,
  手のひらに乗っている時代です. プチコン3号

<趣味画像 3374> プログラム2 その2/11
3374 迷路シミュレーター202+.JPG

BASICは,子供でもゲームを作れるから,当時はとても流行していました.
  高級なプログラマーの先生には,構造化の甘いBASICは外道とされました.
  でも,GOTOでスパゲッティ・プログラムになっても,
  Syntax error になってもいい.動かしてみることに意義がある時代でした.
  自動車に例えると,公道は走れなくても,各人が工夫して乗り回していた時代です.

<趣味画像 3375> 大会迷路(再掲) その3/11
3375 迷路シミュレーター203+.JPG

プログラムを画面撮影で画像表示しますが,なぜ普通の文字で打たないのか.
  「 FOR O=0 TO 100 」などと表示すればわかりやすいと思われますが,
  ゼロ0と,オーO の区別などが,blogのフォントではできません.
  ゼロに斜線が入るのが,昔懐かしいプログラムのフォントですね.
  カラーでも見やすいですし,特殊なキャラ表示もありますから.(続きます)

<趣味画像 3376> プログラム2 その4/11
3376 迷路シミュレーター204+.JPG

<関連記事> 
3338 シミュレーション指令一覧.JPG 平成27年 2月16日 迷路探索シミュレーター その4
3327 迷路シミュレーター006+.jpg 平成27年 2月12日 迷路探索シミュレーター その3

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.5): Private Material Life.

迷路探索シミュレーター その4 [ゲーム欲 BASIC]

これからは,自動操縦プログラムを作ります.
  まずは,シミュレータが,指令コマンドをうけて動くようにします.
  ”F”コマンドは前進です.成功すれば”Y”が返ります.
  これを,まずは手動で指令が出せるようにして動作を確認します.

<趣味画像 3338> コマンド一覧
3338 シミュレーション指令一覧.JPG

手動操縦プログラムでは,十字キーを操作して直接動いていたものを,
  わざわざ指令を出して動かします.
  更に,壁調査コマンドで壁を探索できたり,
  迷路表示を消して,見えなくしたりできるようにします.

1. SS$=”指令コマンド”,OO$=”応答”でマウスを動かす.
2. 手動で動かす.十字コマンドと,A,B,X,Yボタンを使います.
3. 自動で動かす.「左手法」とか.
  指令-応答で表示してわかりやすく.ゴールまでのタイムも計りたい.

迷路をコンピューターで解くアルゴリズムには,
  有名なところで左手法とかがあります.「左の壁を触っていけば,出口に着く」
  でも,中央に島になっているゴールには着けません.
  そこで,「一般左手法」とか工夫したアルゴリズムが考えられました.
  「左手法で進み,逆戻りする場合を除いて,通過済みの区画への再入を禁止する」

<趣味画像 3339> マイクロマウス2014大会迷路(ゴールは右下あたり)
3339 迷路シミュレーター010.jpg

全区画を探索して,最短コースを進みたいマイクロマウス競技では,
  「拡張左手法」とかも唱えられました.
  「基本は左手法だが,通過済みの区画へは入らないようにして,
   未知の区画までUターンして戻る.仮想壁を作る」うまく表せませんけど.

<趣味画像 3340> 実行画面です(シュドウで動きます)
3340 迷路シミュレーター011.jpg

まあ,「手動操縦」「左手法」をプログラムにしてしまいましょう.
  できれば,「拡張左手法」も作りますが,理解不能になるかも.
  今日はここまでです.

<関連記事> 
3327 迷路シミュレーター006+.jpg 平成27年 2月12日 迷路探索シミュレーター その3
3323 迷路シミュレーター003+.jpg 平成27年 2月10日 迷路探索シミュレーター その2

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.4): Private Material Life.

迷路探索シミュレーター その3 [ゲーム欲 BASIC]

やっと,メインプログラムになります.
  3DSの十字キーしか使いませんが,
  前進とバック,右を向く,左を向くの処理を行います.
  今は手動ですが,次には自動操縦のプログラムに書き換える予定です.

<趣味画像 3327> プログラム その6/8
3327 迷路シミュレーター006+.jpg

プチコン3号のBASICでなかなかバグがとれなかったところは,
  ON NH GOSUB @,@,@...とあるところでした.
  NHの値により飛ぶサブルーチンを分けましたが,
  1個目にはNH=0で飛ぶことに気付くまでしばらくかかりました.
  以前はNH=1から始まっていたと思います.違ったかな.

<趣味画像 3328> プログラム その7/8
3328 迷路シミュレーター007+.jpg

最後のサブルーチン達は,@K_N では,「北に壁があるか」を判定しています.
  このようなサブルーチンは,関数で表現するのが高級なプログラムですが,
  あまり工夫しすぎると,あとでわからなくなりそうです.
  作り手の癖と言うべきか,直感的にプログラムは作られていきます.

<趣味画像 3329> プログラム その8/8
3329 迷路シミュレーター008+.jpg

ここまでで,シミュレーターのプログラムは一旦完成しています.
  今日はここまでです.続きはいつ作れるかな.

<関連記事> 
3323 迷路シミュレーター003+.jpg 平成27年 2月10日 迷路探索シミュレーター その2
3313 迷路シミュレーター001+.jpg 平成27年 2月 6日 迷路探索シミュレーター その1

最後まで読んでいただいて,ありがとうございます.
ほかの記事も読んでくださると,うれしいです.

I make the maze program in Puchikon (No.3): Private Material Life.
前の10件 | 次の10件 ゲーム欲 BASIC ブログトップ
私的物欲生活

生活の中で,自分なりのこだわりで選んだ買い物.なぜ,これでなければならなかったのか.買い物してしまって後悔しません.無理に勧めません. お気に入りなだけです.

Private Material Life.