如何使用双图转换将n-ary CSP转换为二进制CSP

时间:2013-10-09 00:57:12

标签: algorithm search artificial-intelligence constraints

当我读到这本书 - 人工智能(一种现代方法)时,我遇到了下面的句子,描述了将n-ary约束搜索问题转换为二进制问题的方法:

  

将n-ary CSP转换为二进制CSP的另一种方法是双图   转换:创建一个新图形,其中将有一个变量   对于原始图中的每个约束,以及一个二进制约束   对于共享的原始图中的每对约束   变量。例如,如果原始图形具有变量{X,Y,Z}   和约束⟨(X,Y,Z),C1⟩和⟨(X,Y),C2⟩然后是双图   会有变量{C1,C2}和二元约束⟨(X,Y),R1   ⟩,其中(X,Y)是共享变量,R1是新关系   它定义了共享变量之间的约束,如指定的那样   由原来的C1和C2。

我没有完全得到书中提供的例子,任何人都可以帮助以另一种方式解释它并且可能更好地提供一个具体的例子吗?谢谢:D

1 个答案:

答案 0 :(得分:13)

让我们说你的问题有以下限制:

  • C1,涉及x,y和z:
    • x + y = z
  • C2,涉及x和y:
    • x< ÿ

包含以下域名:

  • x :: [1,2,3]
  • y :: [1,2,3]
  • z :: [1,2,3]

作者说你需要再创建两个变量,每个变量一个。它们的定义如下:

  • c1 =< x,y,z>
  • c2 =< x,y>

c1和c2的域名被定义为不会违反C1和C2,即:

  • c1 :: [< 1,2,3>,< 2,1,3>,< 1,1,2>]
  • c2 :: [< 1,2>,< 2,3>,< 1,3>]

c1和c2将是​​双图的节点,但首先需要在它们之间定义约束,即R1:

  • R1:" c1(x和y)的第1和第2元素必须分别等于c2的第1和第2元素" (实际上你可以用两个更简单的约束来分割它)