第一次结对编程作业

一、问题重述与分析:

1.1 问题重述:  

  黄金点比赛共进行10000 rounds,每个round 5s时间,每位玩家(Bot)需在5s内提交2个数字去逼近黄金点。提交数字最接近黄金点(距离取绝对值)的玩家获最高分n(房间内玩家数量),最远离黄金点的玩家扣2分,其余玩家积分不变。10000 rounds后,得分最多的玩家获胜。

  黄金点定义:在每个round内,n位玩家所提交2n个数字,取平均值,乘以0.618,即为该轮黄金点。

1.2 问题分析:

  可采用解决方法:策略驱动,数据数据。

  策略驱动:如何让自己的策略脱颖而出?由于各玩家都会采用策略,如趋势判定、阈值判定、大数扰动等,配合强化学习,可能能做出极好的Bot。但由于组内两个人对RL、DQN等强化学习模型都没怎么接触过,不确定能否写出work的强化学习Bot。但假如不用强化学习,手动设定的策略由于不可调整,很容易被好的学习模型学到我们的策略,一定得不到高分。

  数据驱动:不考虑策略,仅依赖数据产生预测值,如滑动平均、灰色预测、RNN等。但是,假如玩家中有人故意出大数干扰,数据驱动很可能会失效。

二、Bot算法设计:

2.1 算法描述:  

  Number1:以该round以前的10个黄金点作为输入,训练一个LSTM模型,输出预测黄金点,并与前10个黄金点做平均;

  Number2:前一个黄金点乘以0.618。

  边界情况:1)若无法获取前一个黄金点,则两个Number1、Number2均输出9;

       2)若无法获取前10个黄金点(或不足10个),则Number1输出前一个黄金点乘以0.618。

2.2 流程图:

   

2.3 动机:

  1)在有波动的情况下,期望LSTM能够学到波动的规律并作出好的预测;

  2)在无波动或波动较小的情况下,估计黄金点近似以0.618为衰减率下降。

2.4 LSTM介绍:

  参考https://blog.csdn.net/zhangbaoanhadoop/article/details/81952284.

三、结果分析:

3.1 轮次分析:

  第一轮,我们其实采用大大数扰动的策略结合LSTM方法,效果很差。为了保分,决定放弃扰动,两个数均尝试逼近黄金点。并且,因为发现LSTM估计结果受大数干扰,常常出现预测值过大的情况,所以决定和前十个黄金点做平均。同时,我们发现其他Bot很多都采用了乘以0.618的方法,所以我们也用了。

  第二轮:和预期结果一致,我们的Bot虽然没有办法比肩前几个Bot,但在吃烂分的剩余的Bot里还是小胜一筹的。

3.2 假设提交3个数:

  若能提交第三个数,我考虑构建一个机器学习模型逼近Bot 2的大数扰动模型,并预测Bot 2在自己提交扰动时另一个数的大小。

  原因:在第一天后,我们发现得分最高的Bot 2常常使用大数扰动策略,并且通过一定数量的观测,估计它的策略是:一旦黄金点出现下降速度超过某一阈值,就增加一个随机大数进行扰动,并采用另一个稍微偏大的提交数去逼近黄金点。

  未采用原因:因为第一轮太差,我们决定还是以稳为主。

3.3 假设更多参赛者:

  我们的模型对参赛者数量的敏感性有待商榷,因为参赛人数越多,单个大数扰动的波动就会越小,LSTM受影响也越少;但人数的增加可能意味着提交大数扰动的人也会增加,所以最终效果视情况而定。

3.4 对小伙伴的评价:

  我的结对小伙伴是祁琳峰,我感觉我的小伙伴十分可靠,因为上周我大部分时间都在学校处理事务,所以在临走之前只写了个粗略的demo给他,之后的工作,如算法的完善以及讨论结果的实现,都是由他来完成的。最后尽管成绩不理想,没有取得前三名,但也在我们意料之中,是我们两个共同的责任。所以我对我的结对小伙伴的工作无可指摘(所以也没办法“三明治”评价了)。

3.5 对游戏的一些想法

  假如老师以后还要给其他学生组织黄金点比赛的话,也许可以考虑把得分规则改一下,让距离最远的数得最高分,离黄金点最近的数扣分。

posted on 2019-09-20 20:53  Shengnan_An  阅读(165)  评论(1编辑  收藏  举报