Skip to content

2023-05-07

タスクリスト

  • session_controllerの実装
    • timer駆動ではなく,イベント駆動にする
    • 各イベントについての設定を外部ファイルから読み込めるようにする
    • 代表的なイベントについてプリセットを用意

session_controllerをイベント駆動にする

timer駆動部を削除

  • timer駆動部の処理の確認
    • まさかの空だったので削除
  • では今までは何駆動で動いてた?
    • コンストラクタで初回だけ呼び出してデバッグしていたようだ
  • とりあえずtimerを削除

イベント駆動で動くようにする

  • イベントの整理
    • Referee入力( /play_situation
    • 状況判断による切り替え申請( /game_analysis
    • Plannerからの失敗報告による切り替え
  • 実装の進め方
    • まず,前2つについて実装
      • 切り替えるときに共通で呼び出す関数を作っておく
    • Plannerからの失敗報告は,その他の共通インタフェースを整備する良い機会なので別途時間をとって実装
  • 切替時に呼び出す共通の関数
    • 結局 request関数を呼び出すのでそれで代用しても良さそう?
      • とりあえずこれで進めて必要あれば後から修正

Referee入力駆動の実装

  • Referee入力とリアサイン申請のセットを定義する
    • 文字列キーとの相性が悪いのでReferee入力と文字列の対応表が必要
      • play_switcherで作ったやつ
      • 2箇所で同じものを作るのは微妙なので,PlaySituationのmsg_wrapperを作ってそこで定義する
        • PlaySwitcherもこれを使って書き換え
    • PlaySituationイベントはプレフィックス play_situation/ をつける

SessionController設定の外部ファイルでの定義

とりあえずこんな感じ

---
name: HALT
description: HALT
sessions:
  - name: waiter
    capacity: 20

読み込みはyaml-cppを使う 今後の改良ポイントとしては,

  • 実行前にエラーを検出するためにyamlのバリデーションをしたい
  • 設定ファイルの書き方をyamlからtomlに変更したい
    • yamlはインデントがめんどくさい
    • tomlはインデントがめんどくさい
    • どっちもめんどくさい

InPlaySituation.msgの整理

  • reasonを載せるようにした
  • rawコマンドを載せるようにした

CMakeファイルのクリーンアップ

  • インデント幅が2だったり4だったり
    • 2に統一
  • C++バージョンが14だったり17だったり
    • 17に統一
  • コメントアウトでめっちゃ汚い
    • 不必要なコメントアウトは削除
  • 不要に長い空行は削除

Ri-oneの古いAI

https://github.com/Rione/ssl-RACOON-AI-beta/tree/competition

攻撃時はとりあえずシュートするプログラムシンプルなプログラムでびっくり(INDIRECTを除く)
ファーストバージョンはこれくらいで良いのかも

詳細はこちらに書いた

シンプルなバージョンのAIの計画を立ててみる

---
name: SIMPLE_ATTACK
description: SIMPLE ATTACK
sessions:
  - name: "goalie"
    capacity: 1
  - name: "shooter"
    capacity: 1
  - name: defender
    capacity: 4
  - name: waiter
    capacity: 20

よく考えれば,シュート出来そうになかったらパスするだけなのでこれがパスは後から組み込みで全然良いなぁ