zoukankan      html  css  js  c++  java
  • ASE

    一、“黄金点”问题定义

    1. 问题定义:有N个玩家玩猜数游戏,在每一轮中,每人给出两个数字,然后计算这2N个数字的平均值,再乘上0.618, 我们把得到的结果称为“黄金点”。离黄金点最远(差值绝对值最大)的玩家扣2分,离黄金点最近的玩家得N分。如此进行 K 轮,按积分多少对玩家进行排名。关于这个游戏的更多信息,可以查看老师的这篇博客:创新的时机 - 黄金点游戏

    2. 问题难点:通过观察room0, room1中的bot,以及观察其他同学在赛前的切磋,我们发现总是会有bot给出大数来进行干扰。在这样的情况下,我们有两个大方向可以选:

      1)求稳。不主动给出大数(给出大数会承担扣分风险),安安静静预测下一黄金点。这种方法的难点在于怎么根据之前的黄金点数值和变化趋势猜出下一黄金点。

      2)主动干扰。主动给出大数,另一个数字根据自己出的数字来进行调整。这种方法的难点在于a. 猜准干扰时机; b. 另一数字的准确选择。

    二、 方法建模

    1. 核心算法 :用了比较简单的Q-learning。在这个算法中,最核心的是Q-table,它的行是各种state,而列是各种action。state代表我们会到达的各种状态,而action则是玩家所采取的策略,通过某个action,玩家可以从一个state到达另一个state。Q-table的作用在于指示我们在每一种state下,各个action的收益会是多少,Q-learning的核心就在于学习一个好的Q-table。

      那么如何怎么学呢?我们考虑我们原本在状态(s1), 采取动作(a1)之后,到了状态(s2),这一步的收益称为(R)

      原本我们认为我们的收益是 (Q(s1, a1)),但这个收益不一定对,需要调整它。怎么调整呢?那就要考虑我们的实际收益:首先(R)是确定的,而到了(s2)之后,以后继续采取其他动作还可以继续获益,所以我们的实际获益最多可以是 (R + maxQ(s2, a))。但在Q-learning中,我们还要引入一个衰减 (lambda),将收益改为 (R + lambda maxQ(s2, a)).

      有了这个“实际”收益之后,我们也不能完全忽略原来的(Q(s1, a1)), 而是以一个比例将它与实际收益组合起来:

      $Q(s1, a1) := (1 - eta ) Q(s1, a1) + eta (R + maxQ(s2, a)) $

    2. 动机:在观察了其他玩家的bot后,发现也并不能战胜BotDemo多少,这说明Q-learning在这个游戏中并不算弱,如果可以进一步改进(比如增加更多的可能的action),有希望获得更强的bot.

      流程:

    3. 详细实现

      1)对于number1, 我们使用Q-learning的方法来进行学习。考虑到其他同学也有一些bot是用了类似于BotDemo的方法,所以使用room1的历史数据来离线训练一个更好的Q-table是有一定好处的。为了获得一个比较合理的Q-table,我们使用多个不同的随机种子,将多个结果进行平均。(其实存在很大的不确定性,训练数据和测试数据之间存在domain shift...而且这个差异的大小不是自己可以控制的...)

      2)对于number2, 如果Q-learning中的action给出的number2等于number1,那么我们把number2修改为last_golden_number * 0.618. (观察了room1,发现这样取的bot分最高)

      3)增加和修改了一些action, 主要是干扰数的值的确定,以及在预计到可以出大数干扰的时候,不干扰而只出调整后的小值(等价于预测到其他玩家会出大数)

    三、结果分析

    1. 比赛结果 :因为我的方法最后实践下来并不稳定,所以用了小伙伴的模型...最后的结果和我们的预想差不多。
    2. 评价策略 :主要是得分高低和稳定性两个方面。在有了模型之后,把程序放到room1和其他房间中,检验成果。为了看模型是否稳定,还要多次测试。
    3. 变更规则的影响: 如果增加了很多的参赛者,那么大数扰动的方法可能作用就不大了,可能要采取保守策略了;如果可以提交3个数字,策略总体一致,还是一个大数扰动,其他的数字去逼近。
    4. 合作伙伴: 非常感谢我的小伙伴,在我发现自己的模型不大行的时候,是他们carry了我,小组最后提交的模型也是他们的成果。
      其实我挺对不住队友的!首先我是插到他们组里,会让他们比赛分降低;然后在临近ddl之前,我一直没有主动联系他们(我目前还在外地...),等到了感觉自己的模型太一般之后才问了他们情况如何的。自己挺内疚的,算是一个教训,希望自己以后能把事情做漂亮一些。
  • 相关阅读:
    LVS安装配置
    Ansible自动化运维工具的使用
    DHCP中继配置
    简单爬虫
    zlib1.2.8 编译小记
    varnish 4.0编译安装小记
    imdisk命令行使用及配置
    How to say all the keyboard symbols in English and Chinese
    qwt6在Windows下Qt5的编译,安装,初步使用
    4MLinux7.0 服务器配置详解 别名TheSSS
  • 原文地址:https://www.cnblogs.com/impiga/p/11565537.html
Copyright © 2011-2022 走看看