• 第一次结对编程作业


    一、问题重述与分析:

    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 对游戏的一些想法

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

  • 相关阅读:
    c++中结构体的使用
    指针、引用、引用和函数参数、引用和const、const 和 #define、#define的特殊用途
    用eclipice抓取JS代码
    UITableView读取plist文件
    GameKit框架简介、通过蓝牙实现对等网络连接
    照片选择步骤及部分代码
    通知(消息)机制(本地推送和远程推送及实现步骤)
    游戏中心-内购—应用内购买修改应用程序信息
    粒子效果的使用建议、粒子编辑器各属性说明
    如何判断用户是否登录
  • 原文地址:https://www.cnblogs.com/ShengnanAn/p/11559816.html
Copyright © 2020-2023  润新知