Task
Each Case begins with 300 independently moving points on a 100,000 × 100,000 torus. The Policy may add bonds before each simultaneous movement phase.
A bond joins two different connected components, incurs rounded toroidal distance cost, and combines component velocity through momentum conservation. At turn 1,000 the graph must contain exactly ten components of 30 points.
Policy interface
Every observation contains the complete public moving system. The first observation also includes the fixed task constants.
| Observation field | Meaning |
|---|---|
turn / turns_remaining | Current temporal state |
positions | 300 × 2 point positions |
velocities | 300 × 2 component velocities |
components / component_count | Canonical component labels and current count |
total_cost / initial | Accumulated cost and first-observation task constants |
Return all bonds for the current turn as one atomic set. An empty set advances the point system without bonding.
| Action | Meaning |
|---|---|
{"bonds": [[point_i, point_j], ...]} | Join pairs from different current components |
{"bonds": []} | Advance without bonding |
Evaluation
| Quantity | Definition |
|---|---|
| Completion | Exactly 10 components of 30 points after 1,000 turns |
| Benchmark score | Mean official logarithmic distance-cost score |
| Policy failure | Contributes 0 |
Feedback
Feedback reports score, total bond cost, completion, failures, and bounded bond-event coverage.
| Field | Meaning |
|---|---|
mean_log_cost_score | Primary Benchmark score |
mean_total_cost | Mean completed-solution bond cost |
completed / policy_failures | Episode outcome counts |
bond_events / bond_events_omitted | Published and omitted trace event counts |
trace.jsonl | Initial public point state plus a bounded sequence of bond events and resulting component state. |
Using the distribution
Build this independently installable leaf project from the repository root:
uv sync --project environments/atcoder/ahc057/molecules --extra dev
uv build environments/atcoder/ahc057/moleculesThe package exports:
from molecules import MoleculesBenchmark, baseline_program
benchmark = MoleculesBenchmark()
program = baseline_program()