Death Mountain PPO 2M
A 2.07-million-parameter game policy with MIT-licensed weights and standalone CPU inference. On 16,000 fresh games it scored 392.42 mean XP, versus 374.64 for its unchanged parent: +17.78 XP, paired 95% interval [+11.09,+24.20]. Median 210 versus 209; zero timeouts. Full model card, lineage and limitations.
python -m pip install huggingface_hub
hf download rvorias/death-mountain-2m --revision v1.0 --local-dir death-mountain-2m
cd death-mountain-2m
python -m pip install -r requirements.txt
python policy_api.py --self-test
This custom PyTorch policy uses the included DeathMountainPolicy API.
To play, supply compatible observations and legal-action masks from your
environment. Numeric observation/action interface.
The package contains no game simulator. These scores use the recorded corrected
simulator and do not establish superiority over humans.
Inference API
No game engine, C compiler, dmfast, Triton, CUDA driver, or original source checkout is needed. Install requirements.txt, then provide observations and legal-action masks from your environment. When exported with --validate, run the included real-observation self-test without a simulator:
python policy_api.py --self-test
The test checks artifact hashes, exact-feature bitwise equality, and raw-input equality within atol=1e-4/rtol=1e-5 against saved CPU outputs. Both tests cover logits, value, and recurrent state. Bitwise reproduction targets the recorded package versions and CPU numerical behavior; different PyTorch versions or CPU backends may require investigating numerical differences. The numeric interface is 463 raw float32 observation fields and 57 bool action-mask fields. Observations must include the existing combat-simulation fields; this model does not compute game dynamics.
import torch
from policy_api import DeathMountainPolicy
policy = DeathMountainPolicy()
state = policy.initial_state(batch_size)
# raw_obs: (batch_size, 463); legal_mask: (batch_size, 57)
logits, value, state = policy.step(raw_obs, legal_mask, state)
actions = torch.distributions.Categorical(logits=logits).sample()
# After your environment advances, reset memory for ended episodes.
state = policy.reset_state(state, done)
The default excludes macro actions 7–10 with the canonical nonempty-mask fallback. Pass primitive_actions=False to use exactly your supplied legal mask. Use logits.argmax(-1) for greedy actions; PPO score reports ordinarily use sampling. A NumPy reference derives semantic features from raw observations. Its floating-point rounding can differ slightly from native C features. An optional semantic_features argument accepts the exact 88/90 features from an external evaluator for exact checkpoint equivalence. The raw-input validation report records actual numerical differences; it does not claim bit-identical sampled trajectories or certify benchmark scores across implementations.
Weights are safetensors without optimizer state; full architecture and original checkpoint metadata are retained. See manifest.json for hashes and LICENSE for MIT terms.