評価系SDK設計・実装ガイド
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
概要
EvoSpikeNetの評価系(Evaluator)は、進化的アルゴリズムや強化学習等の最適化過程で個体やチームの性能を定量化するためのインターフェースです。
BaseEvaluatorは抽象クラスであり、evaluate_competitive(個体間競争)とevaluate_team(チーム評価)を必ず実装する必要があります。- 本番運用では、
DefaultEvaluatorなどの具象クラスを最低1つ実装し、用途に応じて独自の評価戦略クラスを追加できます。
実装要件
- すべてのEvaluatorは
BaseEvaluatorを継承し、2つのメソッドを実装すること:evaluate_competitive(genome1, genome2) -> Dict[str, float]evaluate_team(team: List[Any]) -> Dict[str, Any]
- 評価関数は、脳インスタンス化・forward計算・スコア算出等、目的に応じたロジックを記述可能。
- 評価戦略の切替や拡張のため、複数のEvaluator実装をSDKサンプルとして提供することが推奨されます。
サンプル実装
DefaultEvaluator: 脳forwardのL2ノルムでスコア化CooperativeEvaluator: チーム全体の平均スコアで評価CustomEvaluator: 任意の外部指標や複雑な報酬関数を利用
実装例
from evospikenet.evaluators import BaseEvaluator
class CooperativeEvaluator(BaseEvaluator):
def evaluate_competitive(self, genome1, genome2):
# 競争型評価(例: 合計スコアで勝者判定)
...
def evaluate_team(self, team):
# チーム全体の平均スコア
scores = [self._score(g) for g in team]
mean_score = sum(scores) / len(scores)
return {"team_score": mean_score, "individual_scores": scores}
def _score(self, genome):
# 脳forward等でスコア算出
...
注意事項
- 評価系の本番実装では、乱数・ダミー値のみの返却は禁止し、必ず意味のあるスコア計算を行うこと。
- SDK利用者は、用途に応じて独自Evaluatorを追加・差し替え可能です。