如何将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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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