34 lines
1.4 KiB
Python
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"]
|