作业 4:神经网络与搜索——重力四子棋
结合神经网络与蒙特卡洛树搜索(MCTS),通过自我对弈训练重力四子棋 AI。作业灵感来源于 AlphaZero,Notebook 和 Python 脚本版任选其一,使用课程提供的 pubpy 环境。
截止时间:2026 年 11 月 14 日 23:59。
作业材料
| 材料 | 内容 |
|---|---|
| 完整材料包(ZIP) | 作业说明、两版引导教程、代码模板及参考文献;两版任选其一 |
| 作业说明原文 | 任务、对战平台登录说明、提交要求与评分规则 |
| 材料使用说明 | 环境、检查、训练、评估、导出与上传方法 |
下载并解压完整材料包,用 VS Code / Remote SSH 打开所选版本的整个子目录,保留其中的 starter/。Notebook 版只需补全笔记本,不用重复填写 starter/ 中的模板。Notebook 的基础操作可参考神经网络实践。
需要完成什么
棋盘为 6 行、7 列。双方轮流选择一列,棋子落至该列最下方空位;横、竖或斜向先连成四子者获胜,棋盘填满且无人获胜则平局。列号为 0~6。
实现搜索:补全
starter/mcts.py或 Notebook 第三节的选择、扩展、回传、搜索循环四个步骤。后续训练与对战使用自己实现的搜索。自我对弈训练:补全
starter/train.py或 Notebook 第四、五节,将访问次数转为落子分布,记录局面和胜负标签,并计算策略损失与价值损失。从随机初始化开始训练、保存模型,比较训练前后表现;跑通后可调整网络或训练参数。对战测试:将导出的
code.zip和model.pt上传至课程对战平台,与随机策略、入门策略或其他同学对战。操作方法见上传与对战指南。已为同学们安排对战平台账号,用户名为学号,初始密码为圆周率前 15 位,登录后可以修改自己的密码。
提交内容
在服务器个人目录中建立 ~/homework4/,放入以下内容:
| 所选版本 | 完整源码 | 模型 |
|---|---|---|
| Python 脚本版 | 补全后的完整 starter/ 文件夹 | model.pt |
| Notebook 版 | 补全后的 .ipynb,以及从 notebook_runs/实验名/src/ 复制得到的 starter/ 文件夹 | model.pt |
只交一个版本,可以保留训练日志,无需提交训练数据缓存。平台上传的 code.zip 不含完整训练程序,不能代替服务器上的完整源码。
同时,在截止前进入对战平台的“正式比赛”页面,指定一个参赛版本;代码和模型应与服务器提交的作业对应。截止后冻结参赛版本,正式评测使用该版本,之后修改日常默认版本不影响参赛版本。日常榜排名不计入作业成绩。
比赛与评分
完成作业要求并提交可运行的代码和模型后,按以下标准评分。未完成、缺交或无法运行的作业另行评定。
助教统一评测参赛模型。对随机策略和入门策略分别使用多组开局测试,每组交换先后手各下一局;每局胜、平、负分别计 1、0.5、0 分。累计得分超过总局数的一半才算通过,打平不通过。 具体测试局数视实际情况调整。
通过入门策略测试(资格赛)的模型进入正式比赛。暂定采用 8 轮瑞士制,根据当前积分安排对手,每场交换先后手各下一局,使用同一开局;按累计积分排名,同分时比较对手的最终积分总和。轮数、每场局数及开局设置会根据参赛人数和实际情况调整。
| 评测结果 | 分数 |
|---|---|
| 排名前 10% | 10 |
| 排名 10%~25% | 9.5 |
| 排名 25%~50% | 9 |
| 排名 50%~70% | 8.5 |
| 通过资格赛的其余同学 | 8 |
| 未通过资格赛,但通过随机策略测试 | 7 |
| 两项测试均未通过 | 6 |
百分比按通过资格赛的人数计算。仍然并列且跨越评分档位时,按较高档计分。
评测采用统一的时间和资源限制,以平台公布的规则为准。超时、非法落子或程序崩溃判该局负;平台故障由助教处理并安排重赛。