Clingo - ошибка/предупреждение прогресса

Я запускаю решатель по планированию, и между различными наборами ответов я получаю то, что, по моему мнению, является предупреждением (поскольку оно не прерывает выполнение), в котором говорится следующее:

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)

Я не могу найти никаких ссылок на эти предупреждения, поэтому я надеюсь, что кто-то знает, что они означают.


person valent0ne    schedule 27.12.2017    source источник


Ответы (2)


Эти строки дают ценную информацию о текущем состоянии оптимизации: в вашем примере решатель нашел решение стоимостью 8 и еще не доказал, что решение является оптимальным, но находится на пути к тому, чтобы это доказать: он доказал, что стоимость не менее 2, 3, 4, ..., 7. Поэтому, если вы прервете решатель после последней строки, у вас есть гарантия, что найденное вами решение либо оптимально, либо на 1 от оптимального.

Эта информация может помочь вам сделать компромисс между оптимальностью и временем решателя. Часто у вас все в порядке с приложениями, если вы получаете субоптимальные результаты, достаточно близкие к оптимальным.

person peschü    schedule 28.12.2017

Быстрый поиск в источнике застежки 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.
person tkrennwa    schedule 28.12.2017