mirror of
https://github.com/velocitatem/PHANTOM.git
synced 2026-05-31 08:33:36 +00:00
naoice COI implementation
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from .demand import estimate_demand, generate_demand_for_actor
|
||||
from .behavior import sample_behavior
|
||||
from .behavior import sample_behavior, get_transition_models, trajectory_to_events
|
||||
from .render import DashboardRenderer, style_axis
|
||||
from .wrappers import EconomicMetricsWrapper
|
||||
from .callbacks import MetricsCallback, EvalMetricsCallback
|
||||
from .providers import ProviderBenchmark, ProviderResult, BenchmarkConfig
|
||||
from .coi import compute_coi_leakage, compute_erosion_metrics, compute_agent_probability
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parents[2]))
|
||||
|
||||
from sim.rl.behavior_loader.models import (
|
||||
BehaviorModel,
|
||||
AgentBehaviorModel,
|
||||
@@ -7,11 +12,9 @@ import pandas as pd
|
||||
import numpy as np
|
||||
from .demand import generate_demand_for_actor
|
||||
|
||||
base_dir = "/home/velocitatem/Documents/Projects/PHANTOM/experiments"
|
||||
human_dir, agent_dir = (
|
||||
f"{base_dir}/collected_data/",
|
||||
f"{base_dir}/agents/collected_data/",
|
||||
)
|
||||
base_dir = Path(__file__).parents[2] / "experiments"
|
||||
human_dir = str(base_dir / "collected_data")
|
||||
agent_dir = str(base_dir / "agents" / "collected_data")
|
||||
|
||||
_cache = {} # lazy cache for models and base pivots
|
||||
|
||||
@@ -25,6 +28,46 @@ def _get_base_pivot(human: bool):
|
||||
return _cache[key]
|
||||
|
||||
|
||||
def get_transition_models():
|
||||
"""load human and agent transition models for agent probability calculation
|
||||
|
||||
returns:
|
||||
tuple: (human_transitions, agent_transitions) as dicts of event->event->prob
|
||||
"""
|
||||
human_model = BehaviorModel(human_dir)
|
||||
agent_model = AgentBehaviorModel(agent_dir)
|
||||
|
||||
human_mdp = human_model.build_MDP()
|
||||
agent_mdp = agent_model.build_MDP()
|
||||
|
||||
human_trans = aggregate_event_transitions(human_mdp)
|
||||
agent_trans = aggregate_event_transitions(agent_mdp)
|
||||
|
||||
return human_trans, agent_trans
|
||||
|
||||
|
||||
def trajectory_to_events(trajectory: list) -> list:
|
||||
"""extract event names from trajectory for KL divergence calculation
|
||||
|
||||
trajectories are in format 'eventName_product0', extract just eventName
|
||||
|
||||
args:
|
||||
trajectory: list like ['view_product0', 'add_to_cart_product1', 'checkout_product1']
|
||||
|
||||
returns:
|
||||
list: event names like ['view', 'add_to_cart', 'checkout']
|
||||
"""
|
||||
events = []
|
||||
for state in trajectory:
|
||||
# state format from sample_behavior: 'eventName_productX'
|
||||
if "_product" in state:
|
||||
event = state.rsplit("_product", 1)[0]
|
||||
else:
|
||||
event = state
|
||||
events.append(event)
|
||||
return events
|
||||
|
||||
|
||||
def adjust_behavior_to_condition(condition, transition_matrix):
|
||||
# expand NxN transition matrix to (N*P)x(N*P) weighted by demand condition
|
||||
cond_norm = condition / np.sum(condition)
|
||||
|
||||
Reference in New Issue
Block a user