スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

最短走行

今晩は!
春ですねー。
暖かくなって布団からも脱出しやすくなってきました。

さて、今週からは最短走行について考えていきましょう。
1年目の人はここら辺で試行錯誤してる時が1番楽しい気がします…w
なので、あまり深くには突っ込まないので悪しからず~

ではまず、最短走行とはなんぞやというところから。
前回の記事で、マウスは探索行動によってゴールまでの経路を見つける(未知の区画を減らす)という説明をしました。
無事に探索が成功すると、次の走行からは最短走行と呼ばれる、1区画毎に考えるのではない走り方をします。どういうことかと言うと、探索で得た情報からスタート前にゴールまでの行動をあらかじめ決めて、余計な区画に入らずにゴールまで一気に走り抜ける感じです。
これを、私の周りではパスに従って走ると言います。
パスってのはグラフ理論で出てくる、ある点とある点を結ぶ道のようなものです。

では最短走行を実現するにあたり、私たちはマウスにどのような指示を送ればいいのでしょうか。
ざっくりと説明すると、
1、探索で得た情報から1本の経路を決定
2、その経路のパスを作成
3、パスに従って走行

てな感じの手順になります。

では実際にパスを作ってみましょうか。
03292.jpg

この画像はとあるmice部員のブログから無断でとってきた全国大会の迷路です。
都合が良いことに青線で1本の経路が示されています。

スタートすると、直進→右折→左折→左折→右折→直進→… となっていますね。
パスをどう表現するかは色々あると思いますが、配列で管理してみましょう。path[256]={0}
unsigned char型だとすると、0~255までの数字を使うことができます。

スタート→ループ(配列の値で条件分岐)→ゴール
例えば1区画直進を1、2区画直進を2、・・・、15区画直進を15、右折を20、左折を30としましょうか。
画像の迷路だと、2区画直進→右折→左折→左折→右折→7区画直進→…となっているので、
path[0]=2,path[1]=20,path[2]=30,path[3]=30,path[4]=20,path[5]=7
としておいて、
while(ゴール){
  if(path[i]<=15){
    path[i]の値分直進
  }
  else if(path[i]==20){
    右折
  }
  else if(path[i]==30){
    左折
  }
  i++;
}
大分適当ですがこのようにループします。

このように、(探索成功→)経路決定→パス作る→パス読み込む。
と処理することで、最短走行でのゴールができるようになります。
ソフト的には、経路決定・パス作る・パス読み込む、中ボス3体ですー

初めてだと難しいかもしれませんが、最短走行でゴールできると感動ものですよ!
次週はスラローム走行についてです。

最近は部室開いてる時間多くなってうれしいです\(^o^)/
キャラ強い新入生入ってくれることを期待してますw
スポンサーサイト
時計
カテゴリ
最新記事
12月14日開始
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。