383. Abstraction and Reasoning Challenge | abstraction-and-reasoning-challenge
首先,恭喜 @icecuber。在这次比赛中以个人身份获得 0.79 的分数真的非常令人印象深刻。同时,非常感谢 @fchollet 举办这次比赛,让我们面对这个非常有趣的挑战。
在这里,我想简要讨论一下 @rguigocoro 和我开发的算法。我认为它在私有测试集上的得分是 0.87 或 0.88。排行榜(LB)上 0.81 的最终得分是与 @yujiariyasu 合并团队的结果,他在解决许多任务方面做得非常出色,而且幸运的是我们的任务几乎没有重叠。
对于每个任务,我们的算法遵循以下步骤:
Task 类的对象。在此步骤中,完成所有预处理:检查矩阵形状、公共颜色、对称性等。有 6 个核心类用于存储有关预处理的信息:Task、Sample、Matrix、Shape、Grid 和 Frontier 类。Task 类对象中的属性。尝试了许多不同类型的函数,例如 "moveShapes"、"replicateShapes"、"extendColor" 或 "pixelwiseXorInGridSubmatrices",仅举几例。完整的函数列表可以在下面链接的 GitHub 存储库中找到。如果任何函数生成的候选解得分优于当前 3 个最佳候选解中的任何一个,我们将这个新候选解包含在我们的最佳候选解列表中,并移除最差的一个。得分简单地通过在训练样本中执行导致生成该候选解的函数,并检查有多少像素不正确来计算。因此,0 分是可能的最佳分数。建立这整个流程是相当艰苦的工作,前 1.5 个月左右一直无法低于 0.99,这有点令人沮丧。但最终这证明效果相当不错。我们在算法中尝试了许多不同的函数,我们并不真正知道哪些函数解决了私有测试集的任务,因为我们的许多 LB 改进来自于适用于许多不同类型任务的通用预处理步骤。
所有代码,包括在排行榜上得分 0.813 的版本,都在 这个 GitHub 存储库 中。