【问题标题】:what kind of constraint solver should one use over sets of integers?应该在整数集上使用哪种约束求解器?
【发布时间】:2019-07-28 14:11:43
【问题描述】:

我迷失在各种可用的约束求解器的海洋中。我正在写一个数据库查询程序。

给定一个方程,其中项是一组不连续的整数,我的目标是简化方程,因为某些项的影响可能在结果集中完全重叠或完全不相交,因此可以丢弃。

示例:

({1, 2} ∪ {3, 4}) - {4, 6}

第一步可以简化为:

({1, 2} ∪ {3, 4}) - {4}

因为 {6} ⊄ ({1, 2} ∪ {3, 4}) 等

对于这样的问题可以使用什么样的求解器?我发现library(fd_sets) 似乎很合适。然而,ECLiPSE 并不是一个易于使用的平台。还有其他解决方案吗?

【问题讨论】:

  • 我认为这里没有太多要解决的问题。只是评估一个表达式。
  • @ErwinKalvelagen 好吧,输出变量将是不包含无用变量的最接近的表达式。它可能更多地涉及更多条款。当然,我可以通过逐个消除术语来搜索“à la Prolog”,但我认为在复杂表达式上使用专用求解器会快得多。

标签: math set logic constraints solver


【解决方案1】:
({1, 2} ∪ {3, 4}) - {4, 6}

不是方程(或约束),所以没有什么要解决的。所以你不需要求解器。它是一个(常数)表达式。我们可以很容易地评估这个表达式并打印结果。例如。在简单的 Python 中:

print({1,2}.union({3,4}).difference({4,6}))

会给

{1, 2, 3}

Python 知道集合,所以这很容易。要自动从({1, 2} ∪ {3, 4}) - {4, 6} 转到{1,2}.union({3,4}).difference({4,6}),您需要构建一个解析器。这不是很难做到(对于熟练的程序员)。如果您最喜欢的编程语言不了解集合,那么创建数据结构和函数来处理集合并不难。许多语言都支持集合(例如标准 C++ 库有集合)。

PS。要完整:Python 还允许中缀集运算符。例如:

print({1,2} | {3,4} - {4,6}) 

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多