688. Santa 2025 - Christmas Tree Packing Challenge | santa-2025
祝贺获奖者!!
Kaggle 团队做得好。这是一次令人兴奋的经历。谢谢!
=========
我想分享给我带来最大收益的方法。
该方法的主要思想是使用 sparrow,基于良好的 n-1 棵树 排列(packing)创建一个良好的 n 棵树 排列,同时 不过度干扰良好的 n-1 棵树排列。为此,以下方法对我最有效:
下图是放松引入的松弛空间的放大视图。左子图是 182 棵树排列。右子图是同样的排列通过 1.0356 的因子放松后的结果。观察右侧子图中树之间的松弛/间隙。
下面的视频捕捉了 sparrow 解决重叠并偷偷放入额外树的(美丽🤩)过程。向 sparrow 的作者(Jeroen Gardeyn 及其同事)致敬!!
在视频中显示的示例中,使用 182 棵树排列来实现 183 棵树排列。182 棵树排列的边长为 7.7497。通过使用 1.0356 的因子进行放松,边长变为 8.0259。在视频的第一帧中,右下角红点处有两棵重叠的树。其中一棵是 182 棵树排列中最右下角的树,另一棵是正好放置在该树上的额外树。运行 sparrow 70 秒解决了重叠问题,额外树被成功放入,得到边长 = 7.9237 的 183 棵树排列(如视频最后一帧所示)。
我将上述方法与多起点(multi-start)和筛选(culling)混合使用,通过使用不同的 sparrow 种子和不同的放松因子。这让我为给定的 n 收集了一批配置。例如,以下是从 182 棵树排列获得的 183 棵树排列的三种配置。
(注意并非所有起点都能解决重叠问题。那些未能解决重叠问题的起点会被早期筛选掉)。
最后,我使用 sa_fast_v2 和 eazy 压缩了上述获得的前几个排列。感谢 sa_fast_v2 和 eazy 的作者!例如,sa_fast_v2 将上述 183 棵树排列从边长 = 7.9237 压缩到 7.7792,如下面的图片所示。
上述方法为我提供了大多数 n > 60 的最佳排列。
=========
我的提交 csv 文件 attached 在下方的项目文件中。
最终提交的图片位于下方项目链接的数据集中。