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)
Я не могу найти ссылки на эти предупреждения, поэтому я надеюсь, что кто-то знает, что они имеют в виду.
2 ответа
Эти строки дают ценную информацию о текущем состоянии оптимизации: в вашем примере решатель нашел решение по стоимости 8 и еще не доказал, что решение является оптимальным, но он находится на пути к его доказательству: он доказал, что стоимость составляет не менее 2, 3, 4, ..., 7. Поэтому, если вы прервете решатель после последней строки, у вас есть гарантия, что найденное вами решение является либо оптимальным, либо отклонением от оптимального на 1.
Эта информация может помочь вам сделать компромиссы между оптимальностью и временем решения. Часто у вас все хорошо в приложениях, если у вас есть неоптимальные результаты, которые достаточно близки к оптимальным.
Быстрый поиск в источнике застежки 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.