ASE——第一次结对作业

问题定义

很早就听说了MSRA的黄金点游戏,让大家写Bot来参加比赛看谁的AI比较聪明可以操盘割韭菜。深感ASE课程老师设计的任务太用心了,各种接口都准备好了,大家只用专注于算法部分。方便上手然后也挺好玩(最后玩自闭了)

问题定义

黄金点游戏里所有玩家出两个数,平均值乘0.618就是这局的Golden Number,出的数字离Golden Number最近的玩家得分,最远的玩家扣分。不过每次得分等于玩家数,扣分固定是只有两分。游戏规则相当于鼓励大家骚操作,扣点分没关系重要的是怎么更好地预测出下次的黄金点,高概率的得分是制胜法宝。老师鼓励大家使用RL的方法来参加比赛,那么从RL的角度来看黄金点游戏的话:某个玩家的bot就是agent(因为不考虑bot间合作的情况),其他bot和之前的对局情况对于这个bot来说就是enviroment。很显然这个environment是相当复杂的,并且是动态变化的,agent需要不断地采集environment的信息来调整自己的policy以获得最终的胜利。

问题的难点

  1. 黄金点游戏的environment的描述很难

    我们可以拿到数据有各个玩家当前的得分,所有玩家历史数据。怎么用这些数据有效的表示出现在的state是一个比较麻烦的问题。老师的demo里仅仅使用最近10次黄金点上升和下降的次数作为当前state的描述,可以想到加入更多的信息来表示当前state当然会更加准确,不过模型也就更难训练的较好。还有就是state有无穷多种,这里采用tabular的方法不太合适,除非强行把state给减少到有限多种(RLdemo中就是这么做的),那么就需要function approximation的办法来使得访问到的一些数据更新后能有足够的泛化能力让agent在没有见过的state也能给出不错的策略。

  2. action的选择

    我和同伴商量了很久也没有想好在博弈的情况下考虑什么action能获得比较好的收益,RLDemo中给出了一些例子,都是对最近的黄金点进行一定的操作。如果其他玩家采取一些扰动策略,那么对最近几轮黄金点进行操作作为下一次的输出就不合理了。由于没法得到别人的策略和action,想了很久也没有一个好的办法,所以最后还是退而求其次选取固定的一些action。

方法建模

第一版

和队友最近一直在搞RL,之前讨论的时候想了很多方案。不过由于我们俩在写这个Bot的时候都超级忙,他回去处理保研的事情,我在准备清华的九月推免。讨论的一些不错的idea最后都没有用上(难受)。交的第一个版本是一个常规的DQN,其中approximation用的是densenet。我们把最近10轮的黄金点上升、下降趋势的个数,最近三轮黄金点平均值,最近五轮黄金点平均值,以及最近十轮黄金点的3次多项式拟合的前三个参数做为表征当前状态的输入。(现在想想这个特征工程可能是败笔,也许用网络来提取特征效果更好)。关于DQN的部分的话就是常规的框架:

main network和target network之间有一些delay,两个网络的输出差值就是简单Q-learning的Q现实和Q估计(构成TD-error),可以调整的超参数就是更新频率和memory size。中规中矩的DQN算法:(好奇大家都用Sutton介绍的版本23333)

第二版

第一版是匆匆忙忙赶出来的,在经过第一轮测试之后我和队友开始加入一些之前讨论过的思想,由于整个游戏是well-model的,所以我们可以用别人的输入来做planning,每一轮都可以把做每个action的情况模拟出来增加训练数据。也就是说虽然DQN给出了某一个固定的action,但我们同时把DQN没有选到的action也模拟了一遍,这样就大大提高了训练速度,也可以避免一直不得分然后陷入死局的情况。

如上图所示,除了真正做了选择,action之后得到的experience来改善我们的model,我们同时还自己维护了一个黄金点平台,尝试了各种action在当前state情况下的reward。(可以看到RL里的所有game几乎都好model,毕竟不是真实问题)

结果分析

第一次完了1000轮,排名第三,但是当时是写了一个裸的DQN,虽然我们设计了一下state的representation,但是还是完全出乎意料。只能说是运气比较好。后来我们加了一些精心设计的policy和planning,第二版在交上去之前,我和前一版的10个bot以及一些tabular的demo放在一个房间里玩作对比。结果!!改过的bot并没有像我们想的那样大杀四方,而是比之前的还要烂。。。那10个简单DQN调整了一些参数,有些DQN在刚开始就表现的不错,有些DQN刚开始就表现的很烂比tabular的方法还要烂。然后我和队友比较慌,没有想到把两个模型综合一下,简单DQN交第一个数,planning版本交第二个数。本着实践是检验真理的唯一标准,把改了一点参数的第一个DQN交了上去。(不知道是不是我们被wellmodel了,开始游戏之后就表现的异常的烂,然后正常游戏被吊锤),后来我们分析了一下,由于游戏里很多bot加入了扰动因素,特别是冠军bot,日常靠大数扰动稳定得分,非常的主动。而我们开局不利,一直处于没有怎么得分的情况,而且又没有planning,只能靠着epsilon greedy的办法去试到一些能得分的action。。。相当于没有逆风翻盘的能力,所以就跪了。之后自己可以试一试把加了planning的版本以及用网络抽取特征的版本结合起来,加上扰动策略能不能稳定的solo赢一些比较菜的bot。被虐的体无完肤,太弟弟了。

问题

  1. 黄金点结果符合预期吗

    基本符合预期把,因为加了planning的版本最后又没用上。相当于裸的DQN和大家的bot玩,比较菜也是情理之中。由于我们俩个人原因没能把设计好的一些思路用上和大家大战一场有点可惜。

  2. 在正式的比赛前,你们采取了怎样的策略来评价模型的好坏?

    我们用写好的bot和改进的bot还有一些简单的bot开房间互相打,然后通过判断在足够轮数里正确预测黄金点的比例(不能光是排名)来判断模型的好坏。比如1w轮,如果有3000轮都得了分,而且扣分比例很低,那就是个很好的模型。

  3. 如果将每轮可提交的数字变成 3个,或者找更多的参赛者来参加比赛,你们的方法还适用吗?

    用RL的好处就在这里啦,参赛者更多数字更多我们就比传统方法更加强,毕竟是和环境交互学习嘛。

  4. 请评价合作伙伴的工作,评价方式请参考书中关于三明治方法的论述。并提出结对伙伴可以改进的地方。

    我的队友非常认真的对待这次比赛,我们俩也进行了很多关于策略的讨论。很可惜是由于保研推免的事情耽误了没有时间充分实现。尤其是我,在交作业ddl前一天还要去清华机试面试,对不住队友啦。不过后来我们俩合作赶紧写好了基本的DQN并且也完成了相关的测试,大赞!

ASE——第一次结对作业的更多相关文章

  1. ASE —— 第一次结对作业

    问题定义 游戏规则: N个玩家,每人写一个或两个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0.618,得到G值. 提交的数字最靠近 ...

  2. [BUAA软工]第一次结对作业

    [BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...

  3. 【ASE高级软件工程】第一次结对作业

    问题定义 具体规则见:讲义.大致规则如下: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数 ...

  4. ASE高级软件工程 第一次结对作业

    黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...

  5. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  6. ASE —— 第二次结对作业

    目录 重现基线模型 基线模型原理 模型的优缺点 模型重现结果 提出改进 改进动机 新模型框架 评价合作伙伴 重现基线模型 基线模型原理 我们选用的的模型为DeepCS,接下来我将解释一下它的原理. 我 ...

  7. 第6次结对作业--郑锦伟&古维城

    第6次结对作业 在线英语学习平台客户端原型 1.结对成员 郑锦伟 2015034643034 古维城 2015034643033 2.原型设计工具实现-Photoshop 3.需求分析 使用NABCD ...

  8. [2019BUAA软件工程]结对作业

    Tips Link 作业链接 [2019BUAA软件工程]结对作业 GitHub地址 WordChain PSP表格 psp2.1   预估耗时(分钟) 实际耗时(分钟) Planning 计划 60 ...

  9. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...

随机推荐

  1. windows修改docker的默认存放位置

    docker默认存储到c盘,我需要移动到其他盘. 参考了网上很多资料,结果要么移动不了,要么重启docker就回到c盘了. 最后参考docker的官方论坛,找到了解决方案.https://forums ...

  2. python基础类型(字典:dict)

    字典的介绍: 字典(dict)Python中唯一的一个映射类型.他是以{}括起来的键值对组成,在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存到这 ...

  3. 【学习总结】Python-3-运算符优先级

    参考:菜鸟教程-Python3运算符 运算符优先级-表 特别注意:逻辑运算符内部的优先级顺序-考点!!!! END

  4. Debug和Release区别(转)

    地址:https://zhidao.baidu.com/question/629188090208609884.html 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题 ...

  5. 配置node 的路由

    配置路由 引入路由中间件 const Router= require('koa-router'); 实例化 const router= new Router(); 配置路由地址 router.use( ...

  6. java解决高并发问题

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  7. HashMap常见面试题

    1.HashMap底层是通过什么来实现的? 在JDK1.7中是通过数组+链表来实现的: 在JDK1.8中是通过数组+链表+红黑树来实现的 2.HashMap在JDK1.8中为什么使用红黑树? 为了弥补 ...

  8. websocket 中使用Service层的方法

    创建公共Utils 类 ApplicationContextRegister @Component @Lazy(false) public class ApplicationContextRegist ...

  9. JavaScript设计模式小抄集(持续更新)

    前言 本文旨在记录JavaScript中常用的设计模式代码片段,简要说明使用场景,不过于追究细节.在设计模式开篇之前,还是先要搞清楚JavaScript中关于面向对象的基础知识,可以先看看JavaSc ...

  10. 【Flutter学习】可滚动组件之ScrollView

    一,概述 ScrollView 是一个带有滚动的视图组件. 二,组成部分 ScrollView 由三部分组成: Scrollable - 它监听各种用户手势并实现滚动的交互设计.可滚动Widget都直 ...