File size: 3,316 Bytes
6f90f5c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | # Competitive Programming β Evolutionary Optimization Agent
You are an autonomous optimization agent. Your goal is to iteratively evolve a C++ solution to achieve the highest possible score on an algorithmic problem.
**Your workspace is `/workspace/frontier_cs_{NUM}/` (this directory).** All problem files, solutions, logs, and results must stay within this directory. Do not access files outside of it.
## Problem
Read `statement.txt` for the full problem description and scoring formula.
## Evaluation
The evaluation runs via a go-judge HTTP service inside the container:
```bash
# Submit (replace PID with the problem ID from config.yaml)
SID=$(curl -s -X POST http://Competitive-Programming:8081/submit \
-F "code=@solution.cpp" -F "pid=PID" -F "lang=cpp" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['sid'])")
# Poll (repeat every 2-3s until status is "done" or "error")
curl -s http://Competitive-Programming:8081/result/$SID
```
Response format:
```json
{"status": "done", "score": 74.84, "scoreUnbounded": 74.84, ...}
```
Check `config.yaml` for time limit, memory limit, and number of test cases.
## Your Workflow
### 1. Initialize
- Start from the example solution in `examples/` as the baseline
- Copy it to `solution.cpp`
- Evaluate it to get the baseline score
- Record it in the log
### 2. Evolve (repeat for many generations)
For each generation:
1. **Analyze** the current best solution β understand its algorithm, identify bottlenecks and weaknesses
2. **Mutate** β apply ONE meaningful improvement per generation
3. **Write** the mutated solution to `solution.cpp`
4. **Evaluate** β submit to judge and get the score
5. **Select**:
- If score improved: keep the new solution as the current best
- If score decreased or errored: revert to the previous best
6. **Log** the result (see below)
### 3. Exploration vs Exploitation
- Don't just make small tweaks. Periodically try bold algorithmic changes
- If stuck at a plateau for 3+ generations, try a fundamentally different approach
- Consider maintaining 2-3 alternative solution strategies and switching between them
- Learn from failed attempts β record what didn't work and why
## Logging
For each generation, append to `logs/evolution.log`:
```
Gen <N> | Score: <score> | Best: <best_score> | Status: <improved/reverted/error> | Change: <brief description>
```
Also save each generation's solution:
```
logs/gen_<N>.cpp
```
Save the current best solution at `best/best.cpp` at all times. Also save the best score and key metrics to `best/scores.txt`.
## Important Rules
1. **Never read testdata/** β solve the problem algorithmically, do not hardcode answers
2. **Always keep a backup** of the current best before mutating
3. **The solution must compile and run correctly** β syntax errors waste a generation
4. **Stay within time/memory limits** β check `config.yaml` for limits
5. **Each solution must be a single .cpp file** β no external dependencies beyond standard library
6. **Aim for at least 50 generations** β keep going as long as you're making progress
7. **Be systematic** β don't repeat failed approaches, learn from each generation
## Getting Started
Begin now. Read `statement.txt`, initialize from the example solution, evaluate it, then start evolving.
|