3

我正在计划中运行求解器,并且在各种答案集之间我得到了我认为是警告(因为它不会终止执行),它说以下内容:

Progression : [2;8] (Error: 3)
Progression : [3;8] (Error: 1.66667)
Progression : [4;8] (Error: 1)
Progression : [5;8] (Error: 0.6)
Progression : [6;8] (Error: 0.333333)
Progression : [7;8] (Error: 0.142857)

我找不到任何关于该警告的参考,所以我希望有人知道它们的意思。

4

2 回答 2

3

这些行提供了有关当前优化状态的有价值信息:在您的示例中,求解器找到了成本为 8 的解决方案,但尚未证明该解决方案是最优的,但它正在证明它的路上:它已经证明成本至少为 2、3、4、...、7。因此,如果您在最后一行之后中止求解器,则可以保证您找到的解决方案是最优的或与最优相差 1。

此信息可以帮助您在最优性和求解器时间之间做出折衷。如果您的次优结果足够接近最佳值,那么您通常在应用程序中会很好。

于 2017-12-28T13:40:40.940 回答
2

在 clasp 源https://github.com/potassco/clasp/blob/master/src/clasp_output.cpp中快速搜索显示该方法TextOutput::printUnsat负责这些消息。

基类中的注释显示为Output::printUnsat

//! Called on unsat - may print new info.

具体来说,TextOutput::printUnsat评论是

//! Prints the given lower bound and upper bounds that are known to be optimal.
于 2017-12-28T06:27:30.143 回答