1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//! Selection - ノード選択アルゴリズム
//!
//! # 設計思想: TypeAliasPolicyPattern
//!
//! 各 Selection アルゴリズムは独立した struct として実装され、
//! `SelectionLogic` trait を実装する。
//!
//! - **ロジックの分離**: 各アルゴリズムの実装が独立
//! - **型による制約**: Operator の型パラメータで組み合わせを制約可能
//! - **Config 連携**: `SelectionKind` enum で Config/serde 対応
//! - **動的切り替え**: `AnySelection` で enum dispatch による動的ディスパッチ
//!
//! # 統計情報
//!
//! Selection アルゴリズムは `SwarmStats`(collector/stats.rs)を Single Source of Truth
//! として使用する。各メソッドは `&SwarmStats` を引数に取り、アクション統計を参照する。
//!
//! # モジュール構成
//!
//! | モジュール | 内容 |
//! |-----------|------|
//! | `stats` | `NodeStats`(後方互換) |
//! | `kind` | Selection の種類(`SelectionKind` enum) |
//! | `fifo` | FIFO 選択 |
//! | `ucb1` | UCB1 選択 |
//! | `greedy` | Greedy 選択 |
//! | `thompson` | Thompson Sampling 選択 |
//! | `any` | 動的選択ラッパー(`AnySelection`) |
//!
//! # 使用例
//!
//! ```ignore
//! use swarm_engine_core::exploration::selection::{Fifo, Ucb1, SelectionLogic};
//!
//! // 静的型付け(コンパイル時に Selection が決定)
//! let fifo = Fifo::new();
//! let ucb1 = Ucb1::new(1.41);
//!
//! // 動的切り替え(実行時に Selection を変更可能)
//! let any = AnySelection::from_kind(SelectionKind::Ucb1, 1.41);
//! ```
use Debug;
use crate;
use crateLearnedProvider;
use crateSwarmStats;
// ============================================================================
// Re-exports
// ============================================================================
// Stats (SwarmStats を使用、NodeStats は後方互換のため残す)
pub use NodeStats;
// Kind
pub use SelectionKind;
// Selection implementations
pub use Fifo;
pub use Greedy;
pub use Thompson;
pub use Ucb1;
// Dynamic wrapper
pub use AnySelection;
// ============================================================================
// SelectionLogic trait
// ============================================================================
/// ノード選択ロジック
///
/// 次に探索するノードを選択する責務を持つ。
/// SwarmStats を参照してスコアベースの選択が可能。
///
/// # 実装者向け
///
/// - `next()`: 1ノード選択(デフォルト実装あり)
/// - `select()`: 複数ノード選択(必須)
/// - `score()`: スコア計算(デバッグ/可視化用)
/// - `name()`: アルゴリズム名
// ============================================================================
// Legacy Aliases (後方互換性)
// ============================================================================
/// FifoSelection の別名(後方互換)
pub type FifoSelection = Fifo;
/// Ucb1Selection の別名(後方互換)
pub type Ucb1Selection = Ucb1;
/// GreedySelection の別名(後方互換)
pub type GreedySelection = Greedy;
/// ThompsonSelection の別名(後方互換)
pub type ThompsonSelection = Thompson;