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 baselinevisible mean 2060.0, median 1646.0, mean max tile 168.0, valid 1.01 min · $0.18
  2. v2The agent taught the policy to judge a board rather than follow a fixed orderaux seeds 0–31 mean 4643.1, folds 6084/4461/3778.5/4249 (v1 aux 2607.9)2 min · $0.44
  3. v3The agent added lookahead that averages over every tile the game can spawnaux seeds 0–3 mean 25806.0, scores 17140/51120/16664/183007 min · $1.09
  4. v4The agent tried caching its work, and the bookkeeping ate the savingsaux seeds 0–3 exactly matched v3 scores; 14.61 s/game under same concurrent load, no measured speed gain7 min · $1.09
  5. v5The agent rebuilt the engine on bitboards and proved the play unchangedaux 0–15 mean 29111.5, median 28822, folds 26887/31614/25944/3200111 min · $1.62
  6. v6The agent spent its deeper search on crowded boards, where mistakes are fatalaux 0–7 mean 35638.0, median 32080 vs v5 mean 31171.0, median 2545014 min · $1.98
  7. v7The agent pushed deep search onto looser boards, and paid in time and scoreaux 0–3 mean 28093.0 vs v6 32359.016 min · $2.20
  8. v8The agent tried thinking ahead on wide-open boards, and early shape sufferedaux 0–3 mean 19801.0 vs v6 32359.017 min · $2.43
  9. v9The agent tried skimping on lookahead earlier, and lost more than it savedaux 0–3 mean 26724.0 vs v6 32359.018 min · $2.64
  10. v10The agent tried measuring order across gaps, and the gain vanished on fresh seedsaux 0–15 mean 33186.5 vs v6 35205.823 min · $3.32
  11. v11The agent unrolled the hot loops and got the same moves twice as fast100,000 boards exact; 6.58 vs 14.01 s/game24 min · $3.63
  12. v12The agent tried memoising leaf values, and the cache cost more than it savedaux 0–3 scores exactly matched, but runtime rose to 7.24 s/game from 6.5825 min · $3.82
  13. v13The agent tried a big cache across decisions, and found too little reuseaux 0–3 scores exactly matched, but runtime rose to 9.19 s/game26 min · $4.00
  14. v14The agent valued open space more highly and gave itself room to manoeuvreaux 0–15 mean 37266.5 vs v11 35205.828 min · $4.58
  15. v15The agent pushed the hunger for space too far and lost tile organisationaux 0–7 mean 26251.5, median 18656 vs v14 38221/3322429 min · $4.77
  16. v16The agent tested a milder appetite for space, and fresh seeds rejected itaux 0–15 mean 32373.5 vs v14 37266.532 min · $5.24
  17. v17The agent nudged the space weight up, and breakthroughs disappearedaux 0–7 mean 31564.0 vs v14 3822133 min · $5.51
  18. v18The agent nudged the space weight down, and the score fellaux 0–7 mean 34822.5, median 30958 vs v14 38221/3322434 min · $5.79
  19. v19The agent leaned harder on keeping rows ordered, and boards collapsedaux 0–7 mean 26384.0, median 2235435 min · $6.03
  20. v20The agent loosened the ordering demand, and fresh seeds collapsedaux 0–15 mean 29316.0 vs v14 37266.537 min · $6.47
  21. v21The agent doubled its dislike of rough neighbours, and lost groundaux 0–7 mean 30551.0, median 30038 vs v14 38221/3322438 min · $6.72
  22. v22The agent dropped the roughness penalty entirely, and stopped reaching 4096aux 0–7 mean 26259.0, median 2741839 min · $6.98
  23. v23The agent removed its taste for merging right now, and games broke downaux 0–7 mean 29242.0 vs v14 3822140 min · $7.27
  24. v24The agent chased immediate merges harder and became myopicaux 0–7 mean 29807.0 vs v14 3822141 min · $7.54
  25. v25The agent tried pinning the biggest tile to a corner, and lost flexibilityaux 0–7 mean 27920.542 min · $7.80
  26. v26The agent tried rewarding adjacent equal tiles, and the signal was redundantaux 0–7 mean 29196.5 vs v14 3822144 min · $8.12
  27. v27The agent tried prizing its biggest tile more, and stopped growing new onesaux 0–7 mean 24105.545 min · $8.39
  28. v28The agent tried ignoring the biggest tile, and the mean slippedaux 0–7 mean 33354.5 vs v14 3822146 min · $8.69
  29. v29The agent tried a snake-shaped layout preference, and it did not transferaux 0–15 mean 31256.3 vs v14 37266.549 min · $9.41
  30. v30The agent fixed the gradient toward one corner, and never broke throughaux 0–7 mean 32046.0, median 3488851 min · $9.78
  31. v31The agent tried fearing the worst spawn, and played too safe for a mean scoreaux 0–7 mean 32152.0, all folds 30–33k but no 4096 games52 min · $10.13
  32. v32The agent tried a milder fear of bad spawns, and still lost mean scoreaux 0–7 mean 31397.0 vs v14 3822153 min · $10.42
  33. v33The agent tried hoping for lucky spawns, and it misled the searchaux 0–7 mean 26463.0, one 7892 failure54 min · $10.72
  34. v34The agent retried wider deep search under the new weights, and it still hurtaux 0–3 mean 23706.0 vs v14 4578855 min · $11.02
  35. v35The agent reached one move deeper on packed boards, and choices got worseaux seeds 0–1 both regressed to 1024 (mean 17108 vs v14 45752 on the pair)56 min · $11.39
  36. v36The agent tried a corner-anchored snake to fix a loss, and missed the real causeaux 0–7 mean 27773.0 vs v14 3822158 min · $11.97
  37. v37The agent swapped in the classic solver evaluation, too deep a tool for this searchaux 0–7 mean 21496.0 vs v14 3822160 min · $12.41
  38. v38The agent tried the classic deep schedule, and the search ran away with the clockseed-0 run manually stopped after >3 minutes without completing64 min · $13.37
  39. v39The agent tried punishing disorder among the big tiles, and it cost breakthroughsaux 0–7 mean 27972.0 vs v14 3822165 min · $13.81
  40. v40The agent weakened that big-tile disorder penalty tenfold, and it still did not payaux 0–7 mean 27122.0 vs v14 3822167 min · $14.15
  41. v41The agent tried judging every root move at one depth, and the play got worseaux 0–3 mean 29944.0 vs v14 4578870 min · $14.91
  42. v42The agent tried the cheapest uniform depth instead, and boards collapsedaux 0–3 mean 26978.070 min · $15.29
  43. v43The agent tried craving space early and order late, trading one failure for othersaux 0–7 mean 29090.072 min · $15.75
  44. v44The agent moved that early-to-late switch later, and the old failure stayedaux 0–7 mean 31851.573 min · $16.13
  45. v45The agent tried the reverse schedule, wanting space only late, and lost meanaux 0–7 mean 32696.5 vs v14 38221 and v11 3563874 min · $16.51
  46. v46The agent tried craving space only when crowded, and fresh seeds disagreedaux 0–15 mean 33599.8 vs v14 37266.577 min · $17.35
  47. v47The agent tried craving space only when open, and never broke throughaux 0–7 mean 25818.078 min · $17.67
  48. v48The agent taught the search that dying is expensive, and scores jumped by a thirdaux 0–15 mean 48011.8 vs v14 37266.583 min · $18.85
  49. v49The agent softened its fear of death, and died more oftenaux 0–7 mean 41341.0 vs v48 5361885 min · $19.39
  50. v50The agent overdid the fear of death and distorted its choicesaux 0–7 mean 37432.586 min · $19.93
  51. v51The agent tried a slightly softer death penalty, and one seed collapsedaux 0–7 mean 50356.5 vs v48 5361889 min · $20.54
  52. v52The agent tried a slightly harsher death penalty, and lost groundaux 0–7 mean 39382.590 min · $21.08
  53. v53The agent found a cheap exact way to recognise a dead board200,000 boards exact; 12.65 s/game96 min · $23.05
  54. v54The agent widened deep search again now that death was priced, and still lostaux 0–7 mean 47157.5 vs v53 5361899 min · $24.12
  55. v55The agent added a move on packed boards again, and one game collapsedaux 0–3 mean 42784.0 vs v53 53343100 min · $24.63
  56. v56The agent tried rewarding having moves left, and the upside disappearedaux 0–7 mean 42313.5 vs v53 53618103 min · $25.53
  57. v57The agent tried a gentler taste for having options, and it merely cost timeaux 0–15 mean 47469.8 vs v53 48011.8109 min · $27.24
  58. v58The agent rewarded options only on full boards, and games stalled at 2048aux 0–7 mean 30625.5111 min · $27.77
  59. v59The agent tried mildly disliking full boards, and one seed collapsedaux 0–7 mean 35473.5112 min · $28.38
  60. v60The agent revisited the old space weight now that death was pricedaux 0–15 mean 44951.8 vs v53 48011.8116 min · $29.62
  61. v61The agent tried a middling space weight with death priced in, and one game diedaux 0–7 mean 42628.5117 min · $30.16
  62. v62The agent tried another middling space weight, and two games collapsedaux 0–7 mean 33717.0119 min · $30.65
  63. v63The agent tried scaling the death penalty with its biggest tile, and lost meanaux 0–7 mean 49555.0 vs v53 53618121 min · $31.35
  64. v64The agent revisited gap-skipping order measurement, and games still collapsedaux 0–7 mean 31663.5122 min · $31.91
  65. v65The agent retried disliking rough neighbours more, and boards collapsedaux 0–7 mean 40165.5124 min · $32.55
  66. v66The agent retried a gentler roughness penalty, and lost mean scoreaux 0–7 mean 39902.5 vs v53 53618125 min · $33.04
  67. v67The agent retried thinking less on open boards, and lost mean scoreaux 0–7 mean 41381.5 vs v53 53618127 min · $33.64
  68. v68The agent retried thinking more on open boards, and lost mean scoreaux 0–7 mean 37041.0 vs v53 53618128 min · $34.21
  69. v69The agent removed its taste for immediate merges again, and scores fellaux 0–7 mean 38473.5 vs v53 53618130 min · $34.79
  70. v70The agent doubled its taste for immediate merges, and scores fellaux 0–7 mean 45923.5 vs v53 53618131 min · $35.46
  71. v71The agent halved that taste instead, and scores fell furtheraux 0–7 mean 31125.0 vs v53 53618133 min · $35.96
  72. v72The agent married the classic evaluation to its death penalty, and both paid offaux 0–15 mean 54217.8 vs v53 48011.8137 min · $37.35
  73. v73The agent softened the death penalty under the new evaluation, and lost meanaux 0–7 mean 58707.5 vs v72 62874139 min · $38.19
  74. v74The agent hardened the death penalty, and fresh seeds fellaux 0–15 mean 53519.3 vs v72 54217.8143 min · $39.48
  75. v75The agent nudged the death penalty up, and one strong game collapsedaux 0–7 mean 51230.5145 min · $40.17
  76. v76The agent nudged the death penalty down, and fresh seeds fellaux 0–15 mean 52396.3 vs v72 54217.8149 min · $41.66
  77. v77The agent asked the classic table for more open space, and one game collapsedaux 0–7 mean 46005.0151 min · $42.38
  78. v78The agent asked for less open space, and the first fold fellaux 0–15 mean 51200.8 vs v72 54217.8155 min · $43.82
  79. v79The agent tried a small step down in the space term, and two games collapsedaux 0–7 mean 50994.5157 min · $44.63
  80. v80The agent rewarded merge chains more, and the gain held on held-out seedsaux 0–15 mean 55651.8 vs v72 54217.8165 min · $47.29
  81. v81The agent pushed merge chains further, and the score fellaux 0–7 mean 51775.5 vs v80 61879167 min · $48.14
  82. v82The agent pulled merge chains back, and the score fellaux 0–7 mean 49520.5 vs v80 61879169 min · $48.89
  83. v83The agent demanded stricter order among big tiles, and one game died earlyaux 0–7 mean 44366.5171 min · $49.55
  84. v84The agent relaxed the ordering demand, and the score climbed sharplyaux 0–15 mean 64542.3 vs v80 55651.8175 min · $51.25
  85. v85The agent relaxed ordering further, and the aggregate collapsedaux 0–7 mean 59553.5178 min · $52.12
  86. v86The agent tightened ordering slightly, and lost a lot of scoreaux 0–7 mean 56279.0 vs v84 71142180 min · $52.99
  87. v87The agent tried a narrow step down in ordering, and fresh seeds fellaux 0–15 mean 55055.3 vs v84 64542.3188 min · $55.93
  88. v88The agent eased the penalty on piling up rank, and one game collapsedaux 0–7 mean 60931.5190 min · $56.83
  89. v89The agent tightened the rank penalty, and lost scoreaux 0–7 mean 61403.0 vs v84 71142193 min · $57.83
  90. v90The agent retested stronger merge chains under the new ordering, and fresh seeds fellaux 0–15 mean 60452.5 vs v84 64542.3198 min · $59.74
  91. v91The agent retested weaker merge chains, and lost scoreaux 0–7 mean 55271.5 vs v84 71142200 min · $60.66
  92. v92The agent widened deep search under the tuned evaluation, and it collapsedaux 0–3 mean 31796.0 vs v84 64048201 min · $61.29
  93. v93The agent retried a harsher death penalty, and fresh seeds fellaux 0–15 mean 62741.3 vs v84 64542.3206 min · $62.85
  94. v94The agent tried a middling death penalty, and the held-out panel rejected itaux mean 67,233.8; checkpoint mean 46,835.5 vs v84 55,528 (lost 3/4 folds)215 min · $65.88
  95. v95The agent tested one step below the ordering optimum, and it fell off sharplyaux 0–7 mean 52337.0 vs v84 71142217 min · $66.84
  96. v96The agent tested one step above the ordering optimum, and it fell off tooaux 0–7 mean 57716.0 vs v84 71142219 min · $67.80
  97. v97The agent finally bought a third move ahead on packed boards, and it paidaux 0–15 mean 70487.3 vs v84 64542.3233 min · $73.31
  98. v98The agent spent that extra move only on the very tightest boards, and scores jumpedaux 0–15 mean 76354.0 vs v97 70487.3 and v84 64542.3239 min · $75.87
  99. v99The agent tried a fourth move ahead on tight boards, and paid double for lessaux seeds 0–1 mean 41368 vs v98 72778241 min · $76.67
  100. v100The agent tried packing its cache keys into one integer, and gained no speedaux 0–3 scores exactly matched v98; 25.55 s/game, no speed gain versus v98's 23.26 s/game aggregate250 min · $80.66
  101. v101The agent retried a harsher death penalty under deeper search, and lost scoreaux 0–7 mean 76858.5 vs v98 83581254 min · $82.27
  102. v102The agent retried a softer death penalty, and lost scoreaux 0–7 mean 75332.5 vs v98 83581257 min · $83.78
  103. v103The agent retried looser ordering under deeper search, and it collapsedaux 0–7 mean 52890.0 vs v98 83581260 min · $84.94
  104. v104The agent retried stronger merge chains, and one game failed earlyaux 0–7 mean 68525.0263 min · $86.38
  105. v105The agent tried extra depth late in the game, and paid time for a lower scoreaux 0–7 mean 74548.5 vs v98 83581270 min · $88.98
  106. v106The agent tried a steeper penalty on piling up rank, and fresh seeds fellaux 0–15 mean 68257.3 vs v98 76354277 min · $92.15
  107. v107The agent tried blending two depths to smooth the horizon, and it hurtaux 0–7 mean 60828.0 vs v98 83581286 min · $96.80
  108. v108The agent nudged merge chains up again, and lost scoreaux 0–7 mean 66079.0 vs v98 83581289 min · $98.43
  109. v109The agent stripped its evaluation tables down to what the policy actually reads200,000 random bitboards exactly matched v98 values/terminal scores; aux 0–3 scores exactly matched292 min · $99.87
  110. v110The agent tried punishing conflicting board gradients, and the evaluator crawledseed 0 score 74652 vs v109 82804306 min · $101.12
  111. v111The agent tried a pinch of pessimism about spawns, safer but lower on averageaux 0–3 mean 79445 vs v109 83591316 min · $102.40
  112. v112The agent tried a pinch of optimism about spawns, and one game collapsedaux 0–3 mean 70703 vs v109 83591318 min · $102.76
  113. v113The agent nudged the space coefficient up under deeper search, and all games fellaux 0–3 mean 47645 vs v109 83591320 min · $103.07
  114. v114The agent tried the extra depth early instead of late, and variance ate the gainaux 0–3 mean 77763 vs v109 83591325 min · $103.99
  115. v115The agent narrowed that extra depth to the opening, and it failed to replicateaux 0–7 mean 80952.5 vs v109 83581329 min · $104.90
  116. v116The agent tried spending depth only when its options were few, and it disrupted playaux 0–3 mean 59671 vs v109 83591331 min · $105.34
  117. v117The agent narrowed that trigger to truly cornered boards, and nothing changedaux 0–7 mean 83569 vs v109 83581335 min · $106.17
  118. v118The agent updated only the row and column a spawn touched, for a large speedupaux mean 91,987 vs 83,581; 7/8 exact, one 62,752→130,000340 min · $107.31
  119. v119The agent redid that speedup so the arithmetic stayed bit-for-bit identical20,000 random depth-0 chance values bit-exact; aux 0–3 scores exactly matched v109342 min · $107.95
  120. v120The agent pre-extracted the board's rows once per chance node to go faster20,000 random values bit-exact; aux 0–3 scores exactly matched344 min · $108.60
  121. v121The agent tried a leaner cache lookup, and the clock showed no differencepublic failure seed score exact; three alternating repeats averaged 1.760 s vs v120 1.748 s345 min · $109.06
  122. v122The agent unrolled the two-tile spawn loop for a small repeatable speedup20,000 chance values exact; 0.156 vs 0.180 s microbench347 min · $109.80
  123. v123The agent unrolled the same loop in the deeper chance nodespublic failure score exact; three alternating repeats averaged 1.774 vs v122 1.818 s348 min · $110.33
  124. v124The agent eased the penalty on piling up rank, and the score climbed againaux 0–15 mean 88143 vs v123 76354354 min · $111.88
  125. v125The agent probed the midpoint of that penalty, and the upside vanishedaux 0–3 mean 67883 vs v124 83633 and v123 83591360 min · $113.51
  126. v126The agent probed the other side, and only one seed improvedaux 0–3 mean 78202 vs v124 83633361 min · $114.13
  127. v127The agent trimmed its taste for immediate merges again, and most seeds fellaux 0–3 mean 76047 vs v124 83633363 min · $114.77
  128. v128The agent raised that taste instead, and one game collapsedaux 0–3 mean 60058 vs v124 83633364 min · $115.33
  129. v129The agent reintroduced a roughness penalty, and it fought the tuned tableaux 0–7 mean 82351.5 vs v124 103227367 min · $116.36
  130. v130The agent halved that roughness penalty, and most games still regressedaux 0–3 mean 61532 vs v124 83633368 min · $116.94
  131. v131The agent tried counting real merges instead of runs, and lost chain foresightaux 0–3 mean 33890 vs v124 83633369 min · $117.49
  132. v132The agent tried making big-tile merge chains count more, and games collapsedaux 0–3 mean 56553 vs v124 83633371 min · $118.09
  133. v133The agent reopened deeper search on packed boards, and it was slower and worseaux 0–3 mean 73241 vs v124 83633374 min · $119.03
  134. v134The agent tried a stricter rank penalty, and it was neither safer nor betteraux 0–7 mean 73810 vs v124 103227376 min · $120.10
  135. v135The agent tried strict order only for the biggest tiles, and lost its best runsaux 0–7 mean 82927.5 vs v124 103227380 min · $121.22
  136. v136The agent tried the opposite split, and strong games derailedaux 0–7 mean 73476 vs v124 103227382 min · $122.26
  137. v137The agent tried a fourth move on the tightest boards again, and both games worsenedaux seeds 0–1 mean 24182 vs v124 59474389 min · $124.60
  138. v138The agent switched whole evaluation tables at 2048, and the gain did not replicateaux 0–7 mean 69513 vs v124 103227402 min · $128.71
  139. v139The agent tried one settling move for full but mergeable boards, and it jarred the searchaux 0–3 mean 78644 vs v124 83633405 min · $129.76
  140. v140The agent tried a snake preference only at the root, and most games regressedaux 0–3 mean 65452 vs v124 83633408 min · $130.76
  141. v141The agent weakened that snake preference tenfold, and every game still fellaux 0–3 mean 36603 vs v124 83633409 min · $131.41
  142. v142The agent computed all four moves in one batched pass for another speedupscore 37,056 exact; 7.00 vs 7.92 s411 min · $132.60
  143. v143The agent shared row extraction between opposite directions, faster stillscores exact; 6.00 vs 7.48 s412 min · $133.32
  144. v144The agent tried a bitmask to find empty cells, and the setup cost more20,000 depth-0 chance values exact; public-seed repeats averaged 6.30 vs v143 5.66 s415 min · $134.56
  145. v145The agent flattened the move results and unrolled its comparisons100,000 random batched results exact; public-seed repeats score-exact and averaged 5.55 vs v143 5.91 s416 min · $135.42
  146. v146The agent tried aliasing a table lookup locally, and the timing was a washvalues exact; median 0.482 vs 0.486 s over six 50k-board runs418 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