如何将n元约束满足问题转换为二元约束满足问题使用双重图变换

当我阅读《人工智能(现代方法)》这本书时,我遇到了以下描述将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个元素”(实际上你可以将其分成两个更简单的约束)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注