472. Santa 2021 - The Merry Movie Montage | santa-2021
这是一个非常有趣的问题,它既可以通过对其对称性的数学洞察来解决,也可以通过计算机的暴力计算来解决,或者更理想的是通过两者的结合来解决,这非常有帮助。
像许多 Kaggle 比赛一样,花时间阅读论坛、研究笔记本并尝试调整自己的代码,会获得知识和理解的 nuggets(真知灼见),从而解锁游戏的更高层次。
The Santa 2021 TSP Baseline - [2500] 作者:@cdeotte
这是一个非常有帮助的入门起点,但对于比赛来说,其方法的上限大约在 2480 多分。它基于 5906 超排列中排列出现的顺序来定义三个子串,然后使用 LKH TSP 求解器分别最小化每个子串。使用这种方法,我们在子串之间移动排列的灵活性非常有限。
这个笔记本帮助我迈出了关键的一步,因为它将问题表示为 LKH 中的彩色 TSP(Coloured TSP),并添加了一些代码来更改目标函数,使其现在最小化任何子串的最大长度。这显然是正确的最小化目标,但修补目标所需的编码超出了我的能力范围。
然而,此时我仍然基于 5906 超排列的顺序将其拆分为三组排列。查看我当时在排行榜(LB)上的分数以及 2440 分以下与 2480 分以上分数之间的差距,似乎需要某种“魔法”才能从 2480 分跃升至 2440 分。
这似乎可能与将排列分配给子串的方式有关,讨论区中这个有点晦涩的帖子进一步表明,这可能与递归生成的 5913 超排列有关,它可能比更短的 5906、5907 或 5908 更具备对称性相关的属性。然而,我自己的努力并未能以神奇的方式拆分这些超排列。
这个谜题的答案出现在以下笔记本中:
Mathematic laws about super permutation 作者:@3579628328
该笔记本建议如何以 3 重对称的方式拆分 5913;以及
Santa Baseline - 2481 作者:@ks2019
这在实践中实现了这一点,给出了不含通配符长度为 2483(含通配符为 2481)的子串,释放了 MinMax CTSP 的潜力。我从那里开始的第一次最小化给出了一个当时对我来说惊人好的分数 2457,这种方法持续了大约一周,每天大约进行 7 次 9 小时的最小化,然后卡在不含通配符的长度 2441_2440_2440。随后两次稍有不同的最小化协议重复后,分别卡在 2442_2442_2441 和 2441_2440_2440。很有兴趣知道是否有人通过 LKH 中的 MinMax CTSP 达到了 2440_2440_2440。
至此,我正在使用:
Wildcard Postprocessing Using Dynamic Programming 作者:@yosshi999
来添加通配符。这将分数降低了 2 分,但我卡在了 2439 分。是时候组队了。
与 Rob (@robikscube)、Daniel (
同比赛其他方案