Downloads · 30 days
0
yotisstudios/RaifuWars-RL-ActionScorer-BigNet
RaifuWars-RL-ActionScorer-BigNet is a reinforcement learning model from yotisstudios. Use it for the reinforcement learning task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as gpl-3.0.
A 213,762-parameter policy that plays a seat in Raifu Wars, a turn-based strategy game, through the Warrior protocol.
Downloads · 30 days
0
Access
Public
Updated Aug 16, 2026
Repo size
860 KB
Likes
0
Public
Click a slice to open those files.
.pt860 KB · 95%
From the Hugging Face model README
A 213,762-parameter policy that plays a seat in Raifu Wars, a turn-based strategy game, through the Warrior protocol.
This is a control arm, published as a negative result. It is ppo-sim at 3.7× the parameters —
256/128 wide instead of 128/64 — with the features, boards, opponent, learning rate, batch size and
wall-clock budget held identical. It exists to test one claim made in this project's own notes:
the network is not the bottleneck.
It is not. The extra capacity produced a worse policy, and the way it is worse is the useful part.
| this model (214K) | ppo-sim (58K) | ppo-selfplay (58K) | ppo-selfplay2 (58K) | |
|---|---|---|---|---|
| sim, head-to-head, 744 matches | 3.8% | 13.3% | 42.3% | 48.1% |
| sim vs three greedy bots, 400 | 71.2% | 84.5% | 82.0% | 77.8% |
| sim vs greedy, Crossroads only | 96.0% | 83.8% | 89.0% | 90.8% |
| sim vs greedy, Arboretum only | 75.8% | 73.8% | 78.0% | 78.5% |
| training mean return | 16.90 | 16.02 | — | 10.92 |
And in the real game, against the built-in AI, 16 matches per board where chance for one seat of four is 25%:
| board | this model | ppo-selfplay (58K) | ppo-selfplay2 (58K) |
|---|---|---|---|
| Arboretum | 2/16 — 12% | 8/16 — 50% | 2/16 — 12% |
| Islands | 1/16 — 6% | 5/16 — 31% | 13/16 — 81% |
| Crossroads | 8/16 — 50% | 69% | 75% |
| overall | 11/48 — 23% | 24/48 — 50% | 27/48 — 56% |
23% against a chance rate of 25%. This model is not distinguishable from a policy picking at random among the offered actions (p=0.68), on a board pool where its 58K-parameter twin scores 50–56%. Its one respectable board is Crossroads, the one with no cover — the same board it dominates in the sim.
Read the first two rows together. This model has the highest training return of any greedy-trained arm and the lowest head-to-head win rate of any policy measured — 3.8%, where chance is 25% and its 58K-parameter twin manages 13.3%. It is also the single best policy in the project at Crossroads-against-greedy, at 96.0%.
That is what overfitting to a fixed opponent looks like with room to do it in. The extra capacity did not buy a better model of the game; it bought a sharper model of a scripted bot, most of it spent on the one board where the scripted bot is easiest to beat. Against an opponent that adapts, what it learned is worth less than what the smaller network learned.
Mean return did not report any of this. 16.90 was the best number on the board while the policy underneath it was the worst. Return against greedy saturates near 17 long before skill does, and this run is the cleanest demonstration in the project that it cannot be used to rank anything.
Its sibling RaifuWars-RL-ActionScorer-Cover tested whether the policy's collapse on cover-heavy boards was a perception failure — nothing in the feature set describes terrain. This arm was the falsifier: if simply making the network bigger moved the same boards, the perception story was wrong and the model had merely been undertrained.
Both arms launched together, on identical configurations, differing in exactly one variable each. The capacity arm answered its question — capacity was not the limit, and taking more of it hurt. The terrain arm did not answer its question, for a reason worth reading its card for: the simulator emits no terrain, so its new features were constant zero for the entire run. This arm is the valid half of that pair, since it changed no features.
Arboretum, Crossroads, Dustbowl, Glacier, Cornfield, Trench Warfare, Twin Rivers.Two towers and an interaction term. The state is embedded once, each candidate action is embedded, and the score is their elementwise product — so nothing in the network knows how many actions there are, which is the requirement: the legal set runs from 2 to ~670 between decisions and varies with board size, dice roll and hand.
state 33 -> 256 -> 128
action 27 -> 256 -> 128
head 384 -> 256 -> 1 softmax over exactly the N offered
value 128 -> 256 -> 1
Scoring rather than classifying makes an illegal action unrepresentable rather than merely penalised, and lets the same weights run on a 17×21 board and a 27×27 one. A classifier over "all possible actions" would need an output per tile per action type, would mask nearly all of them every step, and would learn nothing transferable between boards.
RW_FEAT_COVER=0 python serve.py raifuwars-actionscorer-bignet.pt --port 8901
# then point the game at http://127.0.0.1:8901 via the Warrior protocol
serve.py reads the architecture out of the checkpoint's own first layer rather than assuming
one, so it loads any of the published ActionScorer variants. The one thing it cannot infer is the
feature width, which is fixed at import time by RW_FEAT_COVER. Set it wrong and the weights
load without complaint — the mismatch only surfaces on the first decision, as a matrix shape error
one layer deep. A sidecar that catches policy errors and falls back to a legal action will then
play a whole match on fallbacks and still produce a results table. So it is checked at startup
instead, and exits naming the flag to set.
Three different measurements appear in these cards and they do not agree with each other. That is the most useful thing they have to say, so they are labelled rather than averaged:
Mean return is reported for completeness and should not be used to rank anything. Under self-play it is pinned by construction — four copies of one policy produce exactly one winner — and against greedy it saturates near 17 well before skill does.
ppo-sim shows the same pattern less severely.