コンテンツにスキップ

評価系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を追加・差し替え可能です。