422. Santa 2020 - The Candy Cane Contest | santa-2020
我们要感谢 Kaggle 团队在艰难的一年中举办了 Santa 2020 比赛。在这次比赛中,我有幸与 Alex、Nischay Dhankhar、Priyanshu Chaudhary 以及 Per von Soosten (PS) 组队。这是我们团队在排行榜上获得第14名的方案总结。我们的最佳智能体相对简单,只有大约100行代码(github 仓库)。
太长不看版 (TL;DR): 我们依赖于贝叶斯强盗方法以及一些启发式策略。
我们使用了一个对手池来评估我们的智能体。针对这些对手运行大量比赛让我们对智能体的表现有了大致的了解,但本地胜率的提高并不总能很好地转化为排行榜上的成绩。我们的对手池包括一些我们自己的智能体和一些来自公开笔记本的智能体:
感谢 Lindada焱焱焱、xhlulu 和 Ilia Larchenko 公开分享这些笔记本。
我们最终提交方案的基本逻辑是维护一组分布,以反映我们对每个摇臂当前奖励概率的了解。起初,这些分布被初始化为均匀先验。每当我们得到上一次拉动的结果时,我们就会对相应的分布进行贝叶斯更新,以反映上一次拉动的结果。这是处理多臂赌博机问题的经典思路。
我们基于贝叶斯 UCB 算法的简化变体来决定拉动哪个新摇臂。我们通过将相应分布的均值和标准差相加,得到每个摇臂奖励概率的乐观估计,然后选择估计值最大的摇臂。游戏的一个重要部分是判断对手何时发现了一个高奖励概率的摇臂,并在对手利用该摇臂导致概率大幅下降之前采取行动。我们试图通过在计算包含均值和标准差的估计值之前,对分布应用一些临时的贝叶斯更新来整合这些信息。具体来说:
我们的本地模拟表明,最优策略绝不会拉动奖励概率低于 0.22 的摇臂。因此,对于真实估计值(没有任何临时更新)低于 0.25 的摇臂,我们停止应用临时更新。这确保了我们不会跟随对手去那些我们已经知道很差的摇臂。
原则上,分布在每次拉动摇臂后也应反映奖励概率的衰减。然而,我们注意到那些不利用对手动作来衰减估计值的智能体表现得出奇地好。一种解释是,不衰减会鼓励智能体利用对手发现的好机器,这在游戏早期尤为重要。另一方面,在游戏接近尾声时,拥有正确的阈值估计很重要。我们试图两全其美,通过对这两种估计(有/无对手衰减)进行加权平均,在游戏早期倾向于未衰减的估计,在游戏后期倾向于衰减后的估计。
最后,有些对手动作非常能说明他们拉动的结果,因此我们据此对分布进行了一些