One bot, two-player match
You manage one farm. Every scored episode pairs your bot with another bot managing a separate farm.
Kaggriculture
Run one farm inside a shared, reactive economy.
Essentials
You manage one farm. Every scored episode pairs your bot with another bot managing a separate farm.
Higher bank wins. Equal bank ties. Lower bank loses. Unsold inventory is worth zero.
Kaggle adjusts skill rating across many episodes. The size of the coin lead does not affect that rating.
Schedule labor, care, harvests, expansion, and liquidation.
Both bots and the town change supply, demand, and market prices.
Use visible commitments to choose a better response before turn 720.
Setup
Kaggle evidence
Track ratings over time without confusing ladder movement with local farm quality.
Live Kaggle snapshot · August 16: v0.6.1 is active at 562.2 after 18 external matches: 9 wins and 9 losses. The current rank was not captured, so the workbook leaves it blank rather than preserving the stale validation rank.
Interpretation
Submit the interpretable baseline, then log its first rating and rank.
Early ratings move quickly; wait for more episodes before making a large rewrite.
Classify the opponent opening and identify the first irreversible mistake.
Replay archive
v0.2.1 · four completed matches · raw replay IDs preserved
24,881 vs 77,264
Led through day 16; the rival’s livestock, strawberry, and fertilizer engine crossed us on day 19.14,591 vs 55,935
Opponent showed 21 melons by day 8. Our fixed opener stayed in the crowded market instead of switching.23,318 vs 19,963
The mixed engine beat a crop-only farm. We moved permanently ahead on day 27.26,036 vs 27,953
Led after day 27, then sold feed, stopped hiring, and lost all four cows before scoring.Compact evidence: results/kaggle_v0_2_1_match_history.json. Raw replays remain external because each source file is roughly 14 MB.
v0.6.1 loss lab
Episode 93564365 · PQ_Marz · final margin −2,742
Our opening looked dominant in cash.
The opponent already had three animals; bank alone understated its position.14,462 vs 542 cash
The rival had converted cash into land, crops, and livestock while we read the low bank as weakness.15,144 vs 6,760 cash
Production capacity, not current cash, was now the decisive signal.The lead changed after day 26.
v0.7 now tracks temporal commitments and productive scale explicitly.Regression fixture: results/kaggle_v0_6_1_pq_marz_regression.json. The full 20 MB replay remains outside the repository.
History
| Version | Date | Status | Score | Rank | Episodes | Notes |
|---|
The first entry becomes the baseline for rating and rank movement.
Agent system B
Start from a stable policy, then switch only when evidence justifies it.
Stable mixed engine while the opponent model has low confidence.
Switch cost: noneMove away from a product the opponent is visibly scaling before the glut arrives.
Trigger: strong portfolio signalPreserve cash and shorten payback when the opponent commits heavily to long-horizon growth.
Trigger: land + structure spendStop reinvestment, collect reachable output, and sell before the deadline.
Trigger: payback exceeds time leftTen melons, five wheat plots, six temporary hands.
Build four pastures and unlock the second quadrant.
Feed and care for cattle while recurring crops mature.
v0 still hires and buys seeds; a hard liquidation gate is the next change.
| Seat | Episodes | Finished ahead | Average final bank |
|---|---|---|---|
| First | 10 | 10 / 10 | 29,984 |
| Second | 10 | 10 / 10 | 29,815 |
Local benchmark: Balanced Tempo v0 versus Kaggle's starter bot. This is matchup evidence, not a Kaggle leaderboard rating.
Best run · seed 3 · second seat
A tie is only possible when both bots finish with exactly the same bank. Cattle, strawberries, and clean exit are internal strategy checkpoints—not official win conditions.
Daily trace
| Day | Phase | Bank | Change | What happened | Why |
|---|
Balanced Tempo finished ahead in all 20 head-to-head episodes.
Average bank differed by only 570 coins between first and second seat.
Final bank varied by 14,352 coins across seeds.
Three runs ended with three cows; only eight reached ten strawberry plots.
Agent lineage
Keep every policy as evidence—what it knew, where it failed, and what replaced it.
Current checkpoint · August 16
Read: v0.6.1 is viable but not dominant. Its clearest reviewed failure was strategic, not computational: it treated a cash lead as safety while the opponent built a much larger productive base.
v0.7 candidate
12.7 KB artifact packaged locally · no Kaggle submission
Carry the previous posterior, bank movement, asset growth, crop mix, animal mix, labor, and unlocked land from one day to the next.
Compare terminal value, productive value, occupied scale, animals, and land—not just the visible bank.
Emit one compact decision trace per day and explicit error records so future ladder logs explain what the policy believed.
Ten extra recurring plots lost all four smoke games by about 11k on average because travel and chore load diluted execution.
Version archive
Kaggle and local evidence stay visibly separate.
Log a version before changing its policy.
Regression 05
Seed 5 · seat 1 · final margin −2,128
Our bank led by 1,751 coins; the phase strategy itself remained competitive.
The frozen bot sold wheat and milk while our shed accumulated output.
Undefined closeout variables returned PASS for every remaining recorded action, yet Kaggle still marked the episode DONE.
v0.3.1 sold the surplus, kept operating, and won the same seed by 7,945 coins.
Trace evidence: results/phase_tempo_v0_3_seed5_loss_trace.json and results/weighted_strategy_v0_4_seed5_regression_trace.json.
Reverse horizon QA
Three promoted mechanisms: score crops and livestock after feed, care, labor, tile time, demand, and crowding; choose mixed strategy groups by probability-weighted utility; and assign all workers together by deadline and travel cost. The economics layer also keeps fertilizer only when applying it is worth more than selling it.
Checkpoint lesson: the first global router passed seeds 0-9 but hit a 299-second action on held-out seed 10. Bounding the optimizer to the best three task alternatives per worker reduced that regression to 75.6 ms and won both seats. The final artifact then went 20-0 against v0.5.0, 20-0 against v0.5.1, and 20-0 against v0.5.1 on held-out seeds 10-19.
Evidence: results/v0_6_1_vs_v0_5_0_exact.json, results/v0_6_1_vs_v0_5_1_exact.json, results/v0_6_1_vs_v0_5_1_heldout.json, results/v0_6_1_seed10_runtime_regression.json, and results/qa_v0_6_1_packaging.json.
Dense predictor QA
What improved: town-demand and crop ROI forecasts, ten opponent archetypes, mixed recurring-crop allocation, shed-capacity lookahead, higher-priority livestock placement, and planned-cell weed recovery.
Promotion boundary: the repeated seed 5, seat 0 loss means v0.5.1 does not replace v0.4 yet. Evidence: results/dense_predictor_v0_5_1_vs_v0_4.json, results/dense_predictor_v0_5_1_vs_submitted_v0_2_1_heldout.json, and results/qa_v0_5_1_packaging.json.
Final local QA
Readiness boundary: v0.4 is ready if the requirement is reliable superiority to submitted v0.2.1. It is not yet evidence of superiority to unfamiliar ladder architectures.
Evidence: results/qa_v0_4_vs_submitted_v0_2_1_heldout.json and results/qa_v0_4_packaging.json. No Kaggle submission was made.
Promotion rule
Preserve the exact artifact, checksum, trace set, and known failure.
Known failure seeds, both seats, strategy probes, and non-fallback execution must all pass.
Require 20 / 20 against v0.2.1 before widening the opponent library.
Play held-out seeds and multiple strategy families so one familiar opponent does not become the objective.
Competitive dynamics
Two farms, one shared price system, and a town that keeps consuming.
Convergence
Hotelling’s beach model is a useful analogy: competitors often converge on the same attractive location. Here the “location” is a crop, livestock mix, timing window, or market resource. If both bots find the same center, supply rises and the price response can erase the original edge.
Analogy, not a theorem for this game. Hotelling’s original minimum-differentiation result depends on its assumptions and was later challenged.Pressure map
Copying the strongest portfolio may work until both bots flood the same product and depress its price.
Watch: opponent assets · inventory curveTown shops and the town center remove products from the market, rebuilding scarcity between player sales.
Watch: shop unlocks · price recoveryLand, animals, seeds, and hands raise future output while reducing the bank that currently decides the match.
Watch: payback day · bank leadEvery care, harvest, movement, and placement consumes scarce execution capacity.
Watch: overdue work · route lengthA rigid plan is efficient against a familiar bot; an adaptive plan can react when the opponent commits elsewhere.
Watch: archetype confidence · switching costLate assets only matter if they pay back and their output reaches the bank before turn 720.
Watch: turns remaining · unsold unitsGame-specific claims are grounded in the official Kaggriculture environment reference ↗.
Agent system A
Turn visible commitments into a small, revisable hypothesis.
Inference loop
Never let a weak guess override farm survival.
Land unlocked, structures built, crop ages, animal mix, visible workers, bank, and shared price movement.
Expansion rush, livestock compound, recurring crops, short-cycle cash, or mixed/unknown.
Cash shortage, feed demand, care load, harvest wave, storage pressure, or liquidation deadline.
Differentiate the portfolio, preserve liquidity, accelerate a sale, or stay on the baseline when evidence is weak.
Decay stale beliefs and compare predicted farm changes with what actually appeared.
Reading windows
First seeds, worker count, and early spending reveal tempo but not the full portfolio.
Land and structures make the strategy more expensive to reverse.
Yield cadence, feed load, and price impact expose the bot’s operating model.
New purchases, unsold output, and bank conversion reveal terminal mistakes.
Opponent farm state and the shared market.
Opponent shed, private inventory, source code, and future actions.
Archetype probabilities, predicted constraint, confidence, and response budget.
RAM persists within one match only. Across matches, replay evidence improves the next submitted artifact offline; a deployed game cannot write learning into future games.
Probabilistic strategy tree
Softmax converts weighted evidence into revisable beliefs.
Crop counts, animals, unlocked land, labor, match day, and bank trajectory.
Each strategy receives evidence for and against it; no single threshold owns the decision.
Short-cycle crop volume, melon rush, recurring crops, livestock families, labor, land expansion, and mixed play sum to 100%.
Score each response across every strategy, weighted by belief and reduced by switching cost and execution risk.
Compare the predicted commitment with the next farm state, then revise weights without erasing alternatives.
The distribution above is illustrative. v0.7 updates its real posterior once per day from public farm state and the prior day’s belief; calibration still requires a broader opponent library.
Agent system C
Chess-like response planning with stochastic branches and partial information.
Rolling horizon
Long enough to see payback, short enough to remain responsive.
Bank, assets, care deadlines, shed, routes, prices, town demand, opponent hypothesis, and turns remaining.
Baseline continuation plus a small set of meaningful deviations: expand, diversify, accelerate, defend, or liquidate.
Opponent response, weed rolls, future shop unlocks, price movement, and execution slippage.
Prioritize probability of finishing ahead; use expected bank and failure risk as diagnostics.
Take the first action from the best robust plan, observe the new state, and simulate again.
Build order
Re-run known seeds and reproduce bank, farm, and market transitions.
Starter, expansion, livestock, recurring-crop, and mixed response models.
Sample weeds, shops, and uncertain opponent choices.
Compare predicted win probability with held-out episodes and ladder results.
Agent system D
Protect irreversible obligations before spending effort on adaptation.
Phase model
One clock, four distinct decision modes.
Establish cash and wheat, run a bounded melon opener, and probe the opponent’s visible commitment before changing course.
Build the recurring-crop and livestock engine. Scale labor, collect fertilizer, and switch crops only on strong evidence.
Stop long-payback expansion while preserving feed, care, harvests, and existing production. Improve what can still score.
Keep enough wheat and hands for the remaining chores, then route output to the shed and sell the true surplus.
Experiment board
Measure day-12 bank, planted capacity, and market crowding.
Trigger only after a visible rival commitment; compare stranded seeds and margin.
Measure missed chores, fertilizer collected, surviving animals, and day-22 bank.
Measure day-27 lead retention, terminal inventory, animal survival, and final margin.
Weighted thinking model
Weights are normalized each turn; hard safety obligations remain protected.
Unwatered crops, unfed animals, ready harvests, carried resources, and route congestion increase this weight.
dominant when delay destroys valueBelief concentration, asset growth, occupied scale, animal count, and land commitments matter most while a response can still repay.
posterior × threat × response windowThe weight rises nonlinearly with elapsed days and sharply during final execution.
time remaining × terminal riskPriority stack
Lower number wins when tasks compete.
Water/feed deadlines, overflow, invalid actions, and products about to decay or cap.
As turn 720 approaches, stop purchases that cannot repay and liquidate all reachable value.
Harvest windows, temporary scarcity, shop-driven demand, and care bonuses.
Update the archetype only when visible evidence materially changes the likely response.
Compare the baseline with bounded counter-strategies and choose the robust branch.
Plant, build, hire, expand, and route workers using the remaining action budget.
Guardrails
Update once per day from the prior posterior and visible commitment changes; do not classify each turn in isolation.
A response is only useful if the gain exceeds the cost of abandoning the current plan.
Opponent analysis must not steal in-game actions from mandatory farm work.
Use small reversible deviations to learn; avoid large speculative commitments.
Next ladder entry
v0.6.1 remains live. Adaptive Horizon v0.7.0 is a local candidate, not a submitted agent.
Learning plan
Keep the accepted artifact unchanged so every candidate can play both seats against the exact ladder baseline.
Complete self-play, starter matches, both seats, varied seeds, and the late-game liquidation test.
Kaggle first validates the bot against a copy of itself, then matches it with similarly rated submissions.
Record rating, rank, and episode count at consistent checkpoints instead of reacting to every move.
Tag opponent archetype, first strategic divergence, execution failure, and terminal inventory.
Improve opponent modeling, lookahead, attention, or a strategy rule—then submit a new version.
Candidate architecture
Each module has a narrow decision boundary.
Prioritize harvest, watering, feed, care, placement, and worker routing by deadline and travel distance.
Carry a daily posterior across the match and score changes in crops, animals, labor, land, and productive value.
Stop land, livestock, and recurring-crop investment before they lose time to mature; route carried value to the shed during liquidation.
Turn real losses into compact fixtures, test the inferred threat, and compare both seats against exact frozen artifacts.
Submission decision
Interpretation boundary: the replay test proves the new model notices the missed compounding signals. It does not prove that the response wins more games; that requires the completed benchmark and later ladder evidence.
Release gate
Submission
def agent(obs):
return {
"farmer": ["PASS"],
"hands": [],
"market": []
}
main.py at the tar.gz root with agent(obs)Frozen controls: submitted artifacts/kaggriculture-v0.2.1.tar.gz and artifacts/kaggriculture-v0.6.1.tar.gz, plus local v0.4.0, v0.5.0, v0.5.1, and v0.6.0 controls. The 12,785-byte artifacts/kaggriculture-v0.7.0.tar.gz is packaged locally but remains on hold.
Packaging lesson: v0.2.0 failed before play because agents collided with a Kaggle-installed module. v0.2.1 packages one self-contained main.py and passed validation.
Submission and ranking behavior: official Kaggriculture evaluation section ↗.
Reference
Environment
The agent observes these rules; it cannot change them.
30 days with 24 turns each.
Northwest 5 × 5 begins unlocked.
Three more quadrants cost 1,000 / 2,000 / 4,000.
Overflow at day-end is discarded.
Both players affect shared prices.
Unwatered plants become weeds; unfed animals escape.
Daily hires follow Fibonacci pricing and reset each day.
Shops unlock every 3 days and consume stock every 4 turns.
Board
Economy
| Asset | Buy-in | Base price | First yield | Cadence / life | Daily obligation |
|---|
Prices move with supply and town demand.
Invariants
Evidence
One change. Enough head-to-head episodes. Clear decision.
Trend
Log a matchup to start.
History
Start with a baseline.
Priorities
Impact × confidence ÷ effort.
Backlog