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. MyEclipse更换工作空间报错自动退出

    2.解决方法 后来找到一种方法,解决了我的问题,即找到图二中报错的那个jar包,我的是com.genuitec.eclipse.core_14.0.0.me201602080330.jar,然后将其文 ...

  2. 【转载】MySQL count(*) count(1) count(column)区别

    MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然 ...

  3. Linux 定时任务 Crontab 命令详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  4. 力扣 — Rotate List()

    题目描述: 中文: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ...

  5. mqtt发送消息,消息体为16进制

    在idea 加入代码  :-server -XX:PermSize=256M -XX:MaxPermSize=256M -Dfile.encoding=UTF-8

  6. springboot themaleaf 各种报错

    1.访问themaleaf页面报错 Whitelabel Error Page This application has no explicit mapping for /error, so you ...

  7. python3.x 类似cpp引用指针传参修改

    #同名局部变量调用外部全局变量: num=100def fun(): global num#告诉编译器是全局的num num+=100 print(num)print(fun)print(fun()) ...

  8. iview select下拉框的蜜汁小坑

    前言 最近使用iview的select下拉选择器,遇到一个很神奇的问题:选中下拉框里面的一个值,但是再去点下拉框的时候就只剩刚才选中的数据了.感觉应该是插件把刚才选中的数据当做的搜索条件,所以需要做的 ...

  9. 【leetcode】908. Smallest Range I

    题目如下: 解题思路:简单的不能再简单的题目了,对于任意一个A[i]来说,其可能的最小的最大值是A[i]-K,最大的最小值是A[i]+K.遍历数组,求出所有元素中最大的最小值和最小的最大值,两者之差( ...

  10. delphi中SendMessage使用说明

    SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线 ...