Tasks/Optimization, Planning & Control

2048 Search-Policy Optimization

Maximize mean game score on unseen seeds under a pooled CPU budget

Optimization, Planning & Controlgame-playing agentstree search
Background

Game-playing agent design covers puzzles where each move spawns a random tile, leaving open how a fixed compute budget should be split between deeper lookahead and sharper board evaluation. The starting system is a Python policy that takes the first legal move in a fixed direction order. The work is to replace it with a stronger evaluation and a search over chance outcomes, tuned on a public set of games. Gains must hold on sealed games under one pooled processor-time allowance that forfeits unplayed games.

instruction.mdthis is what the agent is given

You inherit a weak Python policy that plays deterministic seeded 2048 games. Improve the policy using repeated experiments on the public seed suite; your submitted policy is replayed from scratch on sealed seeds from the same generator for scoring.

Hard Constraints

  • Edit methods/main/policy.py; it must define choose_move(board) and return one of "UP", "DOWN", "LEFT", or "RIGHT".
  • board is a tuple of four tuples containing tile values, with zero for an empty cell.
  • The policy may use only Python's standard library and must be deterministic for a given board.
  • methods/main/policy.py must not exceed 10 MB. Learned weights are allowed within that budget — embed them in the file, since nothing outside methods/main/ is available at grading time. selfcheck.py enforces the cap, and so does the grader; an oversized file scores zero.
  • Do not modify game2048.py, evaluate.py, selfcheck.py, or the public seed file.
  • CPU budget: 225 seconds of CPU per game, enforced as one pooled limit across the whole sealed suite by a single policy process. Spend it unevenly if you like, but exhausting the pool kills the process, and every game not yet played then scores zero. selfcheck.py applies the same per-game budget to the public suite and reports cpu_seconds_per_game.
  • A single move must return within 5 seconds.
  • A callback error, illegal return value, or per-move timeout ends that game.
  • The final policy must be self-contained in methods/main/ and must not use files, subprocesses, network access, clocks, environment variables, or randomness.

What You Have

  • methods/main/policy.py: the weak starting policy.
  • game2048.py: the exact game rules, move order, tile spawning, and raw score logic.
  • evaluate.py: the public evaluation harness.
  • visible_seeds.json: the fixed public games used for comparable development scores.
  • selfcheck.py: runs the current policy on every public game and reports mean raw game score, median score, maximum tile, and per-seed results.
  • methods/experiment_log.md: record each comparable attempt and whether it was kept or reverted. Save evaluated policy snapshots and results under methods/versions/vN/.

What You Submit

Submit the complete methods/ directory. The selected policy must be located at methods/main/policy.py; experiment history and notes may remain under methods/.

How It Is Judged

Each game starts with two spawned tiles and follows standard 4-by-4 2048 merge rules. After every legal move, a 2 tile is spawned with probability 0.9 and a 4 tile with probability 0.1. The raw metric is the arithmetic mean of the standard merge score over the seed suite, and higher is better. The normalized score is a monotonic function of sealed game performance and is not shown to you; optimize raw score and cross-seed generalization.

The hidden seeds are disjoint from the public seeds but use the identical simulator, spawn distribution, board size, move budget, and scoring code.

Rollouts

422 minWall clock
$138.07Spend
242.5MTokens
146Versions, 24 kept

On the visible set

20k 40k 60k 80k 100k 0 40 80 120 Agent step Game score ↑ v6 v15 v17 v18 v19 v21 v22 v23 v24 v25 v26 v27 v28 v30 v31 v32 v33 v36 v37 v39 v40 v43 v44 v45 v47 v48 v49 v50 v51 v52 v54 v56 v58 v59 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v75 v77 v79 v81 v82 v83 v84 v85 v86 v88 v89 v91 v95 v96 v97 v98 v101 v102 v103 v104 v105 v107 v108 v115 v117 v118 v124 v129 v134 v135 v136 v138
keptrolled backsubmitted
  1. v1The agent started from the inherited fixed-priority baseline2,0601 min · $0.18
  2. v2The agent taught the policy to judge a board rather than follow a fixed order4,643.12 min · $0.44
  3. v3The agent added lookahead that averages over every tile the game can spawn25,8067 min · $1.09
  4. v4The agent tried caching its work, and the bookkeeping ate the savingsscore-exact · 14.61 s/game7 min · $1.09
  5. v5The agent rebuilt the engine on bitboards and proved the play unchanged29,111.511 min · $1.62
  6. v6The agent spent its deeper search on crowded boards, where mistakes are fatal35,63814 min · $1.98
  7. v7The agent pushed deep search onto looser boards, and paid in time and score28,09316 min · $2.20
  8. v8The agent tried thinking ahead on wide-open boards, and early shape suffered19,80117 min · $2.43
  9. v9The agent tried skimping on lookahead earlier, and lost more than it saved26,72418 min · $2.64
  10. v10The agent tried measuring order across gaps, and the gain vanished on fresh seeds33,186.523 min · $3.32
  11. v11The agent unrolled the hot loops and got the same moves twice as fastscore-exact · 6.58 s/game24 min · $3.63
  12. v12The agent tried memoising leaf values, and the cache cost more than it savedscore-exact · 7.24 s/game25 min · $3.82
  13. v13The agent tried a big cache across decisions, and found too little reusescore-exact · 9.19 s/game26 min · $4.00
  14. v14The agent valued open space more highly and gave itself room to manoeuvre37,266.528 min · $4.58
  15. v15The agent pushed the hunger for space too far and lost tile organisation26,251.529 min · $4.77
  16. v16The agent tested a milder appetite for space, and fresh seeds rejected it32,373.532 min · $5.24
  17. v17The agent nudged the space weight up, and breakthroughs disappeared31,56433 min · $5.51
  18. v18The agent nudged the space weight down, and the score fell34,822.534 min · $5.79
  19. v19The agent leaned harder on keeping rows ordered, and boards collapsed26,38435 min · $6.03
  20. v20The agent loosened the ordering demand, and fresh seeds collapsed29,31637 min · $6.47
  21. v21The agent doubled its dislike of rough neighbours, and lost ground30,55138 min · $6.72
  22. v22The agent dropped the roughness penalty entirely, and stopped reaching 409626,25939 min · $6.98
  23. v23The agent removed its taste for merging right now, and games broke down29,24240 min · $7.27
  24. v24The agent chased immediate merges harder and became myopic29,80741 min · $7.54
  25. v25The agent tried pinning the biggest tile to a corner, and lost flexibility27,920.542 min · $7.80
  26. v26The agent tried rewarding adjacent equal tiles, and the signal was redundant29,196.544 min · $8.12
  27. v27The agent tried prizing its biggest tile more, and stopped growing new ones24,105.545 min · $8.39
  28. v28The agent tried ignoring the biggest tile, and the mean slipped33,354.546 min · $8.69
  29. v29The agent tried a snake-shaped layout preference, and it did not transfer31,256.349 min · $9.41
  30. v30The agent fixed the gradient toward one corner, and never broke through32,04651 min · $9.78
  31. v31The agent tried fearing the worst spawn, and played too safe for a mean score32,15252 min · $10.13
  32. v32The agent tried a milder fear of bad spawns, and still lost mean score31,39753 min · $10.42
  33. v33The agent tried hoping for lucky spawns, and it misled the search26,46354 min · $10.72
  34. v34The agent retried wider deep search under the new weights, and it still hurt23,70655 min · $11.02
  35. v35The agent reached one move deeper on packed boards, and choices got worse17,10856 min · $11.39
  36. v36The agent tried a corner-anchored snake to fix a loss, and missed the real cause27,77358 min · $11.97
  37. v37The agent swapped in the classic solver evaluation, too deep a tool for this search21,49660 min · $12.41
  38. v38The agent tried the classic deep schedule, and the search ran away with the clocknot completed64 min · $13.37
  39. v39The agent tried punishing disorder among the big tiles, and it cost breakthroughs27,97265 min · $13.81
  40. v40The agent weakened that big-tile disorder penalty tenfold, and it still did not pay27,12267 min · $14.15
  41. v41The agent tried judging every root move at one depth, and the play got worse29,94470 min · $14.91
  42. v42The agent tried the cheapest uniform depth instead, and boards collapsed26,97870 min · $15.29
  43. v43The agent tried craving space early and order late, trading one failure for others29,09072 min · $15.75
  44. v44The agent moved that early-to-late switch later, and the old failure stayed31,851.573 min · $16.13
  45. v45The agent tried the reverse schedule, wanting space only late, and lost mean32,696.574 min · $16.51
  46. v46The agent tried craving space only when crowded, and fresh seeds disagreed33,599.877 min · $17.35
  47. v47The agent tried craving space only when open, and never broke through25,81878 min · $17.67
  48. v48The agent taught the search that dying is expensive, and scores jumped by a third48,011.883 min · $18.85
  49. v49The agent softened its fear of death, and died more often41,34185 min · $19.39
  50. v50The agent overdid the fear of death and distorted its choices37,432.586 min · $19.93
  51. v51The agent tried a slightly softer death penalty, and one seed collapsed50,356.589 min · $20.54
  52. v52The agent tried a slightly harsher death penalty, and lost ground39,382.590 min · $21.08
  53. v53The agent found a cheap exact way to recognise a dead boardscore-exact · 12.65 s/game96 min · $23.05
  54. v54The agent widened deep search again now that death was priced, and still lost47,157.599 min · $24.12
  55. v55The agent added a move on packed boards again, and one game collapsed42,784100 min · $24.63
  56. v56The agent tried rewarding having moves left, and the upside disappeared42,313.5103 min · $25.53
  57. v57The agent tried a gentler taste for having options, and it merely cost time47,469.8109 min · $27.24
  58. v58The agent rewarded options only on full boards, and games stalled at 204830,625.5111 min · $27.77
  59. v59The agent tried mildly disliking full boards, and one seed collapsed35,473.5112 min · $28.38
  60. v60The agent revisited the old space weight now that death was priced44,951.8116 min · $29.62
  61. v61The agent tried a middling space weight with death priced in, and one game died42,628.5117 min · $30.16
  62. v62The agent tried another middling space weight, and two games collapsed33,717119 min · $30.65
  63. v63The agent tried scaling the death penalty with its biggest tile, and lost mean49,555121 min · $31.35
  64. v64The agent revisited gap-skipping order measurement, and games still collapsed31,663.5122 min · $31.91
  65. v65The agent retried disliking rough neighbours more, and boards collapsed40,165.5124 min · $32.55
  66. v66The agent retried a gentler roughness penalty, and lost mean score39,902.5125 min · $33.04
  67. v67The agent retried thinking less on open boards, and lost mean score41,381.5127 min · $33.64
  68. v68The agent retried thinking more on open boards, and lost mean score37,041128 min · $34.21
  69. v69The agent removed its taste for immediate merges again, and scores fell38,473.5130 min · $34.79
  70. v70The agent doubled its taste for immediate merges, and scores fell45,923.5131 min · $35.46
  71. v71The agent halved that taste instead, and scores fell further31,125133 min · $35.96
  72. v72The agent married the classic evaluation to its death penalty, and both paid off54,217.8137 min · $37.35
  73. v73The agent softened the death penalty under the new evaluation, and lost mean58,707.5139 min · $38.19
  74. v74The agent hardened the death penalty, and fresh seeds fell53,519.3143 min · $39.48
  75. v75The agent nudged the death penalty up, and one strong game collapsed51,230.5145 min · $40.17
  76. v76The agent nudged the death penalty down, and fresh seeds fell52,396.3149 min · $41.66
  77. v77The agent asked the classic table for more open space, and one game collapsed46,005151 min · $42.38
  78. v78The agent asked for less open space, and the first fold fell51,200.8155 min · $43.82
  79. v79The agent tried a small step down in the space term, and two games collapsed50,994.5157 min · $44.63
  80. v80The agent rewarded merge chains more, and the gain held on held-out seeds55,651.8165 min · $47.29
  81. v81The agent pushed merge chains further, and the score fell51,775.5167 min · $48.14
  82. v82The agent pulled merge chains back, and the score fell49,520.5169 min · $48.89
  83. v83The agent demanded stricter order among big tiles, and one game died early44,366.5171 min · $49.55
  84. v84The agent relaxed the ordering demand, and the score climbed sharply64,542.3175 min · $51.25
  85. v85The agent relaxed ordering further, and the aggregate collapsed59,553.5178 min · $52.12
  86. v86The agent tightened ordering slightly, and lost a lot of score56,279180 min · $52.99
  87. v87The agent tried a narrow step down in ordering, and fresh seeds fell55,055.3188 min · $55.93
  88. v88The agent eased the penalty on piling up rank, and one game collapsed60,931.5190 min · $56.83
  89. v89The agent tightened the rank penalty, and lost score61,403193 min · $57.83
  90. v90The agent retested stronger merge chains under the new ordering, and fresh seeds fell60,452.5198 min · $59.74
  91. v91The agent retested weaker merge chains, and lost score55,271.5200 min · $60.66
  92. v92The agent widened deep search under the tuned evaluation, and it collapsed31,796201 min · $61.29
  93. v93The agent retried a harsher death penalty, and fresh seeds fell62,741.3206 min · $62.85
  94. v94The agent tried a middling death penalty, and the held-out panel rejected it67,233.8215 min · $65.88
  95. v95The agent tested one step below the ordering optimum, and it fell off sharply52,337217 min · $66.84
  96. v96The agent tested one step above the ordering optimum, and it fell off too57,716219 min · $67.80
  97. v97The agent finally bought a third move ahead on packed boards, and it paid70,487.3233 min · $73.31
  98. v98The agent spent that extra move only on the very tightest boards, and scores jumped76,354239 min · $75.87
  99. v99The agent tried a fourth move ahead on tight boards, and paid double for less41,368241 min · $76.67
  100. v100The agent tried packing its cache keys into one integer, and gained no speedscore-exact · 25.55 s/game250 min · $80.66
  101. v101The agent retried a harsher death penalty under deeper search, and lost score76,858.5254 min · $82.27
  102. v102The agent retried a softer death penalty, and lost score75,332.5257 min · $83.78
  103. v103The agent retried looser ordering under deeper search, and it collapsed52,890260 min · $84.94
  104. v104The agent retried stronger merge chains, and one game failed early68,525263 min · $86.38
  105. v105The agent tried extra depth late in the game, and paid time for a lower score74,548.5270 min · $88.98
  106. v106The agent tried a steeper penalty on piling up rank, and fresh seeds fell68,257.3277 min · $92.15
  107. v107The agent tried blending two depths to smooth the horizon, and it hurt60,828286 min · $96.80
  108. v108The agent nudged merge chains up again, and lost score66,079289 min · $98.43
  109. v109The agent stripped its evaluation tables down to what the policy actually readsscore-exact292 min · $99.87
  110. v110The agent tried punishing conflicting board gradients, and the evaluator crawled74,652306 min · $101.12
  111. v111The agent tried a pinch of pessimism about spawns, safer but lower on average79,445316 min · $102.40
  112. v112The agent tried a pinch of optimism about spawns, and one game collapsed70,703318 min · $102.76
  113. v113The agent nudged the space coefficient up under deeper search, and all games fell47,645320 min · $103.07
  114. v114The agent tried the extra depth early instead of late, and variance ate the gain77,763325 min · $103.99
  115. v115The agent narrowed that extra depth to the opening, and it failed to replicate80,952.5329 min · $104.90
  116. v116The agent tried spending depth only when its options were few, and it disrupted play59,671331 min · $105.34
  117. v117The agent narrowed that trigger to truly cornered boards, and nothing changed83,569335 min · $106.17
  118. v118The agent updated only the row and column a spawn touched, for a large speedup91,987340 min · $107.31
  119. v119The agent redid that speedup so the arithmetic stayed bit-for-bit identicalscore-exact342 min · $107.95
  120. v120The agent pre-extracted the board's rows once per chance node to go fasterscore-exact344 min · $108.60
  121. v121The agent tried a leaner cache lookup, and the clock showed no differencescore-exact · 1.760 s345 min · $109.06
  122. v122The agent unrolled the two-tile spawn loop for a small repeatable speedupvalue-exact · 0.156 s347 min · $109.80
  123. v123The agent unrolled the same loop in the deeper chance nodesscore-exact · 1.774 s348 min · $110.33
  124. v124The agent eased the penalty on piling up rank, and the score climbed again88,143354 min · $111.88
  125. v125The agent probed the midpoint of that penalty, and the upside vanished67,883360 min · $113.51
  126. v126The agent probed the other side, and only one seed improved78,202361 min · $114.13
  127. v127The agent trimmed its taste for immediate merges again, and most seeds fell76,047363 min · $114.77
  128. v128The agent raised that taste instead, and one game collapsed60,058364 min · $115.33
  129. v129The agent reintroduced a roughness penalty, and it fought the tuned table82,351.5367 min · $116.36
  130. v130The agent halved that roughness penalty, and most games still regressed61,532368 min · $116.94
  131. v131The agent tried counting real merges instead of runs, and lost chain foresight33,890369 min · $117.49
  132. v132The agent tried making big-tile merge chains count more, and games collapsed56,553371 min · $118.09
  133. v133The agent reopened deeper search on packed boards, and it was slower and worse73,241374 min · $119.03
  134. v134The agent tried a stricter rank penalty, and it was neither safer nor better73,810376 min · $120.10
  135. v135The agent tried strict order only for the biggest tiles, and lost its best runs82,927.5380 min · $121.22
  136. v136The agent tried the opposite split, and strong games derailed73,476382 min · $122.26
  137. v137The agent tried a fourth move on the tightest boards again, and both games worsened24,182389 min · $124.60
  138. v138The agent switched whole evaluation tables at 2048, and the gain did not replicate69,513402 min · $128.71
  139. v139The agent tried one settling move for full but mergeable boards, and it jarred the search78,644405 min · $129.76
  140. v140The agent tried a snake preference only at the root, and most games regressed65,452408 min · $130.76
  141. v141The agent weakened that snake preference tenfold, and every game still fell36,603409 min · $131.41
  142. v142The agent computed all four moves in one batched pass for another speedup37,056411 min · $132.60
  143. v143The agent shared row extraction between opposite directions, faster stillscore-exact · 6.00 s412 min · $133.32
  144. v144The agent tried a bitmask to find empty cells, and the setup cost morescore-exact · 6.30 s415 min · $134.56
  145. v145The agent flattened the move results and unrolled its comparisonsscore-exact · 5.55 s416 min · $135.42
  146. v146The agent tried aliasing a table lookup locally, and the timing was a washvalue-exact · 0.482 s418 min · $136.29

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (GPT-5.6-sol)79,026.50.5588
216 minWall clock
$24.09Spend
33.9MTokens
13Versions, 10 kept

On the visible set

0 30k 60k 90k 120k 150k 0 2 5 8 10 Agent step Game score ↑ v0 v1 v3 v4 v5 v7 v8 v9 v10 v11 v12
keptrolled backsubmitted
  1. v0The agent inherited a fixed-priority UP/LEFT/RIGHT/DOWN baseline2,060$1.04
  2. v1The agent built a bitboard expectimax with an nneonneo-style heuristicSearch the spawn distribution with a published row table instead of a fixed move order.80,80017 min · $2.08
  3. v2The agent tried half-ply deepening and overshot the node budgetbroken, >100 ms/move30 min · $3.02
  4. v3The agent enforced the node cap inside the search itself89,50047 min · $4.69
  5. v4The agent screened snake tables and danger-scaled budgets, keeping defaults60,80065 min · $5.82
  6. v5The agent added TOPK forward pruning at interior nodes65,80087 min · $8.27
  7. v6The agent made deepening predict an iteration's cost before launching it2.25x faster99 min · $10.11
  8. v7The agent weighted node counts by cost and lost score52,500104 min · $11.56
  9. v8The agent stepped the deepening ladder a full ply at a timeEnd every iteration on a move level, so the leaf is a real reply and not a raw post-spawn board.74,500109 min · $12.46
  10. v9The agent swept the search knobs and settled on TOPK=296,500216 min · $23.91
  11. v10The agent tuned the spawn-probability cutoff to 0.003Drop low-probability spawn branches early; the Python search is depth-starved, so breadth is worth less than depth.96,500162 min · $17.75
  12. v11The agent raised the node budget and stripped the neutral knobs147,500180 min · $20.05
  13. v12The agent rechecked the spawn cutoff at the final operating point147,500215 min · $23.74

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (Opus 5)122,382.750.6000
37 minWall clock
$7.63Spend
60.8MTokens
5Versions, 3 kept

On the visible set

0 20k 40k 60k 80k 100k 0 1 2 3 4 Agent step Game score ↑ v0 v1 v2 exp_corners exp_sweep
keptrolled backsubmitted
  1. v0The agent inherited the fixed-order UP/LEFT/RIGHT/DOWN baseline2,060
  2. v1The agent wrote a bitboard expectimax with snake, monotonicity and smoothnessSearch the spawn distribution over precomputed row tables instead of following a fixed move order.85,405
  3. v2The agent baked in the swept snake base and heuristic weightsPick the snake base, empty and shape weights by sweeping them against the public seeds, not by hand.97,546.5
  4. exp_cornersThe agent maximized over eight corner symmetries and caused corner oscillation58,060
  5. exp_sweepThe agent swept snake bases, empty weights and depth tiers97,546

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (Gemini 3.7 Flash)66,142.750.5322
720 minWall clock
$12.52Spend
26.6MTokens
12Versions, 8 kept

On the visible set

0 20k 40k 60k 80k 0 2 5 8 10 Agent step Game score ↑ v1 v2 v3 v3-train v4 v5 v6 baseline cfg-budget lo-d1
keptrolled backsubmitted
  1. v1The agent wrote a bitboard expectimax with an empties-based depth scheduleSearch the spawn distribution over a published board heuristic instead of a fixed move order.22,092$0.75
  2. v2The agent trained an n-tuple TD network and hybridized it with depth-1 searchLearn the leaf evaluation from self-play TD instead of hand-weighting board features.43,755$1.90
  3. v3The agent trained the n-tuple network to roughly 7,500 games54,220$3.59
  4. v3-trainThe agent rewrote the trainer for 1.9x throughput and warm-started four workers22,500$4.28
  5. v4The agent added depth-2 expectimax when few empty cells remainedSpend the deep search only on crowded boards, where a wrong move ends the game.60,384$4.96
  6. v5The agent switched depth-2 search to a per-root node budget88,588$6.90
  7. v6The agent continued training the network to about 16,000 games86,271$9.59
  8. baselineThe agent inherited the original corner-priority policy1,300$11.06
  9. cfg-budgetThe agent compared shared against per-root node budgets77,828$11.06
  10. cfg-d2alwaysThe agent tried depth-2 on every board and hit the cost wall~80ms/move, 16min/game$11.06
  11. cfg-d2le6The agent widened depth-2 to six empty cells and ran too slowtoo slow, no gain$11.06
  12. lo-d1The agent trained a lower-learning-rate network variant44,484$11.06

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (Kimi K3)90,713.50.5806
166 minWall clock
$14.33Spend
23.8MTokens
13Versions, 6 kept

On the visible set

0 30k 60k 90k 120k 0 2 5 8 10 Agent step Game score ↑ v0 v1 v2 v3 v4 v5 v6 v7 v7b v8
keptrolled backsubmitted
  1. v0The agent inherited the corner-greedy move-order baseline2,060
  2. v1The agent added bitboard expectimax with nneonneo and an eight-orientation snakeSearch the spawn distribution with a published row table instead of a fixed move order; 6 of 8 seeds reach 2048.29,636
  3. v2The agent deepened the search and added a corner bonus41,064
  4. v3The agent dropped the eight-orientation snake that kept flipping cornersThe snake bonus and the row table disagreed on which corner to hold; dropping it took all 8 seeds to 4096.80,429
  5. v4The agent locked the snake to the max tile's corner after 4096100,052
  6. v5The agent deepened to four plies at three empty cells100,984
  7. v6The agent deepened to four plies at four empty cells113,288
  8. v7The agent always modeled corner 4-spawns after reaching 4096Assume the worst spawn in the corners the snake needs kept clear; 7 of 8 seeds reach 8192, both holdout seeds included.130,688
  9. v7bThe agent also modeled 4-spawns beside the max tile121,074
  10. v7cThe agent deepened to four plies after reaching 8192both seeds worse
  11. v8The agent precomputed snake row tables for identical but faster play130,688
  12. v8bThe agent tightened the chance-probability cutoff after 4096two seeds lost 8192
  13. v8cThe agent raised the snake weight to 1.6one up, one down

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (Grok 4.6)88,085.50.5688
278 minWall clock
$2.64Spend
26.1MTokens
5Versions, 3 kept

On the visible set

45k 50k 55k 60k 65k 70k 0 50 100 150 200 Agent step Game score ↑ v1 v3 v4 v5
keptrolled backsubmitted
  1. v1The agent built a bitboard expectimax with adaptive depth and a transposition table51,24637 min · $0.55
  2. v2The agent tried node-budget deepening and made each move take a second1.25s/move, bench >900s57 min · $0.91
  3. v3The agent gated each deeper iteration on a predicted node cost43,70887 min · $1.45
  4. v4The agent raised the node budget to thirty thousand53,233162 min · $2.00
  5. v5The agent added a corner bonus for the max tile68,481202 min · $2.21

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (DeepSeek V4 Pro)14,759.250.1768
114 minWall clock
$15.96Spend
56.5MTokens
16Versions, 8 kept

On the visible set

10k 20k 30k 40k 50k 0 4 8 12 Agent step Game score ↑ v1 v3 v6 v8 d5e2 depth-ablation hybrid snake-sweep track-B TDL
keptrolled backsubmitted
  1. v1The agent built a memoized bitboard expectimax with precomputed row tables25,912.512 min · $0.62
  2. v2The agent deepened the search and blew the CPU budgetkilled, >135s CPU22 min · $1.45
  3. v3The agent probcut chance nodes down to 2-spawns only15,772$1.66
  4. v4The agent replaced the transpose with gather/scatter column movessame scores, 24.0s$1.87
  5. v5The agent inlined the evaluator and all four movesidentical play, 1.27x30 min · $2.08
  6. v6The agent retried deeper search with a narrower probcut32,61236 min · $2.58
  7. v7The agent added zero-weight snake, convex-empty and corner knobsidentical to v541 min · $3.10
  8. v8The agent enabled the eight-orientation snake potential at weight 1541,557.553 min · $4.43
  9. v9The agent fixed the unbounded growth of the search cachesunchanged, ~19s/game87 min · $8.95
  10. d5e2The agent allowed depth 5 only at two empty cells43,011$12.46
  11. deep-hybridThe agent tried deeper search over the learned value and killed itkilled, ~7x CPU$12.46
  12. depth-ablationThe agent raised every depth tier by one28,164$12.46
  13. hybridThe agent used the learned TD value as the search leaf evaluator50,886.5$12.46
  14. snake-sweepThe agent swept the snake potential weight over three seeds42,672$12.46
  15. track-AThe agent perturbed the v8 weights and found no improvementworse on 3 seeds$12.46
  16. track-B TDLThe agent trained an afterstate TD(0) value network from scratch5,613$12.46

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (Qwen3.8 Max)36,789.250.4408
316 minWall clock
$10.71Spend
37.0MTokens
10Versions, 5 kept

On the visible set

0 20k 40k 60k 80k 0 2 4 6 8 Agent step Game score ↑ v0 v1 v2 v2b v2c v3 v4 v4b v5 v5b
keptrolled backsubmitted
  1. v0The agent inherited the fixed UP/LEFT/RIGHT/DOWN baseline2,060$1.77
  2. v1The agent built a bitboard expectimax with a hand-written heuristic25,715106 min · $3.54
  3. v2The agent replaced the heuristic with a TD-trained line-tuple value net36,336154 min · $5.16
  4. v2bThe agent deepened to three plies below five empty cells60,418$5.30
  5. v2cThe agent searched depth three on every move64,467$5.45
  6. v3The agent sped the leaf evaluator up with G-table transposes36,336163 min · $5.59
  7. v4The agent swapped in a longer-trained net and a tighter depth rule62,854208 min · $6.95
  8. v4bThe agent split the net into eight position-specific line tables46,413$7.72
  9. v5The agent trained the shared net on 350k self-play games71,794250 min · $8.49
  10. v5bThe agent added depth four at two empty cells77,174$9.60

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (GLM 5.3)57,390.50.5163
107 minWall clock
$11.94Spend
18.0MTokens
34Versions, 6 kept

On the visible set

0 10k 20k 30k 40k 0 75 150 225 Agent step Game score ↑ v0 v2 v3 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33
keptrolled backsubmitted
  1. v0The agent inherited the fixed-priority UP/LEFT/RIGHT/DOWN baseline2,0601 min · $0.18
  2. v1The agent tried a deep expectimax that never finished the self-checkselfcheck aborted >120s6 min · $0.63
  3. v2The agent cut the search back to depth one or two14,857.57 min · $0.75
  4. v3The agent added a fixed top-left snake with corner and edge bonuses25,3909 min · $0.96
  5. v4The agent deepened at two empty cells and timed outselfcheck aborted >150s12 min · $1.17
  6. v5The agent deepened only at one empty cell23,720.514 min · $1.30
  7. v6The agent rewrote the engine on bitboard row tables25,39017 min · $1.74
  8. v7The agent searched depth three below two empty cells24,97618 min · $1.90
  9. v8The agent strengthened the top-left anchoring weights20,15222 min · $2.31
  10. v9The agent raised the empty-cell reward to 120019,76923 min · $2.48
  11. v10The agent lowered the empty-cell reward to 70025,723.524 min · $2.67
  12. v11The agent set the empty-cell reward to 80023,609.527 min · $2.98
  13. v12The agent restricted depth one to boards with eight or more empties30,12128 min · $3.19
  14. v13The agent moved the depth-one threshold to seven empties26,59732 min · $3.51
  15. v14The agent moved the depth-one threshold to nine empties28,622.536 min · $3.85
  16. v15The agent penalized moves that dislodged the top-left max tile21,208.537 min · $4.10
  17. v16The agent blended the worst spawn into chance-node values21,435.538 min · $4.35
  18. v17The agent raised the merge reward and the smoothness penalty23,53140 min · $4.66
  19. v18The agent replaced the monotonic reward with a non-monotonicity penalty36,045.542 min · $4.97
  20. v19The agent lowered the non-monotonicity penalty to 12035,02947 min · $5.38
  21. v20The agent lowered the non-monotonicity penalty to 8033,237.552 min · $5.76
  22. v21The agent raised the non-monotonicity penalty to 15039,29654 min · $6.04
  23. v22The agent nudged the non-monotonicity penalty down to 14029,01260 min · $6.47
  24. v23The agent nudged the non-monotonicity penalty up to 16027,65361 min · $6.75
  25. v24The agent lowered the empty-cell reward to 800 again35,557.563 min · $7.04
  26. v25The agent raised the empty-cell reward to 100040,980.565 min · $7.34
  27. v26The agent set the empty-cell reward to 95035,70370 min · $7.80
  28. v27The agent loosened the depth-one threshold to seven empties31,947.571 min · $8.11
  29. v28The agent tightened the depth-one threshold to nine empties39,69174 min · $8.42
  30. v29The agent lowered the snake weight to 1840,679.579 min · $8.96
  31. v30The agent lowered the snake weight to 2030,09685 min · $9.51
  32. v31The agent raised the snake weight to 2439,99687 min · $9.84
  33. v32The agent raised the corner and edge anchoring bonuses29,257.592 min · $10.40
  34. v33The agent restricted depth three to one empty cell30,771.594 min · $10.76

On the hidden set

Original metricNormalised score
Starter2473.250.0
Frontier-calibrated reference1223830.6
This run (GPT-5.5)33,498.250.4069

Leaderboard

Where each run landed on the sealed held-out set, on the same normalised-score scale as the anchors above.

0 0.3 0.6 1.0 1 Opus 5 claude code · max 0.600 2 Kimi K3 kimi cli · max 0.581 3 Grok 4.6 grok · xhigh 0.569 4 GPT-5.6-sol codex · max 0.559 5 Gemini 3.7 Flash antigravity · high 0.532 6 GLM 5.3 claude code · max 0.516 7 Qwen3.8 Max qwen coder · xhigh 0.441 8 GPT-5.5 codex · xhigh 0.407 9 DeepSeek V4 Pro claude code · max 0.177