/othello

Primary LanguagePython

黑白棋游戏

背景

黑白棋(Reversi,又名翻转棋)是简单有趣的小游戏,其详细规则可见 维基百科百度百科

今天是周四,续老师不想备课,于是玩起了游戏。然而,他连玩游戏也要摸鱼。因此他想让你帮他写一个 AI,自动地玩黑白棋。

代码

请修改 reversi.py 编写你自己的逻辑。需要修改的关键函数为 reversi_ai,其中给出了当前的棋盘状况,你需要分析后返回下一步落子的坐标。

样例代码中实现了一种最简单(但实力并不弱)的逻辑,即在系统返回的第一个可以落子的位置落子。你可以随意修改这些逻辑,但请注意不要修改此函数下面的系统逻辑,否则可能导致失败。

我们不限制你使用任何方法,但请注意评测平台没有网络访问,并且每一步有一定的时间限制,请不要执行过多的运算,以免超时直接判负。

注:由于评测平台的限制,你不能在代码中使用第三方库(如 numpy),而只能使用 Python 标准库。

平台

本次作业的评测完全在 Saiblo 平台https://www.saiblo.net/)上进行,感谢计算机系科协对课程的支持!

在开始使用前,你需要在平台上注册一个账号。注意:用户名请与 GitHub 账号相同,并且必须使用邮箱注册,不能使用手机号。注册后,验证邮箱即可登录平台。

在注册完成后,请点击右上角头像——个人资料——单机头像,在个人资料中填写姓名、学校、院系。此后,在导航栏中选择“小组”,并加入“2021《实验物理的大数据方法》”小组,即可看到“黑白棋”比赛。

如有关于平台的疑问没有包含在下面的说明中,可以查看 平台文档 或者咨询助教。

上传 AI 与测试

当你编写玩 AI 后,可以上传到平台:点击右上角头像——我的代码——在右侧选择黑白棋(重要!不要选错游戏)——上传新 AI。名称与备注可以随意填写,但建议填写有意义的内容,文件选择 reversi.py,语言选择 Python [.py]。如果没有问题,你应当能看到一个新版本,并有“编译成功”的提示。当你更新了代码,可以使用“更新版本”来上传新的版本。

对于每个版本,右侧都有几个按钮。此处的“派遣”用于全局排行榜(对本作业没有用,但可以尝试),右侧三个按钮分别可以开始人机对战测试(⚡)、复制 AI token、设置批量测试(对本作业没有用)。AI token 可以用来唯一地标识你的 AI,用于与其他 AI 进行对战。

选择导航栏中的“房间”功能,可以创建房间进行测试,注意请选择 ares 服务器和黑白棋游戏。一个用户创建房间后,其他用户可以通过房间号(在右侧显示)加入房间,可以进行人人、人机和机机对战。添加的 AI 既可以是自己的(直接选择版本),也可以是他人的(使用 token)。

任何历史的对战战局记录都可以在“个人资料”中找到,点击“对局详情”即可查看回放,如果运行中出现了错误,也可以看到提示和运行日志。

比赛

当调试完成后,即可加入比赛。注意:如果不加入比赛,你将没有成绩。从主页中进入你加入的小组,进入“黑白棋”比赛。在右侧“我派遣的 AI”处选择一个版本,即为成功加入比赛。如果你在中途取消派遣,视为退赛;每次重新加入比赛后,比分都将被重置为初始值。

比赛不需要人工干预,系统自动每隔一段时间对所有 AI 进行天梯排位(使用 ELO 等级分 进行计算)。刷新比赛页面即可看到目前已经进行的战局,同样可以进行回放。点击右侧“查看排行榜”可看到目前的 AI 排名,并可以与任意一个 AI 发起一个快速人机战局,或者复制其 token 在房间中使用。

当超过截止时间后,我们将会锁定所有人的 AI 版本,重新从头进行天梯排位。结果以最后一次运行的排位为准。

评分

本作业为课堂附加作业,评分标准如下:

  • 白盒为强制要求,即如果助教认为你的代码风格较差或者 Git 使用不合规,则直接记 0 分
  • 成功编写 AI 击败样例代码(最终排名超过 HarryChen):总评加 1 分
  • 前 4~6 名(如果提交少于 20 人则为第 3~4 名;如果少于 10 人则为第二名;如果少于 5 人则不评选):总评加 2 分
  • 前 2~3 名(如果提交少于 20 人则为第二名;如果少于 10 人则为第一名;如果少于 5 人则不评选):总评加 3 分
  • 第一名(少于 10 人不评选):总评加 5 分

上述加分不叠加,并且必须排名超过样例代码才可得到 1 分及以上的分数