You inherit a legal but inactive OpenTTD NoAI and must turn it into a transport-company
policy. Improve it through repeated local experiments on the fixed public seed suite;
the final policy is replayed for 20 game years on sealed seeds from the same generator.
Hard Constraints
Edit the Squirrel NoAI under methods/main/. The verifier requires
methods/main/info.nut and methods/main/main.nut.
Keep the registered AI name and instance class MyAI, API version 13, and remain
compatible with OpenTTD 13.4.
The policy must act only through the documented NoAI API. Do not modify the evaluator,
OpenTTD, OpenGFX, savegames, public seed list, or cached game archives.
Runs that crash, fail to create a company, or do not yield a valid final quarterly
company value score zero for that seed.
The verifier is offline. The submitted AI must be self-contained under methods/.
What You Have
methods/main/info.nut and methods/main/main.nut: the weak starting AI.
docs/: the OpenTTD 13.4 NoAI API reference, tutorial, and Squirrel reference.
game_eval.py: the public evaluator implementation and exact metric extraction logic.
visible_seeds.json: the fixed public seeds used for comparable development scores.
selfcheck.py: evaluates the current policy on all public seeds. Each candidate
version should be judged with the same command and seed set.
methods/experiment_log.md: record every comparable attempt, its public mean company
value, what changed, and whether it was kept or reverted. Save the exact evaluated
files and visible_result.json under methods/versions/vN/ for every logged version.
What You Submit
Submit the complete methods/ directory. Your final candidate must be in
methods/main/; optional historical versions and notes may remain elsewhere under
methods/.
How It Is Judged
Each seed creates a fresh procedurally generated OpenTTD map and runs your AI alone for
20 game years. For each seed, the evaluator reads the last valid quarterly
old_economy[0].company_value from the game save stream. The official score is the
arithmetic mean of those final company values over the sealed seed set, and higher is
better. The normalized score is a monotonic transformation of that raw mean and is not shown to
you; optimize mean company value and cross-seed generalization. The verifier records per-seed
company value, cash, loan, final date, and error status for author-side auditing.
The hidden seeds are disjoint from the public seeds but use the same OpenTTD version,
map generator, game duration, starting conditions, and scoring code. A policy that
hard-codes public towns, industries, or tile coordinates will not transfer.
Metric
mean final company value over the sealed map seeds · higher is better
Four sealed seeds, OpenTTD 13.4, AI alone for 20 game years; mean of the last quarterly company value.
anchor
visible set
held-out
reward
inactive baseline AI, no company
0
0
0.00
scoring floor
—
100,000
0.00
R
reference policy, sealed seeds
7,642,382.00
7,149,966.75
0.30
soft cap
—
1,000,000,000
1.00
normalisation
m <= F
0
F < m <= R
0.3 * log(m/F) / log(R/F)
m > R
clamp(0.3 + 0.7 * log(m/R) / log(M/R), 0, 1)
m = this run's held-out metric · R = reference policy, sealed seeds
F = floor 100,000, R = reference, M = soft cap. The mean is mapped once, not per seed; a seed with no company counts 0.
Rollouts
720 minwall clock
$41.95spend
62.2Mtokens
30versions, 18 kept
keptrevertedno scoreturning point
v0Inherited baseline: logs company value, builds nothing, creates no company00 min · $0.07
v1Air passengers: towns paired by pop*distance, small airports, full-load orders1,445,95314 min · $2.83
v3Unlimited town retry with cooldown, growing radius, loan-funded terraforming5,967,17124 min · $4.82
v4Drop full-load orders so planes leave immediatelyA station's cargo rating caps what it collects and waiting cargo sinks it; leaving empty roughly doubled throughput.13,563,83429 min · $5.40
v5Endgame conversion: in 1969-09 take the max loan and spend all cash on aircraft17,564,65037 min · $6.45
v6Cheap-station conversion: surplus cash into 1-tile bus stops, 2,500 of value eachValue books a flat 2,500 per station facility that costs ~310 to build, so a pound in 1-tile stops beats a pound of cash ~8x.single-seed check56 min · $9.06
v7Start stop-building only when time barely suffices; keep stops away from towns61,445,218155 min · $12.27
v8Pack a bus stop and a truck stop into one station object to halve station count62,849,325168 min · $14.70
v9Freight route planner; dormant, base-set aircraft carry no bulk cargoinactive, not measured168 min · $14.70
v10Several airports per town, quota by population6-seed check only173 min · $14.88
v11Mail planes: refit each route's planes to whichever cargo is backing up69,593,181184 min · $15.55
v12Plane cap per airport 10 -> 1444,349,303643 min · $36.00
v13Add a plane only if it earns back its price before the game ends; scrap losers69,177,228205 min · $16.05
v14Fix the town-scoring bug that left the multi-airport quota inactive74,348,045221 min · $16.69
v15Large airports plus big planes when both endpoints are large65,979,110238 min · $17.34
v16Airport quota 1+pop/800 capped at 674,053,501255 min · $19.11
v17Planes to the biggest cargo queue first, 6 extra on backlogged airports58,949,631266 min · $19.34
v18Plane cap per airport 10 -> 779,415,299279 min · $19.71
v19Plane cap per airport 7 -> 576,107,699291 min · $20.11
v20Airport quota 1+pop/800 capped at 6, with the plane cap at 779,169,089314 min · $20.90
v21Insurance: allow a too-close partner; sell a plane if cash drops under 12k79,522,426378 min · $22.97
v22Site stops by a direct catchment test, then non-steep slopes, then near towns86,964,175413 min · $25.44
v23Join extra one-tile stops to each airport's own station to widen its catchmentStops joined to the airport's own station lift its catchment from ~130 to ~320 tiles, so planes collect a far wider area.97,268,646437 min · $27.46
v24Plane cap per airport 7 -> 9, retested after the catchments grew94,235,545455 min · $27.94
v25Extension stops forced >=5 tiles from the airport and >=4 apart, cap 1296,638,309471 min · $28.39
v26Up to 16 extension stops per airport94,486,875489 min · $28.85
v27Up to 7 extension stops per airport96,813,289506 min · $29.33
v28Tidy-up: drop an unused helper, wrap init in try/catch; behaviour of v2397,268,646626 min · $35.02
v29Pack a truck stop and a rail station onto each spam stop to cut station count96,295,142688 min · $40.59
Six hours bought the whole gain, then memory bit: 27,125 stations per save, the v28 public eval OOM-killed at the 4 GiB cap.
On the hidden set
held-out metric
reward
inactive baseline AI, no company
0
0.00
scoring floor
100,000
0.00
reference policy, sealed seeds
7,149,966.75
0.30
soft cap
1,000,000,000
1.00
this run
96,925,359
0.6693
Re-graded after a verifier fix; this is the corrected reward.
v1Inherited baseline: logs balance, builds nothing, no company on any seed01 min · $0.25
v2First active policy: max loan, two small airports, planes; wrong API namespace05 min · $1.04
v3Fix plane-type namespace to AIAirport.PT_SMALL_PLANE; two-airport route runs2,619,479.256 min · $1.19
v4Single-route fleet cap 8 -> 162,233,968.510 min · $2.01
v5Up to 8 independent 6-plane small-airport routes, scored over unused town pairsOne route left cash idle; score every unused town pair and open eight of them in parallel, six planes each.9,100,680.2513 min · $2.42
v6Continue past small-airport expiry with large airports and big planes; cap 1210,585,781.7516 min · $3.02
v7Validate each airport candidate with AITestMode; large-airport reach 14 -> 2413,332,273.519 min · $3.63
v8Route ceiling 12 -> 1613,707,118.7522 min · $4.26
v9Terrain-leveling fallback for large sites, plus post-1960 debt repayment13,725,316.525 min · $4.94
v10Terrain-leveling fallback alone, v8 debt behaviour restored13,642,591.526 min · $5.30
v11Prefer opening an affordable route over filling existing groups11,887,572.2527 min · $5.61
v12All routes 6 -> 8 aircraft after 196013,033,15929 min · $5.99
v13Grow a route toward 8 planes after 3 months above 120 waiting passengers13,536,039.530 min · $6.29
v14One extra plane only, after 3 months above 300 waiting passengers13,762,939.7531 min · $6.67
v15Sustained backlog trigger 300 -> 500 passengers13,639,072.7533 min · $7.07
v16Monthly compatible-engine discovery and group autoreplace15,958,07834 min · $7.39
v17Modernization plus the v14 sustained-backlog extra plane15,948,566.7535 min · $7.72
v19New-route cash reserve at the 50k midpoint15,511,475.7537 min · $8.52
v20After 4 routes and 750k cash prefer large-airport pairs; yearly retry throttle16,097,85241 min · $9.62
v21Up to four deficit builds a month once groups are mature16,495,083.544 min · $10.53
v22Mature multi-fill plus v20's throttled large-airport preference16,535,341.546 min · $10.97
v23Stop retrying large airports for the rest of the game after one failed search16,497,615.7547 min · $11.42
v24Large-airport search reach 24 -> 14 tiles16,800,805.7548 min · $11.87
v25Large-route target 4 -> 2 big aircraft16,755,401.550 min · $12.80
v26Large-route target 3 big aircraft16,566,001.7551 min · $13.26
v27Large-route target 5 big aircraft16,563,594.2552 min · $13.63
v28Post-1960 deficit build burst 4 -> 8 planes a month16,753,931.7554 min · $14.12
v2930k route reserve, four-plane mature bursts and one-shot reach-14 large search17,157,261.7555 min · $14.60
v30Drop the extra new-route cash reserve entirely16,504,58757 min · $15.11
v31Monthly company statues in served towns after 1960 above 2M cash13,849,169.2559 min · $15.74
v32Join one validated drive-through bus stop to each airport stationA drive-through stop joined to the airport's own station widens what planes collect, with no buses to run.21,868,733.2560 min · $16.25
v33A second joined road stop at each airport station23,240,503.7562 min · $17.52
v34A third joined road stop at each airport station22,539,695.7563 min · $18.16
v35Second joined stop forced >=4 Manhattan tiles from the first22,929,063.2565 min · $18.93
v36OF_FULL_LOAD_ANY at both airport orders17,849,643.567 min · $19.37
v37Full-load-any only at the higher-production endpoint19,851,441.568 min · $19.91
v38Small routes grow 6 -> 8 planes after 3 months above 300 waiting passengers23,328,00171 min · $21.02
v39Cap demand-triggered small-airport groups at 7 planes23,275,869.572 min · $21.58
v40Remove the 30k new-route reserve now that joined stops raised revenue22,680,28173 min · $22.04
v41New-route reserve 30k -> 75k under joined stops21,575,677.2574 min · $22.50
v42All small routes 6 -> 7 aircraft after 196022,982,958.7576 min · $23.07
v43Rank joined-stop sites by passenger plus mail production21,617,27277 min · $23.54
v44One grouped mail-refitted plane per route above 300 waiting mail after 196024,651,48281 min · $24.64
v45Apply group autoreplace to mail groups too25,293,612.7584 min · $25.72
v46Second mail plane after 3 months above 600 combined backlog26,163,805.587 min · $26.95
v47Third mail tier after 3 further months above 1,000 waiting mail25,745,07690 min · $28.20
v48Second-mail-plane threshold 600 -> 40025,901,642.592 min · $28.83
v49From 1968 repay debt once cash exceeds loan plus 1M26,214,150.7593 min · $29.47
v50Late debt repayment moved from 1968 to 196526,056,85394 min · $29.98
v51Third joined stop once adaptive mail service exists25,488,030.7595 min · $30.62
v52Three stops per route: one each end plus a second at the weaker endpoint24,096,633.598 min · $31.38
v53Road feeder per airport from 1962: bus stop, depot and one transferring bus25,717,383100 min · $32.07
v54Small groups 6 -> 7 planes after 3 checks above 300 waiting passengers26,085,569.5103 min · $33.29
v55Route-pair distance reward cap 160 -> 220 tiles27,775,698.25105 min · $33.63
v56Distance reward cap 220 -> 280 tiles28,335,130.25106 min · $33.81
v57Distance reward cap 280 -> 340 tiles28,372,742.5108 min · $34.06
v58Remove the distance cap; pair value scales with full Manhattan distance28,794,023.5109 min · $34.28
v59Drop the +40 offset from the uncapped distance multiplier28,877,079110 min · $34.49
v60Quadratic route-distance multiplier, distance^2 / 10027,945,411.75112 min · $34.72
v61Distance offset 40 -> 20 under the uncapped linear reward29,079,244.5113 min · $34.95
v62Distance offset 20 -> 1029,004,585.75114 min · $35.19
v63Route search widened from 30 to 40 valid unused town sites29,079,244.5116 min · $35.52
v64Airport-site production weight in pair demand 20 -> 4029,400,633.5117 min · $35.84
v65Airport-site production weight at the midpoint 3029,709,635118 min · $36.13
v66Airport-site production weight 30 -> 3529,444,505.25119 min · $36.42
v67Add half the weaker endpoint's demand as a balance bonus28,361,550.5121 min · $36.78
v68Alternate plane construction between both endpoint hangars28,743,586123 min · $37.17
v69First-mail-plane backlog trigger 300 -> 20028,848,381.25125 min · $37.95
v70First-mail-plane backlog trigger 300 -> 40029,402,683.5126 min · $38.32
v71Second-mail-plane backlog trigger 600 -> 80028,984,178.5127 min · $38.70
v72Small routes 6 -> 7 planes after 3 post-1960 checks above 300 passengers29,330,369.25129 min · $39.15
v73Seventh-plane trigger 300 -> 500 waiting passengers29,587,919130 min · $39.54
v74Seventh-plane trigger 500 -> 800 waiting passengers29,765,587.25131 min · $39.94
v75Seventh-plane persistence 3 -> 6 monthly checks at the 800 trigger29,569,988133 min · $40.37
v76New-route cash reserve 30k -> 15k28,619,858.25137 min · $41.61
v77Pre-1960 passenger deficit fill 1 -> 2 planes per monthly cycle30,980,351139 min · $42.08
v78Pre-1960 deficit fill 2 -> 3 planes per cycle31,396,543.75140 min · $42.56
v79Mature four-plane deficit fill used before 1960 as well31,285,587141 min · $43.06
v80Staged early fill: 2 planes before 1955, 3 to 1959, then 431,583,989.25142 min · $43.57
v81Early fill ramp delayed a year: 2 through 1955, then 331,182,598.75144 min · $44.08
v82Early fill ramp a year earlier: 2 before 1954, then 331,569,571.75145 min · $44.59
v83Allow the mature four-plane burst from 1958 instead of 196031,569,571.75146 min · $45.11
v84Large-airport routes 4 -> 2 big aircraft31,529,427.5149 min · $45.97
v85Large-airport routes on 6 modern small planes instead of 4 big ones31,435,115.5151 min · $46.53
v86Second joined stop forced >=2 Manhattan tiles from the first31,632,660.5152 min · $47.16
v87Joined-stop minimum spacing 2 -> 3 tiles31,310,020.5154 min · $47.73
v88Guarded late debt repayment moved from 1968 to 196531,643,155155 min · $48.30
v89Guarded debt repayment 1965 -> 196431,462,101.5157 min · $48.87
v90Guarded debt repayment 1965 -> 196631,574,105.5158 min · $49.46
v91Reintroduce the 800-backlog seventh plane, but only from 196531,520,084.75160 min · $50.07
v92Limit late seventh-plane promotion to one company-wide31,558,514.5161 min · $50.68
v93Block the late seventh plane whenever a large-airport route exists31,845,560.5163 min · $51.30
v94Guarded single-promotion threshold 800 -> 600 passengers31,845,560.5164 min · $51.91
v95Guarded single promotion opens in 1964 instead of 196531,298,180.5166 min · $52.54
v96Guarded single promotion opens in 196631,716,891167 min · $53.17
v97Promote the largest persistent backlog, not the first qualifying route31,845,560.5169 min · $53.91
v98Launch each route from the higher demand-score endpoint, not population30,727,140.5171 min · $54.58
v99Compare town-road drive-through stops with purpose-built bay stops29,654,392.25173 min · $55.52
v100Large-airport attempt cash gate 750k -> 1.5M31,845,560.5175 min · $56.21
v101Airport-site direct-production multiplier 100 -> 2031,845,560.5177 min · $57.22
v102Small-airport site search radius 14 -> 18 tiles29,632,129.75178 min · $57.83
v103Small-airport site search radius 14 -> 12 tiles31,420,912180 min · $58.55
v104During 1959 open an affordable route before filling deficits30,921,922184 min · $60.18
v105One medium advertising campaign after 1965 at the strongest origin31,161,808186 min · $61.31
v106Small campaign instead of medium at the same origin31,186,181.75188 min · $62.10
v107Campaign guarded on passenger rating below 60, retried monthly31,186,181.75189 min · $63.11
v108Rating-below-60 campaign check as a one-shot 1965 audit31,186,181.75191 min · $64.14
v109One statue after 1960 at the strongest route's origin30,450,031.5193 min · $64.99
v110Guarded third mail plane after 1965 in all-small nets above 1,000 mail31,950,502194 min · $65.94
v111Third-mail-plane threshold 1,000 -> 80031,950,502196 min · $66.77
v112Third-mail-plane gate 1965 -> 196631,874,675198 min · $67.61
v113Third mail plane waits for the 100-seat small-plane generation31,797,945.5200 min · $68.49
v114First-mail trigger 300 -> 600 on routes shorter than 160 tiles31,589,841202 min · $69.63
v115Drop the all-small-network guard on the third mail plane31,872,847203 min · $70.51
v116Early passenger-fill ramp back from 1954 to 195531,776,732.25205 min · $71.39
v117Autoreplace cash reserve 50k -> 25k31,950,502206 min · $72.29
v118Passenger fleet-build cushion price+50k -> price+25k30,598,678.5208 min · $73.21
v119Five planes instead of six on routes shorter than 160 tiles31,372,216.75210 min · $74.13
v120Dedicated mail planes on large routes use the best small engine31,950,502214 min · $75.53
v121One cash-buffered company headquarters beside the first airport from 196031,950,502216 min · $76.08
v122Rank joined stops by AITileList_StationCoverage; absent from API 130219 min · $77.24
v123Score joined stops by producer tiles outside existing catchmentsRank a stop by producer tiles no existing catchment covers, not by raw density, so the second stop adds new ground.32,694,890.25221 min · $77.86
v124Blend marginal and absolute stop density, new producers weighted twice32,190,158.25223 min · $78.39
v125Marginal stop scoring only on maps with at least 25 towns33,104,823.75225 min · $79.23
v126Cache the map-density decision at startup instead of per search33,104,823.75227 min · $79.82
v127Dispatch dense and sparse stop scoring outside the candidate loop33,148,783.5229 min · $80.38
v128On sparse maps allow marginal placement at airports with 20+ producers32,655,029232 min · $81.43
v0Inherited baseline: inactive observer, no company on any seed00 min · $0.12
v1Adaptive 3-route small-airport passenger net, four small planes per route4,884,4286 min · $1.61
v2Larger candidate pool, independent routes 3 -> 56,755,9717 min · $1.85
v3Network breadth 5 -> 8 routes9,120,2318 min · $2.07
v4Network breadth 8 -> 12 independent town pairs12,378,1449 min · $2.35
v5Search 70 towns and attempt 16 routes12,235,81510 min · $2.64
v6Topology fixed at 12 routes, fleet density 4 -> 5 planes per pair14,510,38611 min · $2.93
v7Fleet density 5 -> 6 planes per pair15,834,59812 min · $3.23
v8Fleet density 6 -> 8 planes per pair16,497,14113 min · $3.52
v9Fleet density 8 -> 10 planes per pair, probing congestion15,474,26914 min · $3.83
v10Cash-gated group autoreplace to the best live engine once the fleet is fullFirst change that raised earnings per plane, not plane count: the full 96-plane fleet upgrades to newer models as they appear.19,086,92016 min · $4.32
v11Planes allocated by live waiting passengers above a four-per-route base, cap 1218,940,83017 min · $4.70
v1216 routes with the 50-town candidate pool held fixed18,553,26418 min · $5.05
v13Pair score from weaker-endpoint catchment times distance17,760,98620 min · $5.42
v14Cash-gated permanent statues in served towns to raise station ratings18,221,53421 min · $5.94
v15Fleet and upgrade-completion target 8 -> 7 planes per route18,563,75822 min · $6.33
v16Configure autoreplace at 6 planes/route while keeping the 8-plane target19,086,92024 min · $6.73
v17Purchase cadence every 7 days instead of every 3018,795,02225 min · $7.13
v18Purchase cadence every 14 days18,904,53126 min · $7.55
v19Route score distance term supply*distance -> supply*(distance+50)18,350,55728 min · $7.96
v20Route score distance term raised to supply*distance^217,942,23628 min · $8.37
v21Clear-footprint weight in airport siting 30 -> 1000 per tile19,086,92030 min · $8.81
v22Pure large-airport benchmark: up to 6 pairs, any passenger aircraft11,396,55831 min · $9.19
v23Keep the small network, then add 2 large-airport pairs with their own planesThe pure large-airport build scored half as much, but large routes on towns the small network never served are complementary.21,216,90434 min · $10.33
v24A third large-airport pair21,121,43235 min · $10.79
v25Large-route density 8 -> 10 planes per pair20,256,50436 min · $11.34
v26Large-route density 8 -> 6 planes per pair20,744,80037 min · $11.81
v27Late large-network cash gate 2,000,000 -> 1,000,00020,306,20239 min · $12.37
v28Initial small-network breadth 12 -> 13 pairs20,439,42840 min · $12.94
v29Small-network breadth 12 -> 11 pairs, so the large routes start earlier21,613,59041 min · $13.33
v30Initial small-network breadth 11 -> 10 pairs20,305,71342 min · $13.81
v31Late large-airport breadth 2 -> 3 pairs22,073,17743 min · $14.30
v32Late large-airport breadth 3 -> 4 pairs21,725,62744 min · $14.79
v33Small-route density and large-expansion trigger 8 -> 7 planes per pair21,188,34145 min · $15.29
v34Full-load-any at both endpoints for the big aircraft17,408,56046 min · $15.80
v35Repay the full loan from 1968 once cash exceeds loan plus 500,00022,041,68748 min · $16.32
v36Delay the full loan repayment to 196922,065,37049 min · $16.94
v37Late large-network cash gate 2,000,000 -> 3,000,00021,426,40250 min · $17.46
v38Large-airport candidate scan widened from the top 50 to the top 70 towns22,073,17751 min · $18.00
v39Join one bus facility to each airport station, deferred behind a cash gateOne facility joined to the airport station widens what planes collect; deferring it behind the full fleet kept it out of budget.23,953,24654 min · $19.09
v40Deferred small-extension cash gate 1,000,000 -> 2,000,00024,789,13655 min · $19.66
v41Deferred small-extension cash gate 2,000,000 -> 3,000,00024,954,01856 min · $20.23
v42Deferred small-extension cash gate 3,000,000 -> 4,000,00024,972,97757 min · $20.80
v43Deferred small-extension cash gate 4,000,000 -> 5,000,00024,563,94858 min · $21.38
v44Two deferred small-airport extensions per monthly cycle instead of one24,575,26459 min · $21.97
v45Remove the immediate extensions from the late large airports23,914,39861 min · $22.76
v46Weight extension siting by passenger production times distance from airport24,950,37462 min · $23.60
Forty-seven versions in 62 minutes, one public evaluation each, then it called v42 final and stopped with eleven of its twelve hours unspent.
v0Inherited baseline: inactive observer, no company on any seed0
v1One small-airport plane route between two distant towns, intra-town bus loopsTwo flat sites and a max loan buy an air route; buses ride existing town roads, so no pathfinder is needed.734,873
v3From 1951 buy planes at either hangar while cash tops 150k, fleet capped at 5Cloning a plane already in the air kept failing; build at a hangar instead and put idle cash into aircraft.823,365
Stopped after 45 minutes and three snapshots; a second airport pair, trucks and extra bus towns all failed to place, so nothing else was kept.
v0Inherited baseline: inactive observer, no company on any seed00 min · $0.01
v1Six fixed bus routes in dense towns, roads built explicitly, loan repaid earlyPut stops 12-24 tiles apart near the densest town centres and lay the connecting road, so no bus can be stranded.141,93426 min · $3.21
27 minutes and $3.31 for one working idea: buses only, no aircraft, and a dynamic-expansion variant tried and dropped without a snapshot.