diff --git a/data/mp/mp.csv b/data/mp/mp_.csv similarity index 100% rename from data/mp/mp.csv rename to data/mp/mp_.csv diff --git a/src/mp/mp.py b/src/mp/mp.py index 1f994de08484a0367c0ff394c4a7f0e9f8d6e3db..abc4153da59d5bc81536d37baba121703c18da93 100644 --- a/src/mp/mp.py +++ b/src/mp/mp.py @@ -15,7 +15,7 @@ from autogen_ext.models.openai import OpenAIChatCompletionClient # Load API keys from environment variables ################### OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") -OPENAI_API_KEY = "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" +OPENAI_API_KEY = "cle" ################### PAGODA_API_KEY = os.getenv("PAGODA_API_KEY") PAGODA_API_KEY = "cle" @@ -24,7 +24,7 @@ if not OPENAI_API_KEY: if not PAGODA_API_KEY: raise ValueError("Missing PAGODA_API_KEY. Set it as an environment variable.") -CSV_FILE_PATH = "../../data/mp/mp.csv" +CSV_FILE_PATH = "../../data/mp/mp_.csv" # Define the expected response format as a Pydantic model class AgentResponse(BaseModel): @@ -201,14 +201,60 @@ class MP: def apply_strategy(self): """Play the next move using a heuristic.""" - opponent_move = self.opponent_strategy_fn(self.history) - # Default: at random - move = random.choice(["Head", "Tail"]) - reasoning = "Choosing randomly." + prediction = "" + print(self.model) + + if self.model == "gpt-4.5-preview-2025-02-27": + """ + Play the next move using a heuristic. + - Simple strategy: Alternate between "Head" and "Tail". + - Prediction: Assume opponent is also alternating. + """ + moves = ["Head", "Tail"] + + # If no rounds played, start with "Head" + if not self.history: + move = "Head" + prediction = "Tail" if self.prediction else "None" + reasoning = ( + "First round, no history. Starting with 'Head'. " + + (f"Predicting opponent starts with 'Tail' (alternating)." if self.prediction else "") + ) + return move, prediction, reasoning + + # Get last move you played and the opponent's last move + last_agent_move = self.history[-1]["Agent Move"] + last_opponent_move = self.history[-1]["Opponent Move"] + + # Alternate your move from last time + move = "Tail" if last_agent_move == "Head" else "Head" + + # Prediction: Suppose opponent is also alternating + if self.prediction: + prediction = "Tail" if last_opponent_move == "Head" else "Head" + else: + prediction = "None" + + reasoning = ( + f"Last round I played {last_agent_move}, opponent played {last_opponent_move}. " + f"I'm alternating my move to '{move}'. " + + ( + f"Predicting opponent will alternate to '{prediction}'." + if self.prediction else "No prediction mode." + ) + ) + return move, prediction, reasoning - outcome = self.determine_winner(move, opponent_move) - self.update_score(outcome) # Use the correct outcome here - return move, reasoning + else: + opponent_move = self.opponent_strategy_fn(self.history) + # Default: at random + move = random.choice(["Head", "Tail"]) + reasoning = "Choosing randomly." + + outcome = self.determine_winner(move, opponent_move) + self.update_score(outcome) # Use the correct outcome here + + return move, prediction, reasoning @staticmethod def determine_winner(player_move: str, opponent_move: str) -> int: @@ -243,12 +289,12 @@ class MP: # Runner async def main(): game = MP( - model="qwen3", # "gpt-4.5-preview-2025-02-27", "qwen3", "llama3", "llama3.3", "mixtral", "mistral-small", "deepseek-r1" + model="gpt-4.5-preview-2025-02-27", # "gpt-4.5-preview-2025-02-27", "qwen3", "llama3", "llama3.3", "mixtral", "mistral-small", "deepseek-r1" temperature=0.7, game_id=1, prediction=True, - opponent_strategy_fn=lambda history: "Tail", - strategy=False # or True for rule-based + opponent_strategy_fn=lambda history: "Tail" if len(history) % 2 == 0 else "Head", + strategy=True # or True for rule-based ) num_rounds = 10 for round_id in range(1, num_rounds + 1): diff --git a/src/mp/mp_draw_constant.py b/src/mp/mp_draw_constant.py index 181122c7d6faa906be065cdfa451700f8453e8d3..ec7a7f111ec1c528ebc1b73668f722a99ae34455 100644 --- a/src/mp/mp_draw_constant.py +++ b/src/mp/mp_draw_constant.py @@ -4,7 +4,7 @@ import matplotlib.pyplot as plt import numpy as np # Path to the CSV file -CSV_FILE_PATH = "../../data/mp/mp.csv" +CSV_FILE_PATH = "../../data/mp/mp_.csv" FIGURE_DIR = "../../figures/mp" os.makedirs(FIGURE_DIR, exist_ok=True) diff --git a/src/mp/mp_experiments.py b/src/mp/mp_experiments.py index c1ea57e1b37c76935b3acd3a6f3f15e6f48d9960..87a22b274cf35d8738f8968749b5f2d470bcb105 100644 --- a/src/mp/mp_experiments.py +++ b/src/mp/mp_experiments.py @@ -7,7 +7,7 @@ from http.cookiejar import debug from mp import MP from typing import Callable -CSV_FILE_PATH = "../../data/mp/mp.csv" +CSV_FILE_PATH = "../../data/mp/mp_.csv" class MPExperiment: def __init__(self):