返回列表

2nd place solution write-up,Team "Under a penny", ebouteillon part 🔥

406. Conways Reverse Game of Life 2020 | conways-reverse-game-of-life-2020

开始: 2020-09-01 结束: 2020-11-30 数学与计算 数据算法赛
第二名解决方案分享,团队 "Under a penny",ebouteillon 部分 🔥

第二名解决方案分享,团队 "Under a penny",ebouteillon 部分 🔥

作者: Eric Bouteillon | 发布时间: 2020-12-01

首先,我要感谢我的队友 @knstqq@maximim@robertjohncannell(按字母顺序排列)提供的想法和付出的努力。能和你们一起工作真是太棒了!

在这次比赛中,我尝试了很多不同的方法。以下是效果最好的几种:

使用 PyTorch 实现的遗传算法 🔥

我查阅了 Kaggle 上现有的使用遗传算法的 Notebook,但发现没有一个使用了 GPU 加速(如果我错了,漏掉了哪一个,我很抱歉)。所以我实现了一个。

从头开始使用 PyTorch 实现这个遗传算法很难,但我在这个过程中学到了很多关于遗传算法的知识(初衷),也学到了 PyTorch 以及如何使用 NVIDIA Nsight 进行优化。

这个解决方案在比赛中表现非常好,仅靠下面的 Notebook 就进入了排行榜前十名。这种新方法帮助我们团队 "Under a Penny" 改进了最终解决方案。

GPU 上的遗传算法 Notebook:Top 10 with First Genetic Algorithm on GPU! 🔥(版本 1 运行 9 小时,得分 0.0450)

用于完美求解的 Kissat SAT 求解器

Kaggle 的康威生命游戏逆向挑战 2020 可以看作是一个布尔可满足性问题。我使用了 Kissat SAT 求解器,它在 SAT 竞赛 2020 的主赛道和不可满足实例中均获得了第一名。

棘手的部分可能是将问题转换为高效的 CNF 形式,但实际上使用 SymPy 做起来相当容易。

下面的 Notebook 在 25 分钟内解决了 9532 个谜题(delta=1):Perfect Solve of Puzzles using a SAT solver

这种方法的缺点是,解决某些谜题可能需要很——长时间,而且 delta 越大,难度越高。

Google OR-tools 约束求解器

也可以将问题表述为约束问题。您可以在下文的“Notebooks 奖项尝试”部分找到使用 OR-tool 的迭代方法。

迭代方法包括用 delta = 1 解决谜题,然后再用 delta = 1 解决这个解,直到我们进行了 delta 次为止。这比端到端解决问题要快得多,但并不总能找到解。

Notebooks 奖项尝试

本次比赛设有“Notebooks 奖项”:

得分最高的 Kaggle Notebook(由排行榜提交分数决定)。要获得此奖项资格,Notebook 必须在其内部完成全部计算。

我对此的解决方案是在 1 个 GPU + 1 个 CPU 上运行遗传算法(即使所有工作都在 GPU 上,PyTorch 也会 100% 使用一个 CPU),并在 1 个 CPU 上使用 OR-tool 运行迭代解决方案。

这种方法的缺点是:GPU Notebook 只有 2 小时和 2 个 CPU,而 CPU Notebook 有 9 小时和 4 个 CPU。

2 小时得分:0.05353 GA on GPU + OR-tools on CPU2
9 小时得分:0.0433(由于代码限制无法提交)

解决方案集成

解决方案的集成非常简单。我们计算为谜题找到的每个解决方案的分数,然后取分数最低的解决方案。

团队合作

@knstqq@maximim@robertjohncannell 组队是一次很棒的经历,大家都保持了团队的积极性,而且他们对这个问题的解决方案真的很棒。最后,合并在一起确实是获得这个名次的秘诀。

最后的话

队名来源于团队只有 @maximim 和我的时候。我们的目标是分数低于 .01,我们称之为 "a penny"(一分钱)。

同比赛其他方案