JJev Cookbook
课程首页 中文文档 拓展阅读 GitHub ↗

拓展阅读 / NanoJev:小型决策模型

知识库收录材料 · 原始文件 ↗ · 来源、版本与许可

APPO Basic versus Jev

All three public APPO checkpoints completed 48/48 ViZDoom Basic cases when their original training rendering was restored. Each scored 6/6 on test and 6/6 on OOD, compared with Jev's 3/6 on each split. These checkpoints are practical candidates for generating Basic action demonstrations.

The rendering configuration was decisive in this experiment. The initial benchmark used NanoJev's existing framebuffer settings. We then checked the checkpoint's original source, restored its training rendering, verified all three policies on development cases, and ran the complete fixed case set. Both rounds are retained below.

Results with the training rendering

All controllers in this table use greedy selection with 10% uniform exploration and sampling seed 17. Test repeats each action for up to four ticks; OOD repeats for up to eight. Native termination remains enabled. A successful episode has a positive kill-count increment.

ControllerTrainDevCalibrationTestOOD
Jev10/243/64/63/63/6
APPO 111124/246/66/66/66/6
APPO 222224/246/66/66/66/6
APPO 333324/246/66/66/66/6
ControllerTest mean ticksOOD mean ticksTest mean ammo consumedOOD mean ammo consumed
Jev167.33235.6712.0016.67
APPO 111121.5025.001.171.00
APPO 222217.6725.001.001.00
APPO 333317.6737.001.001.50

These are means over every episode, including Jev's failures. They measure game time, not inference latency. Each split has six environment cases, reused across the three checkpoints; the three models do not create eighteen independent test scenarios.

The map, case seeds, buttons, action durations, and success criterion are shared. APPO consumes RGB frames with recurrent memory; Jev consumes structured visible-object boxes, player variables, and observation history. This is a comparison of complete controllers with their respective input representations. Predict Position is not covered by these Basic checkpoints.

Machine-readable results: training-rendering follow-up.

Initial benchmark with the existing rendering

The protocol fixed checkpoint 1111 with greedy selection and epsilon 0.1 as the primary comparison before APPO outcomes were inspected. Its initial test result tied Jev, and its OOD result was lower. All nine planned runs completed.

APPO checkpoint and controllerTestOOD
1111 greedy, epsilon 0.1 — primary3/61/6
1111 greedy, epsilon 03/60/6
1111 sampled2/61/6
2222 greedy, epsilon 0.14/63/6
2222 greedy, epsilon 04/63/6
2222 sampled4/63/6
3333 greedy, epsilon 0.15/63/6
3333 greedy, epsilon 05/63/6
3333 sampled5/65/6

Complete initial results include every split, metric, source hash, and paired case comparison. The training-rendering follow-up is recorded separately as an exploratory evaluation, retaining checkpoint 1111 and all secondary checkpoints.

Rendering and model checks

SettingInitial benchmarkTraining-rendering follow-up
Native framebuffer320×240160×120
HUDOffOn
Decals and particlesOnOff
Network input128×72 RGB, CHW128×72 RGB, CHW
ResizeNearest neighborNearest neighbor

Restoring these settings improved development success from 3/6, 4/6, and 4/6 to 6/6 for all three checkpoints. This tests the settings together; it does not isolate the contribution of HUD, resolution, or effects individually. The Basic WAD is byte-identical between the public training source and the installed ViZDoom scenario.

The APPO policy has 3,396,837 parameters, a CNN encoder, and a 512-unit LSTM. Evaluation strictly loads all 22 model-state tensors, including the saved input normalization statistics. Packed recurrent state contains 1,024 values for the hidden and cell states and resets at every episode. Inference preserves every parameter and normalization buffer.

Public checkpoints:

The runtime uses their original Sample Factory source, commit 9da68b57eecd73c3c884c1be2d938b46aa7a7f49 (2.0.0 source, using gym). Installed distribution metadata reports 2.1.1; the original source takes precedence on PYTHONPATH, and imported module hashes are recorded. Checkpoints load with weights_only=True and a scoped allowlist for legacy NumPy numeric metadata.

Verification and reproduction

  • The initial 432 episodes were independently replayed: 14,937 decisions, zero mismatches.

  • All 144 training-rendering follow-up episodes passed independent replay of 771 decisions, including framebuffer hashes, rewards, physical ticks, and final metrics.

  • Three APPO contract tests and thirteen existing Doom environment tests passed.

  • The existing Jev reference has 48 Basic episodes and 2,068 decisions; request receipts, action distributions, RNG decisions, and source hashes were audited.

The validation report records these checks. Raw episodes, model download manifests, checkpoints, and the pinned source archive are stored locally under runs/appo_basic_v1/. The existing Jev source remains data/unified_v2/jev_complete.jsonl.

With the pinned source and inference dependencies available on PYTHONPATH, reproduce the two evaluations using fresh output paths:

bash
python scripts/run_appo_basic_experiment.py \
  --model-dir runs/appo_basic_v1/models \
  --output-dir runs/appo_basic_repeat/episodes --workers 3

python scripts/diagnose_appo_doom_rendering.py \
  --model-dir runs/appo_basic_v1/models \
  --splits train,dev,calibration,test,ood \
  --output runs/appo_basic_repeat/native_rendering_all.json

summarize_appo_doom.py accepts all nine --run NAME=EPISODES inputs and an optional --rendering-report to regenerate the comparison. audit_appo_jev_reference.py rechecks the existing Jev reference without inference or API calls. Evaluation used CPU inference with one Torch thread per process and ViZDoom 1.3.0; no optimization or new Jev calls were performed.

The next Basic data collection can use these APPO actions as categorical targets for cross-entropy SFT. Its state export must use the actual rendering dimensions. Maze and Snake recipes are unchanged. No checkpoints were uploaded to Hugging Face.

快照未包含部分工程附件或配图;请通过上游链接或原始材料查看,收录范围见来源清单。

第十一章知识库收录材料 · 来源、版本与许可 · 第三方内容版权归各自作者;观点与数字请对照原始来源核验。