当我阅读《人工智能(现代方法)》这本书时,我遇到了以下描述将n元约束满足问题转换为二元约束满足问题的方法的句子:
将n元约束满足问题转换为二元约束满足问题的另一种方法是双重图变换:创建一个新图,其中原图中的每个约束对应一个变量,原图中每对共享变量的约束对应一个二元约束。例如,如果原图的变量为{X, Y, Z},约束为⟨(X, Y, Z), C1⟩和⟨(X, Y), C2⟩,那么双重图将有变量{C1, C2},以及二元约束⟨(X, Y), R1⟩,其中(X, Y)是共享变量,R1是一个新关系,定义了共享变量之间的约束,如原C1和C2所指定的。
我对书中提供的例子不太理解,有人能用另一种方式解释一下吗?最好能提供一个具体的例子?谢谢 😀
回答:
假设你的问题有以下约束:
- C1,涉及x, y和z:
- x + y = z
- C2,涉及x和y:
- x < y
具有以下域:
- 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的第1个和第2个元素(x和y)必须分别等于c2的第1个和第2个元素”(实际上你可以将其分成两个更简单的约束)