Expand description
Exploration Map - 探索マップの抽象層
課題空間を「マップ走査」として解くための抽象インターフェース。
§設計思想
- Tick ベース更新:
apply(update) -> Resultで状態を確定的に更新 - Node の抽象化: 何を Node とするかは実装が決める
- 内部表現の自由: Graph / Grid / Tree など実装詳細は隠蔽
§使用例
ⓘ
// 課題を Node とするマップ
let mut map = TaskMap::new();
// Tick ごとに更新を適用
let result = map.apply(update);
// フロンティアから次の探索対象を取得
for node_id in map.frontiers() {
let node = map.get(node_id);
// ...
}§旧 ExplorationSpace からの移行
旧 ExplorationSpace には以下の機能があったが、クリーンな探索マップ設計では
多くが不要になる(または別レイヤーの責務となる)。
§新設計で解決済み
| 旧機能 | 問題点 | 新設計での解決 |
|---|---|---|
NodeKind (Exploration/ActionNode) | 分岐がコード全体に散らばる | Node 型パラメータ <N> で柔軟に |
| 2つの apply API | apply_update と apply_results 混在 | apply() に統一 |
ExplorationNode 固定 | 拡張性がない | MapNode<T> で任意データを格納 |
§別レイヤーの責務(マップ外で処理)
| 旧機能 | 新設計での扱い |
|---|---|
DependencyGraph 統合 | Orchestrator/Strategy 層で注入 |
SubRoot 管理 | 上位レイヤーで課題分解を担当 |
NodeSelectionStrategy | Strategy 層で frontiers() を使って実装 |
has_successful_action_globally | 上位レイヤーで履歴管理 |
§シンプル化により不要
| 旧機能 | 理由 |
|---|---|
NodeState (5状態) | Open/Closed の2状態で十分。詳細は Node データ T で管理 |
TrialPolicy (OneShot/Retriable/Probabilistic) | Node データ T でリトライ回数を管理 |
ActionCategory (NodeExpand/NodeStateChange) | Update バリアントで明示 |
ExplorationTarget / ExplorationUpdate | GraphMapUpdate で統一 |
NodeAssignment (複雑なメタデータ) | シンプルな MapNodeId で足りる |
§設計原則
- マップは純粋なデータ構造: 戦略やポリシーは外から注入
- Tick ベースの確定的更新:
apply()で全ての状態遷移を表現 - Node の抽象化: 課題/Action/状態など、用途に応じて型で表現
- 複雑さは上位レイヤーへ: DependencyGraph、SubRoot 等は Orchestrator の責務
Structs§
- Graph
Map - グラフベースの探索マップ
- MapEdge
- 汎用エッジラッパー
- MapEdge
Id - エッジ ID(マップ内で一意)
- MapNode
- 汎用ノードラッパー
- MapNode
Id - ノード ID(マップ内で一意)
Enums§
- AddResult
- 追加操作の結果
- Graph
MapUpdate - GraphMap の更新入力
- MapApply
Result - 汎用的な更新結果
- MapError
- マップ操作のエラー
- MapNode
State - ノードの基本状態
Traits§
- Exploration
Map - 探索マップの抽象インターフェース
- Graph
Exploration Map - グラフ構造を持つマップ
- Hierarchical
Map - 階層構造を持つマップ
- MapState
- Map が状態型 S に要求する制約
Type Aliases§
- MapResult
- マップ操作の結果型