Введение

В алгоритмах с возвратом (backtracking), "look ahead" – это общий термин для подпрограммы, которая пытается предвидеть последствия выбора разветвляющейся переменной для оценки одного из её возможных значений. Две основные цели "look ahead" – выбрать следующую переменную для оценки и определить порядок присваивания ей значений.

Удовлетворение ограничений

В общей задаче поиска решения при ограничениях каждая переменная может принимать значение из своей области допустимых значений. Алгоритм с возвратом, следовательно, итеративно выбирает переменную и проверяет каждое из её возможных значений; для каждого значения алгоритм запускается рекурсивно. Метод "look ahead" используется для оценки последствий выбора конкретной переменной или для определения порядка присвоения ей значений.

Техники прогнозирования

Простейший метод оценки эффекта конкретного назначения переменной называется форвард-чекингом (forward checking). При наличии текущего частичного решения и кандидата на назначение для оценки, он проверяет, может ли другая переменная принять согласованное значение. Иными словами, сначала текущее частичное решение расширяется предварительным значением для рассматриваемой переменной; затем рассматривается каждая другая переменная, которая ещё не назначена, и проверяется, существует ли такое назначение, которое согласуется с расширенным частичным решением. В более общем плане, форвард-чекинг определяет значения для переменных, которые согласуются с расширенным назначением. Более затратной по времени, но потенциально дающей лучшие результаты, техникой прогноза является обеспечение согласованности дуг (arc consistency). А именно, при заданном частичном решении, расширенном значением для новой переменной, обеспечивается согласованность дуг для всех неназначенных переменных. Другими словами, для любых неназначенных переменных удаляются значения, которые не могут быть согласованно расширены на другую переменную. Различие между форвард-чекингом и обеспечением согласованности дуг заключается в том, что первый проверяет согласованность только одной неназначенной переменной за раз, в то время как второй проверяет пары неназначенных переменных на взаимную согласованность. Наиболее распространенным способом использования прогноза для решения задач удовлетворения ограничений является алгоритм поддержания согласованности дуг (MAC). Два других метода, использующих согласованность дуг, – полный и частичный прогноз. Они обеспечивают согласованность дуг, но не для каждой пары переменных. В частности, полный прогноз рассматривает каждую пару неназначенных переменных и обеспечивает согласованность дуг между ними. Это отличается от обеспечения глобальной согласованности дуг, которое может потребовать повторного рассмотрения пары переменных более одного раза. Вместо этого, как только полный прогноз обеспечил согласованность дуг между парой переменных, эта пара больше не рассматривается. Частичный прогноз аналогичен, но рассматривается заданный порядок переменных, и согласованность дуг обеспечивается только один раз для каждой пары. Прогноз, основанный на согласованности дуг, также может быть расширен для работы с согласованностью путей (path consistency) и общей i-согласованностью (i-consistency) или реляционной согласованностью дуг (relational arc consistency).