【ASE高级软件工程】第一次结对作业
问题定义
具体规则见:讲义。大致规则如下:
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。
难点分析:
- 环境未知。“黄金点”游戏作为对战类游戏,游戏规则本身较简单。因此,游戏的局面很大程度上取决于其它选手的策略、可预测性较弱,而不像围棋、象棋等游戏中,游戏的局面和发展很大程度受到规则约束,因此可预测性较强。这导致游戏中“最优策略”也很大程度上取决于其它选手的策略,因而pretrain的模型效果不令人满意,甚至有时比从头开始训练的模型效果更差。
- 数据缺乏。由于第一点,我们以及大部分队伍都选择比赛过程中从头开始训练模型。然而,比赛过程中一轮比赛只能获取一个新数据,数据量太少不利于模型收敛。另外,写代码、调参过程中,使用server与他人对战时每个数据需要至少3s,也较难有效调参。
- 奖励稀疏。这是许多RL问题的共有问题。在本游戏中,大部分情况下的奖励都是0,不利于模型学习。
另外,个人对游戏本身有一点小小的怀疑:许多RL游戏的规则本身就能让人联想到可能的“最佳策略”,但是这个游戏的规则让我感觉随机性太大,作为人我感到一头雾水。即使我自己是RL agent,可能也难以学到比胡乱猜测更好的策略,或者可能需要对其它选手的策略进行一定程度的分析才能选择较好的策略。虽然比赛结果显示确实有的队伍得分很高,这个游戏本身是否真的存在一个“最佳策略”?我个人不太确定。(当然这并不影响RL学习,只是个人觉得游戏有些古怪。)
方法建模
核心算法
我们使用q-learning。该算法维护一个q表,记录在某个外界状态\(s\)下,执行某动作\(a\)预期得到的奖励\(Q(s, a)\)。一旦有了足够贴近现实的q表,在每个状态\(s\)下,可以选择动作\(a^* = \arg \max_a Q(s, a)\),从而最大化预期的奖励。
实际操作中,由于q表未知,需要从环境中进行学习。具体而言,模型随机初始化一个q表,通过在不同状态下尝试不同动作、观察奖励回馈,模型逐步修正q表的估计,使之更接近现实,更能指导模型动作。流程图如下:
本次作业中,我们增加了一些更合理的action;为了解决难点中的2.,我们构造了更多可供学习的数据。具体细节见 具体实现 部分。
使用动机
由于难点分析中的1. 2.,我们认为需要train from scratch,因而数据量匮乏是一个很严重的问题。因此,我们认为不适合采用参数较多、较难收敛的神经网络模型,而应该是用最简单的q learning。
由于q learning不考虑状态、动作之间的相关性,而是为每个\((s, a)\)单独保存一个q值,因此状态空间或动作空间太大会导致模型难以收敛。因此,我们控制了状态空间和动作空间的大小,只手工设计了一些较为有用的策略作为动作。
具体实现
- action改进。对于demo中已有的action,我们更改了action输出的初始值,使之更接近统计数据中常见的初始值;对于需要两个数字输入的情况,原始的很多action输出的两个数字相同,不利于得分,因此我们在第二个数字中引入一些随机性;另外,我们引入了一些新的action,其在黄金点经常出现的特定范围内输出随机数,或输出一个大数扰动。
- 构造数据。由于服务器的api提供上一局中所有人的提交数字,因此我们在训练过程中,可以构造“假如上一局中我采纳了另一个策略,得到的reward会是怎样”的数据,从而将数据量扩展\(n_a\)倍,其中\(n_a\)为动作的个数。
结果分析
在第一局中,我们为第6名。在两局中间,我们根据黄金点走向数据对action的取值范围等进行了微调,取得了一定的效果,在第二局中获得第4名。
反思总结
黄金点比赛的结果符合你们的预期吗?
第一局游戏结果较差,但我们采取改进之后略有提升。整体而言,我们的bot效果不算突出,主要原因可能在于状态设计过于简单:我们用最后10轮中黄金点下降、上升的次数作为状态,难以完整描绘目前局势状况。另外,我们了解到成绩较好的组采用了DQN,可能说明q-learning的学习能力仍然有限。
在正式的比赛前,你们采取了怎样的策略来评价模型的好坏?
我们在room0、room1中运行bot,参与竞赛,评估模型效果。后来,由于room0、room1速度实在太慢,我们加入了一些其他同学建立的房间评估效果。另外,我们记录bot每轮reward,观察bot学习曲线等,评估bot学习能力。
如果将每轮可提交的数字变成 3个,或者找更多的参赛者来参加比赛,你们的方法还适用吗?
对于三个数字,q-learning可能适用,但需要分析数据、设计更适合提交三个数字的策略。如果action space太大,可能需要考虑action之间关系的q表建模方法。
对于更多的参赛者,方法仍然适用。
请评价合作伙伴的工作,评价方式请参考书中关于三明治方法的论述。并提出结对伙伴可以改进的地方。
我的合作伙伴是魏天心和吴紫薇和吴雪晴同学,两个同学都很优秀,为我们的项目作出了很多贡献。
魏天心同学对RL很了解,很快地分析了问题、提出了可行的解决方案,并且积极地写代码、进行调试。
吴紫薇同学对数据进行了分析和相应的改进,也贡献了很多代码。
另外,由于我们在国外暑研,不在国内、和国内同学与助教交流有限;而且暑研期间各自有各自的工作,项目的ddl正好在我们暑研结束回国的时间附近,因此ddl前我们有的人刚回国正在倒时差、有的人还在忙暑研收尾、有的人马上要上飞机,因此整体时间比较缺乏。队友们都非常优秀,这样的结果我觉得也能够心满意足了。
【ASE高级软件工程】第一次结对作业的更多相关文章
- ASE高级软件工程 第一次结对作业
黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...
- ASE——第一次结对作业
ASE--第一次结对作业 问题定义 很早就听说了MSRA的黄金点游戏,让大家写Bot来参加比赛看谁的AI比较聪明可以操盘割韭菜.深感ASE课程老师设计的任务太用心了,各种接口都准备好了,大家只用专注于 ...
- [BUAA软工]第一次结对作业
[BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...
- 【ASE高级软件工程】第二次结对作业
重现baseline 我们选择重现CODEnn模型(论文:Deep Code Search),因为它结构简单.端到端可训练,且相比其它方法拥有较高的性能. Baseline原理 为了根据给定的quer ...
- ASE高级软件工程 第一周博客作业
1.自我介绍 我叫姚顺,是来自哈尔滨工业大学计算机学院的一名大四本科生,专业方向计算机科学,目前在KC组实习.平时的业余时间主要用来打篮球,听音乐,跑步,当然还有游戏(划掉).之前的大学三年主要用来做 ...
- ASE —— 第一次结对作业
问题定义 游戏规则: N个玩家,每人写一个或两个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0.618,得到G值. 提交的数字最靠近 ...
- 高级软件工程第二次作业:随机生成N个不重复的已解答完毕的数独棋盘
#include <stdio.h> #include "SuduCheck.h" ][],int i,int j,int k) //判断是否可以将第i行.第j列的数设 ...
- 【ASE高级软件工程】Alpha 阶段 backend组 scrum1 记录
本次会议于11月4日,19:10 在微软北京西二号楼13478召开,持续40分钟. 与会人员:Haifeng Chen, Zhikai Chen, Hao Wang, Jia Ning 请假: Xin ...
- 【BUAA软件工程】第一次阅读作业
BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...
随机推荐
- OpenStack 虚拟机热迁移流程图
目录 文章目录 目录 源计算节点与目的计算节点之间的交互流程 Nova 和 Neutron 之间的交互流程 源计算节点与目的计算节点之间的交互流程 热迁移主要包括三个阶段: pre_live_migr ...
- spring常用模式--模板模式
引入:这几天在看一本讲spring源码的书<SPRING技术内幕>里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplica ...
- 开发CLI命令行
命令行工具:CLI 是在命令行终端使用的工具,如git, npm, vim 都是CLI工具.比如我们可以通过 git clone 等命令简单把远程代码复制到本地 和 cli 相对的是图形用户界面(gu ...
- TFTP反射放大攻击浅析
0x00 前言 经由@杀戮提示,让我看看softpedia上的这篇报道,咱就来研究一下文中的使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)进行反射型DD ...
- VS自定义代码块Code Snippet
一 .简述 我们在开发当中,避免不了一些重复的开发工作,在你漫长的开发以及学习当中,你会发现有这么一部分代码是你时常会使用到的.我想这个工具也是针对这个原因出来的吧,它就是预先把你需要的这部分代码的 ...
- iOS 11适配
1.http://www.cocoachina.com/ios/20170915/20580.html 简书App适配iOS 11 2.http://www.jianshu.com/p/efb ...
- Caché,Cache数据库连接并查询数据
1.Caché数据库安装好后,在开始菜单中启动 2.打开管理中心,地址为:http://localhost:57772/csp/sys/UtilHome.csp ,输入用户密码,登录 3.要对表数据进 ...
- 【ABAP系列】SAP ABAP Break Point
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP Break P ...
- stat中的st_dev和st_rdev
目录 stat中的st_dev和st_rdev title: stat中的st_dev和st_rdev date: 2019/11/27 21:04:25 toc: true --- stat中的st ...
- msyql 主从切换
从库是192.168.1.70 ,主库是192.168.1.64,主从切换一次 即:主库是192.168.1.70,从库是192.168.1.64 1.从库上执行,修改为主 修改从库为非只读库修改配置 ...