如何使用Prolog CLP FD进行路径限制?

时间:2016-12-18 14:59:58

标签: prolog puzzle clpfd clp

我正在尝试通过Prolog CLP FD使用限制编程来解决提出的难题。这个难题包含下一个简单的规则:

Yin Yang puzzle description

现在,在我的代码中,我已经涵盖了2x2网格的限制,并且一个必须连接到至少一个相同颜色的。

问题是我无法找到一种方法来建立限制,说明一件必须有一个PATH(连接)到所有其他相同颜色的部分,而不通过相反颜色的部分,所以我得到这种输出:

aecho hi\n

其中1s并非全部相互连接。

如何在CLP FD中编写这种图形限制?

编辑:我正在使用SICStus Prolog。

2 个答案:

答案 0 :(得分:2)

改写你的情况,以便我们能够更清楚地思考它:

  1. 您已经可以生成答案了
  2. 答案目前过于笼统
  3. 要使您的程序更具体,您必须在您生成的某个答案中找到当前违反的条件,但必须保持在每个解决方案中,然后用约束表达这个条件。

    例如,再考虑一下你的情况:

    0 0 0 0
    0 1 0 1
    0 1 0 1
    0 1 0 1
    

    这里违反了哪些条件?显然,1件不在路径上。但用CLP(FD)描述一条完整的路径是非常繁琐的,因为这显然是从考试或家庭作业问题中得出的,这个想法表明有一个简单的局部标准来表达所需条件

    “本地”,我的意思是你只需要考虑几个邻居而不是整个董事会。

    所以,再考虑1件。显然,在这个答案中,每个1件都有一个 1的邻居。还有什么?每个1件都有 2 个邻居吗?目前没有,不是。 应该每个1件还有2个也是1的邻居吗?如果没有,可以接受多少例外?

    如果你想到这些条件,你肯定会得到一个很好的解决方案。

    一个提示:有时具体化约束在此类任务中很有用。这意味着您可以说:B #<==> (X #= Y),并让B表示 X #= Y是否成立。请注意,在这种情况下您甚至可能不需要这样做。

答案 1 :(得分:0)

你们俩最后解决了这个问题吗?

我对这个问题很感兴趣,想看看代码,如果存在的话。

我认为circuit / 1无法帮助并希望看到解决此问题的用法。