Skip to content

2024-01-30

直近でやることの整理

  • SimpleAIのアップグレード
    • Skillも使えるようにしたい
      • Skillのパラチュンができるようにしたい
    • RobotCommandWrapperネイティブにできたらいいな
    • 機体の状態を取得できるようにしたい

SimpleAIの拡張を見据えて

すべての機能をSkill化するのはあり。

Skillとは?

  • 入力
    • ID
    • WorldModel
    • パラメータ
    • 引き継ぎ情報(コンテキスト)
  • 出力
    • ロボットコマンド
    • Skillの終了判定
    • 引き継ぎ情報(コンテキスト)

ひとまずRobotCommandをSkill化する

マクロを駆使して、RobotCommandをSkill化した。 しかし、パラメータをうまく渡せないので、うまく噛み合わない。

そういえば

Skillのパラメータを共通インタフェースを渡せるようにすると型の問題などが面倒なので、 各個スキルクラスでパラメータのセッターを独自定義することにしたんだった。 このときは、Skillクラスをプログラム上で呼び出すことしか考えていなかったので、 特に共通インタフェースを無理して作るインセンティブもなく、むしろ各々のスキルクラスで便利なように独自定義できることが強みだと思っていた。

とはいえ

SimpleAIなど、共通インタフェースを使ってパラメータを渡したい場合が出てきた今、そうも言っていられない。 ということで、共通インタフェースを作ることにした。

パラメータ融通用共通インタフェース設計

現状

SimpleAIでは、vectorを使っている。 既に存在するスキルを見ても、doubleで表現できるパラメータしかない。

今後を見据えて

  • boolは、0.0と1.0で表現することで、doubleで表現できるが、double以外も扱うなら対応したい。
  • intは、doubleで表現できるが、double以外も扱うなら対応したい。
  • stringは、対応していると何かと便利そう。

ということで

将来を見据えると、複数の型を扱える共通インタフェースがほしい

std::vector>かな そして、名前付きパラメータにしたいので、std::unordered_map>かな

実際の実装

  • 共通インタフェースrun()の引数に、std::unordered_map>を追加
    • std::optionalにして、nulloptのときは動作させないことで、引数なしのrun()も可能にする - これで後方互換性が保たれる。- これで、関数型っぽくも振る舞えるはず。