# Submission Checklist

最后提交前**逐项核对**，避免格式扣分。

## 1. 命名格式

- [ ] zip 文件名：`CW1_<学号>_<姓名拼音>.zip`
  - 例：`CW1_2012345_ZhangSan.zip`
- [ ] PDF 文件名：`CW1_<学号>_<姓名拼音>.pdf`
- [ ] 学号 + 姓名拼写**全程一致**（zip / pdf / 报告封面页）
- [ ] **PDF 不放进 zip**！分两个文件单独上传

## 2. zip 内容（提交前检查）

```
CW1_<ID>_<Name>.zip
├── README.md                       ✅
├── requirements.txt                ✅
├── train.py                        ✅ 单环境 legacy
├── train_vec.py                    ✅ 主训练脚本
├── train_sb3_baseline.py           ✅ SB3 基线
├── evaluate.py                     ✅ 评估脚本
├── scan_checkpoints.py             ✅ checkpoint 扫描
├── src/
│   ├── __init__.py
│   ├── env_wrappers.py
│   ├── vec_env_wrappers.py
│   ├── networks.py
│   ├── rollout_buffer.py
│   ├── vec_rollout_buffer.py
│   ├── ppo_agent.py
│   ├── eval_utils.py
│   └── utils.py
├── notebooks/
│   ├── 01_explore_env.ipynb
│   ├── 02_test_network.ipynb
│   ├── 03_test_buffer.ipynb
│   ├── 04_test_ppo.ipynb
│   └── 05_evaluate.ipynb
├── models/
│   └── ppo_final.pt                ⭐ 最佳 checkpoint，重命名后唯一一个
├── runs/
│   └── vec_main_v3/                ⭐ 主训练 TensorBoard 日志
└── docs/                           ✅ 报告素材（可全部保留）
    ├── step00_skeleton.md
    ├── step01_env_exploration.md
    ├── ...
    ├── step07_evaluation.md
    ├── issues_and_fixes.md
    ├── report_outline.md
    ├── eval_summary.json
    ├── checkpoint_scan_*.json
    ├── fig_eval_bar.png
    ├── fig_training_curves.png
    └── demo.mp4
```

## 3. zip 不应包含的东西（提交前删除）

- [ ] `__pycache__/` 目录（src/ 下可能有，删掉）
- [ ] `*.pyc` 文件
- [ ] `.ipynb_checkpoints/` 目录
- [ ] `runs/smoke_test/`、`runs/smoke_v2/`、`runs/n8_speed_test/`、`runs/vec_smoke*/` 等无用日志
- [ ] `models/main_v1_baseline/`、`models/smoke_*/`、`models/n8_speed_test/` 等无用 checkpoint
- [ ] `models/vec_main_v3/iter_*.pt` 中除最佳外的所有中间 checkpoint
- [ ] `anaconda_projects/` 等 IDE 自动产生目录（如果存在）

### 一键清理命令

```powershell
cd D:\projects\CW1_xxx

# 1. 把最佳 checkpoint 复制为 ppo_final.pt
Copy-Item models\vec_main_v3\<最佳iter>.pt models\ppo_final.pt

# 2. 删除中间 checkpoints
Remove-Item -Recurse -Force models\vec_main_v3
Remove-Item -Recurse -Force models\main_v1_baseline -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force models\smoke_test, models\smoke_v2, models\n8_speed_test, models\vec_smoke -ErrorAction SilentlyContinue

# 3. 删除无用 runs
Remove-Item -Recurse -Force runs\smoke_test, runs\smoke_v2, runs\n8_speed_test, runs\vec_smoke, runs\vec_smoke_v3, runs\vec_smoke_v3b -ErrorAction SilentlyContinue

# 4. 把 vec_main_v3 重命名成 main（提交时更清晰）
Move-Item runs\vec_main_v3 runs\main

# 5. 删除 __pycache__ 和 .ipynb_checkpoints
Get-ChildItem -Recurse -Force -Include "__pycache__",".ipynb_checkpoints" | Remove-Item -Recurse -Force
Get-ChildItem -Recurse -Filter "*.pyc" | Remove-Item -Force
```

## 4. PDF 报告内容核对

- [ ] **第一页 cover page**：含学生 ID
- [ ] **字数 ≤ 3000**（不含 References 和 Appendix）
- [ ] 5 个 section 全有：Introduction / Methodology / Implementation Details /
      Results and Analysis / Conclusion
- [ ] **3 张关键图**：训练曲线、评估柱状图、SB3 对比（已在 fig_training_curves.png）
- [ ] **超参数表**（Table 1 in Section 3.3）
- [ ] **网络架构图**（手绘或 PowerPoint 画）
- [ ] **References** 至少 3-5 篇（PPO + GAE + Gymnasium 文档）
- [ ] **PDF 字体清晰**，所有图表 axis label / legend 都可读
- [ ] **PDF 文件可在另一台电脑打开**（不要损坏）

## 5. 代码可复现性（致关键）

提交前在**不同目录**或**不同电脑**做这个测试：

```powershell
# 假设你解压 zip 到一个新位置
cd C:\test_dir\CW1_<ID>_<Name>

# 1. 装依赖
pip install -r requirements.txt

# 2. 加载模型测试
python -c "from src.ppo_agent import PPOAgent; agent = PPOAgent(); agent.load('models/ppo_final.pt'); print('OK')"

# 3. 跑评估（最少 5 episodes）
python evaluate.py --ckpt models/ppo_final.pt --episodes 5
```

如果以上 3 步全过，提交内容**复现性 OK**。

## 6. 学术诚信

- [ ] `src/` 下**没有**任何 `from stable_baselines3 import` 语句
  - 验证：`Get-ChildItem src\ -Recurse -Filter *.py | Select-String "stable_baselines3"`
- [ ] `train_sb3_baseline.py` 在报告里**明确标记为 baseline only**
- [ ] 所有外部代码灵感（CleanRL、PPO 论文、37 details 博客）在报告 References 里**列出**
- [ ] 报告封面"yes" 同意匿名教学使用（视个人意愿）

## 7. 学习 Mall 上传后

- [ ] **下载 zip 和 pdf**，验证文件完整未损坏
- [ ] 在干净电脑上重新打开 PDF 看一眼
- [ ] 截图保存提交确认页（防系统崩溃）

## 8. 时间节点（截止 2026-05-04 23:59）

- 至少 **48 小时前**（即 2026-05-02 中午）完成所有内容
- **不要** 拖到截止当天，Learning Mall 临近截止经常上传失败
- 留 1-2 天缓冲修 bug / 改报告

## 9. 紧急情况备选

- 如果 vec_main_v3 训练崩溃 → 使用 `runs/main_v1_baseline/` + `models/main_v1_baseline/` 数据
  + 报告里诚实说明 (305K 步早期停止)
- 如果 SB3 baseline 没跑出来 → 报告 Section 4.3 删掉对比，改成"plan to compare in future work"
- 如果 PDF 超字数 → 删 Implementation Details 里的次要细节，保留 Methodology 和 Results
