【问题标题】:Constraint Satisfaction Problems with solvers VS Systematic Search求解器与系统搜索的约束满足问题
【发布时间】:2019-06-03 01:15:30
【问题描述】:

我们必须解决一个难题,我们需要针对一个系统检查来自多个来源的大量复杂规则,以确定系统是否满足这些规则,或者应该如何改变它来满足这些规则。

我们最初开始使用约束满足问题算法(使用Choco)来尝试解决它,但由于规则和变量的数量会比预期的少,我们希望在数据库上构建所有可能配置的列表并使用基于规则的多个请求来过滤此列表并以这种方式找到解决方案。

与对合理数量的规则和变量使用 CSP 求解器算法相比,进行系统搜索是否存在限制或缺点?它会显着影响性能吗?它会减少我们可以实施的约束类型吗?

举例

你必须想象它有更多的变量、更大的定义域(但总是离散的)和更多的规则(以及一些更复杂的),而不是将问题描述为:

x in (1,6,9)
y in (2,7)
z in (1,6)
y = x + 1
z = x if x < 5 OR z = y if x > 5

然后将它提供给求解器,我们将构建一个表:

X | Y | Z
1   2   1
6   2   1
9   2   1
1   7   1
6   7   1
9   7   1
1   2   6
6   2   6
9   2   6
1   7   6
6   7   6
9   7   6

并使用类似的查询(这只是一个帮助理解的示例,实际上我们会针对语义数据库使用 SPARQL):

SELECT X, Y, Z WHERE Y = X + 1 
INTERSECT 
SELECT X, Y, Z WHERE (Z = X AND X < 5) OR (Z = Y AND X > 5)

【问题讨论】:

  • On topichow to ask... the perfect question 在此处申请。您的问题没有详细说明,其他人无法评估替代方案。
  • 也许您可以通过一个说明算法问题的玩具示例来澄清这一点。我们可以在心理上将四因素问题外推到更大的空间。展示每种解决方案如何适用于您的小问题。
  • 重新表述并添加示例以帮助理解问题。
  • 好多了;谢谢。现在,对该领域更熟悉的人可以回答这个问题。
  • 为什么要将所有配置写入数据库并查询,而不是仅生成所有配置并根据约束检查它们?

标签: algorithm search complexity-theory constraint-programming


【解决方案1】:

CSP 允许您将确定性生成值(通过规则)与启发式搜索相结合。当您针对您的问题定制这两者时,美丽就会发生。规则只是其中的一部分。同样重要的是搜索算法/生成器的选择。您可以剔除搜索空间的很多

虽然我无法预测您的 SQL 解决方案的性能,但我必须说它让我觉得有些迂回。如果您的规则发生变化,将会出现一个特定问题——您可能会发现必须从头开始。此外,RDBMS 完全生成所有可能爆炸的子查询。

我建议使用 CSP 和 SQL 实现一个工作原型,以满足您的需求的一个简单子集。然后你会很好地感觉到什么有效,什么无效。一定要考虑长期维护。

完全免责声明:我与 CSP 的最后一次接触是几十年前在大学攻读硕士学位的时候(我实现了一个 CSP 搜索引擎,与 choco 不同,当然更初级,并对该主题进行了一些研究)。但从那时起,该领域肯定会发生变化。

【讨论】:

  • @NyamiouTheGaleanthrope:感谢您的慷慨捐赠!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多