Застереження, кероване конфліктом Навчання пояснення зворотного відстеження


9

На сторінці вікіпедії тут добре описується алгоритм CDCL (і, здається, знімки були зроблені зі слайдів, створених Шарадом Маліком у Принстоні). Однак, описуючи, як відкликати все, що йдеться, це "до відповідної точки". MiniSAT також використовує варіант алгоритму CDCL, тому я прочитав цей документ. Вони, як видається, говорять про те, що ви повинні відмовитися, поки вивчене застереження не стане одиничним застереженням. Це, безумовно, уточнення, але це не має для мене сенсу. Останнє завдання, безумовно, буде частиною зауваженого конфлікту, наскільки я можу сказати (можливо, я тут помиляюся?), Тож, коли відхилишся один крок, ти відразу зробиш вивчену одиницю пропозиції, останнє присвоєне значення перекинеться, і алгоритм буде виконуватись точно так само, як і DPLL, без зворотного відстеження. Крім того, сторінка вікіпедії не дотримується цього правила, вона відхиляє набагато далі, як здається бажаним.

Наскільки далеко слід відмовитися?

Відповіді:


7

Ось відповідний параграф з паперу MiniSAT:

Фаза прийняття рішення триватиме до тих пір, поки не будуть призначені будь-які всі змінні, і в цьому випадку ми маємо модель, або не відбувся конфлікт. У випадку конфліктів буде використано процедуру навчання та вироблено конфліктне застереження. Слід буде використовуватися для скасування рішення, один за одним, поки точно один з буквальних даних вивченого пункту не стане незв'язаним (всі вони є в точці конфлікту). За конструкцією, конфліктне застереження не може переходити безпосередньо від конфлікту до пункту з двома або більше незв'язаними буквами. Якщо пункт залишається одиничним для декількох рівнів рішення, вигідним буде обрати [sic] найнижчий рівень (іменований резервним підключенням або нехронологічним зворотним відстеженням ).False

Точка, яку ви, здається, пропустили, - це те, що коли засвоєний пункт стає одиничним через скасовані завдання (зворотний трек), вирішувач не зупиняється на цьому. Перед цим можуть бути інші завдання, які не мають жодного стосунку до поточного конфлікту, і експериментально було показано, що краще також скасувати ці непов'язані завдання. Таким чином, розв'язувач продовжує скасовувати завдання, поки наступне скасування не зробить вивчене застереження неодиничним, тобто воно буде містити більше однієї непризначеної змінної. Тут вирішувач зупиняється, запускає розповсюдження одиниці, щоб задовольнити пункт одиниці, а потім поновлює пошук, призначаючи змінні зазвичай.

Зауважте також, що змінна поточного рішення може бути відсутнім у вивченому пункті. Загальна стратегія для вирішувача CDCL полягає в пошуку першої унікальної точки імплікації та використанні цієї змінної у вивченому пункті. У деяких випадках перший UIP є змінною рішення, але часто це не так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.