o2o-negosium-original/agent/eval_harness/registry.py

34 lines
1.4 KiB
Python

"""정책 레지스트리 — 하네스에서 비교할 정책 인스턴스 팩토리 (H5).
현재: random / static / qtable_ucb. LinUCB(H3)·CQL(H6)은 같은 NegotiationPolicy 로 추후 등록.
"""
import math
from eval_harness.baselines import RandomPolicy, StaticPolicy
from negotiation.policies.qtable_policy import UCBQTablePolicy
from negotiation.qtable.domain.model.q_table import QTable
from tenancy.config import PolicyConfig, StateConfig
def build_policy(name: str, state_cfg: StateConfig, action_space_size: int,
policy_cfg: PolicyConfig, seed: int = 0):
"""이름으로 새 정책 인스턴스 생성 (메모리 QTable, DB 미사용 — 시뮬 속도/격리)."""
if name == "random":
return RandomPolicy(seed=seed)
if name == "static":
return StaticPolicy(fixed_action=0)
if name in ("qtable_ucb", "qtable", "ucb"):
qt = QTable(state_cfg.state_space_size, action_space_size,
learning_rate=policy_cfg.learning_rate, discount_factor=policy_cfg.gamma)
params = policy_cfg.params or {}
return UCBQTablePolicy(
qt,
exploration_constant=params.get("exploration_constant", math.sqrt(2.0)),
epsilon=params.get("propensity_epsilon", 0.1),
)
raise ValueError(f"unknown policy: {name} (지원: random|static|qtable_ucb; LinUCB/CQL 은 H3/H6)")
AVAILABLE = ["random", "static", "qtable_ucb"]