一、问题重述与分析:
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受影响也越少;但人数的增加可能意味着提交大数扰动的人也会增加,所以最终效果视情况而定。