【发布时间】:2017-05-12 12:52:39
【问题描述】:
在 Haskell 或其他一些函数式编程语言中,您将如何实现启发式搜索?
以搜索空间九拼图为例,它是一个 3x3 的网格,有 8 个瓷砖和 1 个孔,您将瓷砖移动到孔中,直到您正确组装了一张图片。启发式是“曼哈顿启发式”,它评估棋盘位置,将每个瓷砖与其目标位置的距离相加,将水平方格数加上每个瓷砖需要移动到的垂直方格数作为距离正确的位置。
我一直在阅读 John Hughes 关于漂亮打印的论文,因为我知道漂亮的打印机会回溯以找到更好的解决方案。我正在尝试了解如何按照这些思路概括启发式搜索。
===
请注意,我在这里的最终目标不是为 9-puzzle 编写求解器,而是学习一些用 FP 语言编写高效启发式搜索的通用技术。我也有兴趣了解是否有代码可以在更广泛的此类问题中泛化和重用,而不是解决任何特定问题。
例如,搜索空间可以通过将状态映射到状态列表的函数以及描述一种状态如何转换到另一种状态的一些“操作”来表征。还可以有一个目标函数,将 State 映射到 Bool,指示何时达到目标 State。当然,启发式函数将状态映射到反映估计得分的数字。搜索的其他描述是可能的。
【问题讨论】:
标签: haskell search functional-programming heuristics