Оптимальное планирование с поэтапным программированием абдуктивной логики
Я хотел бы использовать абдуктивное логическое программирование, чтобы найти оптимальные планы. Исчерпывающий поиск в пространстве планов был бы непрактичным, но есть эвристика упорядочения, которая в обычном логическом программировании использовалась бы для представления фактов (наземных предикатов) в виде отсортированных списков. Сортированные списки, конечно, могут быть преобразованы в предикатную форму как факты (наземные предикаты) с предикатом упорядочения - и именно в этой форме я бы предпочел работать, учитывая, что выводимые значения являются предикатами.
В этой форме я хотел бы искать наземные предикаты с приоритетом, соответствующим их (соответствующим) предикатам (ам) упорядочения, и завершаться при первом решении, поскольку можно доказать, что любые другие решения будут менее оптимальными.
Я понимаю, что это потребует, по крайней мере, табличного логического программирования. К счастью, таблинг сейчас широко поддерживается. Тем не менее, это может также потребовать поэтапного таблирования, так как во время похищения утверждаются и отвлекаются отчисления, что ограничивает его XSB, AFAIK.
Как можно сказать движку Prolog использовать предикат порядка для поиска наземных терминов?
Кроме того, необходимы ли дополнительные таблицы, чтобы сделать это практичным?
2 ответа
Я и мой аспирант Ари Саптавиджая,ari.saptawijaya@gmail.com, публикуют материалы о похищении в виде стола, реализованные в XSB, и вы можете посмотреть наши публикации, доступные для скачивания на моей домашней странице (где вы можете найти наши последние бумага, принятая на ICLP'14). В настоящее время мы объединяем табличное похищение с табличным пошаговым обновлением текучих сред, где мы похищаем действия и постепенно распространяем их влияние на текучие среды. Одна общая концепция, которую мы используем, - это контекстное похищение, при котором похищение может использоваться из одного контекста в другой или отвергать худшие попытки решения. Проблемы там довольно технические и не поддаются объяснению здесь. Я предлагаю вам взглянуть на наши документы и вернуться к нам, увидев, как вы пытаетесь извлечь выгоду из нашей позиции. Я также советую вам посмотреть главы с таблицами в руководстве пользователя XSB, доступном на Sourceforge. Профессор Дэвид Уоррен, главный архитектор XSB Prolog, может вам тоже помочь. С наилучшими пожеланиями, Луис Мониз Перейра
Включение, по крайней мере в XSB, следует (по умолчанию) стратегии планирования, известной как локальное планирование. Это означает, что ответы на цель не возвращаются по мере их получения (как в обычном Прологе, без табуляции), а только после того, как таблица этой цели заполнена. По этой причине использование таблиц для возврата (и прекращения) только первого решения (как в вашем случае) может быть неуместным. Тем не менее, можно выбрать пакетное планирование табулирования XSB, поэтому ответы возвращаются, как только они получены. Но эту опцию можно установить только во время установки XSB, а не на уровне предиката.
В качестве альтернативы XSB предоставляет структуру данных try, которую можно использовать для хранения фактов. Его можно использовать для имитации пакетного планирования (возврата ответа сразу после его получения) при наличии локального планирования по умолчанию. Этот метод используется, например, при вычислении двойных правил по необходимости. Идея состоит в том, чтобы вычислять и хранить в дереве решения по одному в соответствии с заданным порядком.
Эти стратегии и их (не) преимущества, а также попытки рассматриваются в первом руководстве по XSB.
Что касается использования добавочного табулирования, это, безусловно, может быть полезно, если утвержденные или отозванные выводимые элементы влияют на другие табличные предикаты; последние предикаты должны затем постепенно добавляться в таблицы, а выводимые значения должны объявляться постепенно (не просто как динамические предикаты). Таким образом, предикаты tabled будут правильно отражать такие обновления.