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.
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.
History
| Version | Date | Status | Rating | 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.
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.
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.
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.
Melon rush, recurring strawberry, recurring tomato, livestock compound, 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.
Observed on day 13 of the repaired seed-5 regression. Candidate code computes beliefs from public farm state; 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 matters most during reversible opening and middle-game decisions.
certainty × 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
Stay on the baseline until multiple signals support the same opponent model.
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.
First ladder entry
The first submission is a measuring instrument, not the final strategy.
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.
Classify expansion, livestock, or recurring-crop concentration. Only a strong strawberry signal switches our recurring crop to tomato.
Stop land, livestock, and recurring-crop investment before they lose time to mature; route carried value to the shed during liquidation.
Future architectures play both seats against the exact v0.2 artifact. Promote one mechanism at a time, then compare ladder evidence.
Release gate
Submission
def agent(obs):
return {
"farmer": ["PASS"],
"hands": [],
"market": []
}
main.py at the tar.gz root with agent(obs)Frozen local opponent: artifacts/kaggriculture-v0.2.1.tar.gz. Current local-only candidate: artifacts/kaggriculture-v0.4.0.tar.gz. No Kaggle submission has been made.
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