【问题标题】:Solving a puzzle using search algorithms使用搜索算法解决难题
【发布时间】:2015-12-04 06:20:25
【问题描述】:

几天前我遇到了一个难题。用手很容易解决。但我试图建立一个算法来解决它。但我不知道我应该如何进行。

在这里您可以看到我必须连接所有彩色点对。例如,我需要将黄点连接到另一个黄点,将绿色连接到其他绿色,将蓝色连接到蓝色等等。

这是一个应该如何解决的示例。如果描述不清楚。

所以你可以看到我将黄点与另一个黄点连接起来。蓝色与另一种蓝色。但这会导致一个问题。如您所见,我已经挡住了浅绿色的路径。我希望你能明白。

所以我想解决它。蛮力方法会起作用,但需要很长时间,我对此不感兴趣。我尝试实现广度优先搜索、深度优先搜索和 Dijkstra 算法。但我认为在这种情况下他们不会很好。如果我错了,请纠正我。 A* 搜索可能有效,但启发式方法是什么?

谁能给我一些关于如何解决问题的直觉?

【问题讨论】:

  • 如我所见,您示例的任何解决方案都将包含阻塞对。这种情况下算法应该怎么做?
  • 这种类型的谜题称为 Numberlink 或 Arukone。根据Wikipedia,问题是NP-complete,所以在一般情况下,你不会比蛮力做得更好。尽管某些算法可能在特定安排上做得更好。如果你search,你可以找到一些求解器。
  • A* 会比 BFS 快很多。你需要找出一个启发式。一种对有效解决方案进行评分的方法。这样 A* 就可以朝着最好的分数前进。您需要使用一个状态对象来跟踪当前的板状态。每一步都将是一个由启发式评分的新状态
  • 这也是Android上的Flow Free游戏。它使用相对较小的棋盘尺寸,大约12x12,所以通过一些优化,蛮力应该运行得很快。
  • 其实interjay在cmets上说的都是真的。这是一个NP完全问题。我不知道启发式是否可行。 A* 会快很多。但是计算启发式将是困难的。你能给我一些直觉吗?

标签: algorithm search a-star


【解决方案1】:

遗传算法可能是获得解决方案的合适方法。 适应度函数和交叉必须专门针对该问题量身定制。

染色体:

  • 9x9 二维整数数组(基因)
  • 您的 18 个独特的颜色将静态设置为 512|1、512|2、512|4、512|8、512|16、512|32、512|64、512|128、512|256,代表9种独特的颜色; 512 (2^9) 将是表示它们为静态/不可更改基因的标志。
  • 彩色连接方块将有 2^0-2^8 个值,这些基因可以改变和组合,值为 3 (011b) 表示 2 种颜色(1 和 2)共享同一个方块。

健身功能在我的头顶

  • 具有 1 种唯一颜色的空间为 +8、2 种颜色 +6、3 种颜色 +4、4 种颜色 +2、5 种颜色 +0、6 种颜色 -2、7 种颜色 -4、8 种颜色 -6、所有 9 种颜色-8
  • 与匹配的彩色静态空间相连的空间(左、右、上、下)为 +9
  • 在 1 个方向 +4、2 个方向 +3、3 个方向 +2、4 个方向 +1 上与匹配的彩色空间相连的空间

变异

  • 随机颜色位 (1

交叉/育种在我的头顶

  • 复制您的 2 条候选染色体
  • 清除拷贝中包含 5 种或更多重叠颜色的基因
  • 对两条染色体进行逻辑或运算得到结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2023-04-01
    相关资源
    最近更新 更多