Decktrace: Pokajan · simulator-scoped

Hidden hands.
Public clues.
Costly discards.

Pokajan is a four-player card game about assembling valuable melds while choosing what to reveal. Decktrace built a deterministic simulator, a masked shared-action policy, and an automatic promotion loop to learn it without human games or labels.

The game itself

Build the meld. Protect the discard.

Four seats

Each player starts with seven hidden cards and 1,000 coins. On a turn, draw to eight, declare any completed melds, then discard back to seven. Any opponent whose meld uses the latest discard may claim it; higher score, then clockwise order, resolves simultaneous claims.

Players
4
Match deck
100 cards
Starting hand
7 cards
Starting coins
1,000
Information
Hidden hands, public groups, Bonus member, revealed melds, discards, coins, and remaining-card counts
Settlement
Melds transfer coins; final placement follows coin totals
Agent objective
Maximize terminal settlement utility: final coins weighted by placement

Rule boundary: the rules are versioned from captured client behavior and published references. Exact live-client fidelity remains unverified.

Established champion

Promoted once. Retained after five focused probes.

One actor-visible discard-rank feature produced the v2 champion. Generations 0 and 1 retained it; tied-rank, completion-outs, claim-liability, one-draw payout, and low-meld deferral probes then closed five focused follow-up hypotheses.

First-place finishes
39.1%
100 of 256 confirmation games
Top-two finishes
69.1%
177 of 256 confirmation games
  • Average finish2.04 of 4
  • Final coin edge+456 vs mean opponent
  • Archive comparisons6 / 6 pass
  • Invalid actions / timeouts0 / 0
  • Live-client parityNot run
How to read +1.135Placement-weighted settlement, not raw coins

Each ending turns coins into a score: first place uses 2.5× final coins, second uses 1.5×, and third or fourth uses 1×; the 1,000-coin starting stake is then subtracted and used to normalize the result. The champion averaged +1.135 of those stake-sized utility units over the mean of three incumbents. Its +0.867 lower 95% bound is the conservative floor for that same advantage—not 0.867 coins or places.

Current decisionv2 established · Generation 2 stopped at 7,168 learner steps

Five focused follow-ups failed fresh gates. The one-draw payout controller won a small screen but flattened on disjoint confirmation, while forcing low melds to pass was worse on average. Retain v2 and do not build deeper search without a newly demonstrated policy error.

Claim ceiling: the v2 policy is stronger in the versioned Python simulator. Native control, client parity, and broad live-game strength are not established.

What was tried

The smallest useful signal won.

Full-game settlement always decides strength. A positive margin means better placement-weighted coin settlement than the comparison policy; zero means a tie. Diagnostics identify which branch to test or close.

BaselineLearned4,096 PPO steps
First capability check

The policy beat both trivial baselines.

Fresh, balanced four-seat blocks showed a real simulator gain before the project attempted an automated generation.

Vs random
+1.403
utility floor
Vs first legal
+4.852
utility floor
Controlled play
128 games each
0 invalid
Weakness auditFound1,988 decisions · 128 games
Actor-visible diagnosis

Melds were sound. Discards were not.

The g024 champion missed no greedy meld opportunity, but almost half of comparable discards were strictly worse than the same public-information heuristic.

Meld errors
0 / 412
Worse discards
309 / 701
Largest pattern
209
near-group losses
Discard selection was the measurable weakness.Share of comparable decisions strictly worse than the actor-visible greedy choice.
Decision audit across 128 simulator games
DecisionStrictly worseComparedShare
Meld declaration04120.0%
Discard choice30970144.1%
v2 featurePromoteOne new observation
Focused repair

Expose the discard rank the actor can already compute.

A single normalized ordinal rank transferred the diagnostic into full-game strength. In the 256-game confirmation it finished first 100 times, top two 177 times, averaged 2.04 place, and ended 456 coins ahead of the mean table opponent.

Screen utility
+1.182 mean
+0.788 floor
Confirmation utility
+1.135 mean
+0.867 floor
Weakest archive utility
+0.573
floor
What is working — and what is not

Keep the gain. Stop repeating the miss.

The signed probe numbers below are differences in the same placement-weighted settlement utility: positive favors the tested policy, negative favors the incumbent, and an interval crossing zero means no reliable game-outcome gain.

Working

Visible structure, automated proof

Simulator
2,048 seeded games preserved determinism, legality, cards, hands, coins, and action capacity
Feature
The actor-visible discard rank transferred into fresh full-game strength
Selection
Common deals, four-seat rotations, zero invalid actions, and six archive checks produced an automatic promotion
Not supported yet

More continuation is not the answer

Generation 1 finalist
+0.017 mean, -0.725 lower 95% bound — retain
Lower learning rate
+0.108 mean, -0.0007 lower bound — still retain
Drift diagnosis
Measured drift did not justify target-KL control or teacher rehearsal
Tied-rank probe
832 common-hidden-world continuations: -0.171 mean, 95% bounds -0.383 to +0.075 — retain
Completion-outs probe
10 decision roots / 8 blocks / 320 paired continuations: -0.0072 mean, 95% bounds -0.2413 to +0.1833, zero invalid actions and timeouts — retain
Claim-liability audit
26 tied-rank roots / 12 blocks: +0.128 mean, 95% bounds -0.127 to +0.382 — no reliable advantage, so retain without fresh rollouts
One-draw payout controller
Positive 16-block screen: +0.504 mean, 95% bounds +0.092 to +0.910. Disjoint 32-block confirmation: -0.013 mean, 95% bounds -0.298 to +0.276 despite 311 changed discards, with zero invalid actions and timeouts — retain
Low-meld deferral
13 declaration roots / 9 blocks / 208 paired continuations: forced pass -0.179 mean, 95% bounds -0.478 to +0.100, zero invalid actions and timeouts — retain
Current direction
Retain v2. Do not add a payout scalar, widen the meld threshold, build deeper search, or resume Generation 2 without a newly demonstrated policy error

Read the canonical capability record.