Spaces:
Sleeping
Sleeping
| import torch | |
| from agents.dqn_agent import dqn_agent, QNetwork | |
| from agents.greedy_agent import greedy_agent | |
| from agents.q_learning_agent import q_learning_agent | |
| from agents.baseline_agent import llm_agent | |
| from env.tasks import task_easy, task_medium, task_hard | |
| from agents.hybrid_agent import hybrid_agent, load_q_table | |
| from agents.q_learning_agent import Q | |
| load_q_table(Q) | |
| def run_episode(env, agent) -> float: | |
| state = env.reset() | |
| total_reward = 0.0 | |
| done = False | |
| while not done: | |
| action = agent(state) | |
| state, reward, done, _ = env.step(action) | |
| total_reward += reward.value | |
| return total_reward | |
| def evaluate(): | |
| # Initialize DQN model | |
| input_dim = 3 + 1 + 1 + 3 + 1 + 1 # interest_vector(3) + fatigue + session_time + topic_vector(3) + quality + length | |
| dqn_model = QNetwork(input_dim) | |
| # Load trained weights if available | |
| try: | |
| dqn_model.load_state_dict(torch.load("dqn_model.pth", map_location="cpu")) | |
| dqn_model.eval() | |
| print("[INFO] Loaded dqn_model.pth") | |
| except FileNotFoundError: | |
| print("[WARN] dqn_model.pth not found - DQN using random weights") | |
| tasks = [ | |
| ("Easy", task_easy, 4.0), | |
| ("Medium", task_medium, 7.0), | |
| ("Hard", task_hard, 11.0), | |
| ] | |
| agents = [ | |
| ("Greedy", lambda state: greedy_agent(state)), | |
| ("LLM", lambda state: llm_agent(state)), | |
| ("Q-Learning", lambda state: q_learning_agent(state)), | |
| ("DQN", lambda state: dqn_agent(state, dqn_model)), | |
| ("Hybrid", lambda state: hybrid_agent(state, dqn_model, Q)), | |
| ] | |
| for task_name, task_fn, norm in tasks: | |
| print(f"\n{'='*56}") | |
| print(f"Task: {task_name}") | |
| print(f"{'='*56}") | |
| for agent_name, agent_fn in agents: | |
| # IMPORTANT: fresh env for every agent so state isn't shared | |
| env = task_fn() | |
| reward = run_episode(env, agent_fn) | |
| score = min(1.0, reward / norm) | |
| print(f" {agent_name:<14} reward={reward:6.2f} score={score:.3f}") | |
| if __name__ == "__main__": | |
| evaluate() |