Computing Gospel Education etc. Links
Robocode参戦記録
2003/07/25  ファイルアクセスの実験。

 書き込みに関しては、FileWriterで直接書き込もうとすると、RobocodeFileOutputStreamを利用しないと、セキュリティエクセプションを吐いてしまうようだ。既存のデータファイルにアペンドしたい、というのが今回の実験の目的だ。

 ms.Aresはファイルのアペンドを行わず、起動時に既存のデータをすべて読み込み、レーダスキャン時にメモリ上のデータを更新。勝利、あるいは敗北した際にデータファイルを書き込んで終了させている様子。rv.Raybotも同様の様子。

 RobocodeFileOutputStream(Filename,Append)の形式でオブジェクトを宣言してみるがうまく動作しない。これはバグか、仕様か。おそらく、このせいで他のロボコーダたちもAresやRaybotのようにしかできないのだろう・・・。
2003/01/07  ちょっと設計の変更。
 これまで、敵の位置の線形予測メソッドはEnemyクラスに入っていました。しかしながら、これでは照準あわせのクラスを動的に変えている意味がありません。

 このメソッドは、TargetManagerに持たせるべきものではないか。そして、敵の位置の予測アルゴリズムをStrategyパターンで動的に切り替えられるようにすればよいのではないか。
 Enemyクラスはレーダーでわかった敵のデータを保持する役割に徹するべきではなかろうか。

 このような理由で、もう一度EnemyクラスとTargetManagerクラスを見直してみます。 
2002/12/27  最強ロボットを目指し、現在取り組んでいる野望は”GoFデザインパターンを活用した再利用性の高い部品から構成されるロボットづくり”です。Morpheusでは、ロボットの各構成要素を抽象化しました。しかし、場合によって挙動を変更する、という柔軟性を持たせるには、まだまだ不十分でした。抽象化したそれぞれのオブジェクトは単にRobocodeAPIへのFacadeにしかなっていませんでした。
 そこで、もっとDPを勉強した上で、Trinityの製作にかかりました。TrinityはAdvancedRobotを継承し、自分自身への参照を、自分の挙動を司るオブジェクトTheRationalityに渡します。TheRationarlityオブジェクトはBattleFieldやTrinityの状況から判断して、最適な砲撃と移動のアルゴリズムを選択し、TheSoulオブジェクトという形でTrinityに返します。ここでStrategyパターンとFactoryMethodパターンを使いました。
 発生する各種のイベントは、TheSoulに処理を委譲します。
 こうすることで、用意したStrategyインターフェイスを実装した各種のアルゴリズムにカチカチと切り替えながら柔軟に戦うことができるようになりました。
 ただし、まだこの切り替えに必要な判断アルゴリズムができていませんので、現在のところTheSoulにはいつも一定のStrategyしかセットされません。

 MorpheusもTrinityもRobocodeRepositoryに登録してありますので、興味のある方はダウンロードしてみてください。作者名”mummykinoi”から検索できると思います。ソースも添付されています。こうしたらいいよ、という意見をいただけると幸いです。
2002/12/12  12月10日、オフィシャルシーズンリーグの結果が発表されました。オフィシャルシーズンには123台のロボットがエントリーを許可され、私のロボット”Morpheus”は64位でした。
 微妙な数字。
 出場ロボットの三分の一はサンプルロボットにも勝てないものだ、と言われていました。はたして、一般上級者で出場したロボットのうち、どれだけがそのようなものだったのかわかりませんが、どべにならなかっただけよかったかな。
 さて、次回のジャパンカップでは、もっと上位に入れればいいなぁ。そのためには、これから世界を相手に腕を磨かなければ。


2002/12/5  去る12月2日よりロボコードジャパンカップ オフィシャルシーズンリーグが始まりました。4台提出したロボットのうち、最も力を入れていたロボット”Neo”はなんと提出4台中最下位。最上位はテストのために作った”Morpheus”でこれがオフィシャルシーズンに参加しています。プレシーズンでの”Morpheus”の成績は200台中60番台。”Neo”は160番台・・・。
 オフィシャルシーズンでのMorpheusは現在第16番リーグに所属し、30台中13位のランクを維持している模様。

2002/11/15  やや11/5の仕様とは異なるものの、ほぼ実装したロボット"Neo1.4"を登録した。サンプルロボットに対しては、ほぼ勝利できるが、海外の強力な奴にはまだまだ完敗。先日登録した"Neo1.3"は予備リーグで126位と惨憺たる成績。これに対してAntigravityRobotをちょっといじっただけのAgentSmith1.0は86位と健闘。悲しいものがある。
 今後のNeoの強化方針。
  • 反重力移動を実装
  • 相手の弾道を予測し、避ける

2002/11/05  さて、どんなロボットにしようか。
 ロボットにこんな挙動をさせてみよう。
  • バトルが始まったら、まず周囲をスキャンする。
  • 周囲に敵がいたら、
    • レーダーはその標的に固定し、移動中常にとらえておき、エネルギーの変化、位置の変化等から敵の状態を分析する。
    • その敵からint radiusほど離れた場所p1へ向かいつつ攻撃。p1は標的を中心とした半径radiusの円上にあり、自機から伸ばした直線が、その円に接する点。そのような点は二つ存在(p1,p2とする)するが、移動中この点はランダムに変更される。
    • 敵との距離がradius +20%,-20%になったら、弾を避けつつ攻撃するモードに移行。その際、標的に対して90度戦車を回転し、弾を避けやすくする。砲台およびレーダーは常に標的の側を向けておく。
    • 敵を撃破した場合は、周囲をスキャンし次の標的を探す。
  • 周囲に敵がいなかったら、
    • 少し移動して、周囲をスキャン。

2002/10/26  ユーザ登録。無謀にも一般上級者として。しかし、一般初心者の条件に合わないのだから、仕方ないよなー。とりあえず、AntiGravityBotをちょっといじったものをエントリーした。