Case study · Pokémon TCG
From research agents to better Pokémon TCG decisions
Roughly two months of player design, strategic experiments, and a question I’m still pursuing: how can a player keep getting better?
A game became a research program
I entered the Pokémon TCG AI Battle Challenge learning the game and asking a larger question about learning systems. Over roughly two months, I worked as a solo developer with AI coding and research agents across multiple vendors. We called them The Fleet. I directed the questions, implementation work, and comparisons.
Two questions shaped the project: how do you teach a player useful behavior, and how do you identify behavior worth teaching? I implemented components of a recurrent learning player and tested a strategic intervention in a separate Lucario pilot.
The counter improved mean game score by roughly 19–20 percentage points against two tested Alakazam implementations. The player components provide an interface for learning decisions. Connecting those discoveries to improvements the player retains is my next milestone.
What I built and tested
Player design
Give each choice meaning
I implemented visible-state encoding, recurrent memory, legal-option scoring, and sequential selection using established learning methods.
Inspect the learner excerpts →Strategic experiment
Disrupt the hand. Pressure the next attacker.
I changed a card and a targeting rule in a Lucario pilot, then compared the changes separately and together.
See the experiment →The experimental Lucario work builds on makthanithin’s Apache-2.0 community_1084 policy. My competition submission used tetsutani’s unmodified public Grimmsnarl policy. The experiments described here are separate development branches. Contribution and evidence map.
“Option three” is not a strategy
A card-game player faces a changing menu: attach Energy, evolve a Pokémon, select an attack, or choose its target. If the menu changes, the third option can mean something entirely different.
My v2 learner encodes the offered actions and links them to their sources and targets. A 256-unit recurrent network combines the visible game state with memory across decisions, then scores the legal options. The state projection uses the acting player’s view and rejects hidden-information fields.
Multiple selections introduce another design choice. When a prompt allows up to three items, selecting one can be enough. The decoder needs to represent that decision.
Worked interface example
Choose up to three items
- Score the available choices
The player sees legal options A, B, and C in the current game context.
- Select A, then update the context
A cannot be selected again. The decoder scores the remaining choices with A already selected.
- Choose STOP when the minimum is satisfied
The player can finish with A instead of taking every available item.
Run the seven selection checks. These prescribed-score component checks use Python and PyTorch on CPU. They demonstrate selection constraints; they do not evaluate game play.
Give practice somewhere to go
Teacher-query tooling reconstructs player-visible positions and requests choices from a credited public teacher. This provides a route to advice on situations the learner reaches itself. Training, checkpoints, and inference are separate components, so the teacher or player can change without redefining the experiment.
An earlier August checkpoint improved held-out imitation loss but won only 23 of 1,200 decided games against the reference policy. That comparison made complete-game evaluation essential alongside prediction metrics. It evaluates the earlier checkpoint; current v2 competitive strength remains unmeasured. Training and evaluation evidence.
A counter that targets two resources
Alakazam’s Powerful Hand attack scales with the cards in its player’s hand. Its next attacker also depends on developing Abra and Kadabra. That suggested pressure on two resources: the hand available now and the evolution line preparing for later.
I replaced one Carmine with Xerosic’s Machinations to reduce a large opposing hand to three cards at resolution. Separately, I modified the targeting rule to prefer visible Abra or Kadabra when the Alakazam line was detected. The tradeoff is concrete: disruption uses a Supporter opportunity, and attacking a developing Pokémon can mean passing up another prize.
This separation tests whether changing the deck, changing the policy, or using both improves whole-game outcomes. The development comparisons supported the combined counter; they did not establish synergy between its parts. Full experimental design and intervals.
Look at the opponents behind the average
The later evaluation contains 8,400 game records: seven opponent implementations, with 600 games for the baseline and 600 for the counter against each. Game score is 1 for a win, ½ for a draw, and 0 for a loss.
The Alakazam cells gained 20.42 and 18.75 percentage points. The other five averaged −0.47 points, with a 95% interval of [−2.64, +1.71]. This is a substantial counter advantage in those tested matchups; broader benefit remains unresolved.
A counter’s value changes with the field. The supporting numerical methods show how estimated benefit varies under assumed opponent mixtures; those scenarios are not a forecast of the competitive metagame.