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