Open3

有限の容量で記憶の永続化

みつよしみつよし

要件

ScreepsのAIに意思決定のための記憶をもたせる
最終的に抽象的な宣言による命令を行うため、記憶も抽象化する必要がある
記憶領域は有限なためなんらかの規則に従って削除し続ける必要がある

仕様

  • 記憶とは自分と世界の関わりの記録であり、自分とも自分の関心とも関わりのない情報は記憶しない
    • なぜ関心があったのか という内面の情報も同時に記憶する必要がある
    • 中立的な情報のうち必要なものは各Processが独自に記憶する
  • 抽象度
    • もっとも抽象度の低い記憶は観測データである 観測データとは別。観測データのうち関心のあるものが最も低レイヤー
    • 抽象度が上がるに従って時空間的に広い範囲を扱う
  • 高い抽象度の記憶の自動生成
    • どーやろうかね
  • 記憶の消去
    • 過去の情報はより抽象度の高い階層に転写されたのち削除される
    • つまり情報は消えるのではなく薄れる
    • 直近の情報は参照用にある程度保持される
  • 情報密度
    • 全ての情報が同じ密度で観測される必要はない
    • 物理実体および注意の中心から外れた部分は情報密度が低くて良い
  • 備考
    • 最終的に記憶を自動生成する以上、記憶のデータ型は動的に決定されるものになる
    • 記憶はグローバルに任意の場所からアクセスできる<->プロセス固有の記録はProcessStateに保管し、隠蔽される
      • ProcessStateは記憶に対するインデックスとなる

達成すべき目標

  • [できる] 情報の観測
  • [やる] 抽象度の高い記憶の構造を策定
  • [やる] 抽象化された記憶の更新
  • [やる] 古い情報の削除
  • [これから] 抽象度の高い記憶のデータ構造の自動生成

thoughts

  • 現tickの情報は全て生データで保存し、記録を記憶に置き換えていくルールなら記憶を有効に利用できるのではないか
  • 抽象化とは変化を微分すること
    • スタート地点は変化の検出 = 前tickとの差分

参考文献

みつよしみつよし

初期仕様

  • 記憶はグローバルアクセス可能だが、実体は隠蔽されておりクエリでアクセスする
    • 「この部屋に敵はいるか」「この場所まで移動する経路は何か」
    • 記憶が古い場合は正確性が犠牲になる(正確性も返り値に含まれる)

行えないこと

  • 連想することができない

実装

MemoryStore

  • 実データが格納される
  • データの取得はクエリによる
  • 情報収集は独立した処理(非Process)によって行う
  • インターフェース
    • 実データを入手できる状況であれば入手する

抽象化された記憶を自動生成する方法が分かった
低次の記憶のうち、繰り返し登場するイベントを切り出して参照に変えるんだ

周期的に隣人が訪れるなら、「周期的に隣人が訪れる」というパッケージを作ってそれを参照する
どうやってそのパターンを切り出すかは考えないといけないが

みつよしみつよし

めも

  • "関心"とは自分の行いそのものであるので、実装においてはProcessが該当する
    • →ある程度抽象的なProcessは記憶を保持できるようにする