Что делает аннотация поиска влияния в MiniZinc?

В MiniZinc есть возможность использовать влияние поисковых аннотаций, на официальном сайте это объясняется следующим образом:

аннотация воздействие

Выберите переменную с наибольшим влиянием на данный момент во время поиска

Что это значит на практике? Какое самое сильное воздействие? Как это рассчитывается?


person Atonic    schedule 04.04.2018    source источник


Ответы (1)


Чтобы понять выбор переменной на основе impact, вы должны понять first_fail. В программировании с ограничениями мы обычно хотим сначала решить самую сложную подзадачу, быстро терпя неудачу, если решение не может быть найдено. Проблема с first_fail заключается в том, что он не принимает во внимание количество ограничений, в которых участвует переменная, больше будет означать, что решение для переменной «жестче», или влияние, которое выбор на переменную оказал на другие части. дерева поиска.

Кстати, dom_w_deg можно рассматривать как компромисс между first_fail и impact, при котором ограничения учитываются, а предыдущее решение - нет.

Предполагается, что выбор переменной impact является улучшением по сравнению с first_fail, где учитываются не только размеры домена, но также ограничения, в которые он вовлечен, и то, какое «влияние» оказали исторические выборы. Переменной с наибольшим влиянием, как ожидается, будет труднее всего присвоить правильное значение с учетом всей этой информации.

Как вы видели, MiniZinc не дает точной спецификации того, как должен быть сделан выбор переменной. Разработчик решателя должен выбрать эвристику, подходящую для решателя. Обратите внимание, что было бы трудно предоставить точное эвристическое руководство, поскольку оно будет сильно зависеть от того, как решатель отслеживает свои переменные и ограничения.

Для получения идей о возможных реализациях эвристики, основанной на воздействии, я бы посоветовал прочитать статью «Об эффективности эвристики, основанной на воздействии» Марко Коррейи и Педро Бараоны. Вы также можете проверить свой конкретный решатель MiniZinc/FlatZinc на предмет реализации эвристики.

person Dekker1    schedule 04.04.2018
comment
Вы говорите, что dom_w_deg — это компромисс между first_fail и impact, и что он учитывает ограничения, но не прошлые решения. dom_w_deg описывается как Выберите переменную с наибольшим доменом, разделенную на количество подключенных ограничений, взвешенных по тому, как часто они вызывали сбой. Так что мне кажется, что это то, как вы описываете влияние, за исключением того, что они выбирают самый большой домен или домен с небольшим количеством ограничений. - person Atonic; 23.04.2018
comment
@Atonic, разница в том, что dom_w_deg учитывает только количество ограничений, чем больше, тем лучше, но на самом деле не учитывает, насколько эффективны эти ограничения. Если ограничение никогда ничего не обрезает, то impact будет рассматривать его как несуществующее (наоборот, если оно очень эффективно), но dom_w_deg все равно будет рассматривать его так же, как и любое другое ограничение. - person Dekker1; 24.04.2018