A parallel AI agent system for solving International Mathematical Olympiad (IMO) problems using Google's Gemini API.
This project consists of two main components:
agent.py
: A single AI agent that attempts to solve IMO problemsrun_parallel.py
: A parallel execution system that runs multiple agents simultaneously
- Python 3.7+ installed on your system
- Google Gemini API key - Get one from Google AI Studio
- Required Python packages:
pip install requests
- Clone or download the project files
- Set up your API key:
- Create a
.env
file in the project directory - Add your API key:
GOOGLE_API_KEY=your_api_key_here
- Or set it as an environment variable:
export GOOGLE_API_KEY=your_api_key_here
- Create a
Run a single agent to solve an IMO problem:
python agent.py problem.txt [options]
Arguments:
problem.txt
: Path to the problem statement file (required); imo2025 problems are inproblems
Options:
--log LOG_FILE
: Specify a log file for output (default: prints to console)--other_prompts PROMPTS
: Additional prompts separated by commas
Example:
python agent.py imo2025_p1.txt --log agent_output.log
Run multiple agents in parallel to increase the chance of finding a solution:
python run_parallel.py problem.txt [options]
Arguments:
problem.txt
: Path to the problem statement file (required)
Options:
--num-agents N
or-n N
: Number of parallel agents (default: 10)--log-dir DIR
or-d DIR
: Directory for log files (default: logs)--timeout SECONDS
or-t SECONDS
: Timeout per agent in seconds (default: no timeout)--max-workers N
or-w N
: Maximum worker processes (default: number of agents)--other_prompts PROMPTS
or-o PROMPTS
: Additional prompts separated by commas
Examples:
# Run 20 agents with 5-minute timeout each
python run_parallel.py imo2025_p1.txt -n 20 -t 300
# Run 5 agents with custom log directory
python run_parallel.py imo2025_p1.txt -n 5 -d my_logs
# Run with additional prompts
python run_parallel.py imo2025_p1.txt -n 15 -o "focus_on_geometry,use_induction"
See the problems
folder.
- Output is printed to console by default
- Use
--log
to save output to a file - The agent will indicate if a complete solution was found
- Each agent creates a separate log file in the specified directory
- Progress is shown in real-time
- Final summary shows:
- Total execution time
- Number of successful/failed agents
- Success rate
- Which agent found a solution (if any)
- Location of log files
The system looks for the phrase "Found a correct solution in run" to identify successful solutions.
- Agents use Google's Gemini 2.5 Pro model
- Each agent follows a structured approach with multiple attempts
- Solutions are verified for completeness and correctness
- Agents can provide partial solutions if complete solutions aren't found
- Problem Formatting: Ensure your problem file is clear and well-formatted
- Parallel Execution: Use more agents for harder problems (10-20 agents recommended)
- Timeout Settings: Set reasonable timeouts (you may set no timeout)
- API Limits: Be aware of Google API rate limits and costs
- Log Analysis: Check individual agent logs for detailed reasoning
- API Key Error: Ensure your Google API key is properly set
- Timeout Issues: Increase timeout or reduce number of agents
- Memory Issues: Reduce max-workers if running out of memory
- No Solutions Found: Try running more agents or check problem clarity
Add verbose logging by modifying the agent code or check individual log files for detailed output.
MIT License - Copyright (c) 2025 Lin Yang, Yichen Huang
This software is provided as-is. Users are free to copy, modify, and distribute the code with proper attribution.
Feel free to submit issues, feature requests, or pull requests to improve the system.
This tool is for educational and research purposes. Success in solving IMO problems depends on problem difficulty and AI model capabilities. Not all problems may be solvable by the current system.
If you use this code in your research, please cite:
@article{huang2025gemini,
title={Gemini 2.5 Pro Capable of Winning Gold at IMO 2025},
author={Huang, Yichen and Yang, Lin F},
journal={arXiv preprint arXiv:2507.15855},
year={2025}
}