Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Применение метода CLP для поддержки конечных областей определения - CLP(FD)




Система CLP, предназначенная для работы с конечными областями определения, реализована на основе некоторых специальных механизмов. Их работа будет показа­на а настоящем разделе на типичных примерах с использованием синтаксиса и неко­торых предикатов из библиотеки CLP(FD) версии SICStus Prolog. В данном разделе рассматривается лишь небольшое подмножество этих предикатов, которое требуется для решения приведенных здесь примеров.

В качестве областей определения переменных будут использоваться множества целых чисел. Для указания области определения переменной применяется предикат in/2, что записывается следующим образом: х in Set

В данном случае Set может быть одним из следующих.

• (lntegerl, Integer2,,,. }, Множество заданных целых чисел.

• Terml,.Term2. Множество целых чисел между Terml итегт2.

• Setl \/ Set2. Объединение множеств Set 1 и Set2.

• Setl A Set2. Пересечение множеств Setl и Set2.

\Setl. Дополнение множества Setl.
Арифметические ограничения имеют следующую форму:

Expl Relation ExP2

где Expl и Ехр2 - арифметические выражения, a Relation может представлять со­бой одно из следующих.

• #=. Равно.

• #\=. Не равно.

• #<. Меньше.

• #>. Больше.

• #=<, Меньше или равно.

• #>=. Больше или равно.

В качестве примера рассмотрим следующие вопросы:

?- X in 1..5, Y in 0. Л,

X #< Y, Z #= X+Y+1.

X in l..3

Y in 2.. 4

Z in 3. .1

?- X in 1..5, X in \{4}.

X in (1..3) \/ {5}

Предикат indomair. (X) назначает с помощью перебора с возвратами возможные значения переменной X, например, следующим образом:

?- X in 1..3, indomainK). X - 1; X = 2; 5С = 3

Ниже показаны некоторые полезные предикаты, которые определены на списках переменных.

• domain! L, Min, Max]. Этот предикат означает, что все переменные в списке
L имеют области определения Min..Max,


Глава 14. Логическое программирование в ограничениях



• alldiff etent { L). Этот предикат означает, что все переменные в списке В
должны иметь разные значения.

• labeling(Options, L). Этот предикат вырабатывает возможные конкрет­
ные значения переменных в списке:_. Параметр Options представляет собой
список опций, касающихся того порядка, в каком осуществляется разметка
("labelling"; отсюда и имя предиката) переменных в списке L. Если параметр'
Options = [ ], то по умолчанию переменные размечаются слева направо; при'
этом возможные значения берутся из списка один за другим, от меньшего к
большему. Эта простейшая стратегия разметки является подходящей для всех'
примеров настоящей главы, хотя она не всегда оказывается наиболее эффек-J
тивной. Ниже приведены некоторые примеры.

?- domain ([X, Y], 1, 2), labeling{ [], [X,Y])

Х-1, У-1;

Х-1, Y-2;

Х-2, Y=l;

Х=2, Y=2

1, 2), all_different t L), labeling; [], L).

?- L - IX,Y], domain! L,

L- [1,2], X - 1, Y = 2;

L = [2, 1], X = 2, Y = 1

С помощью этих примитивов можно легко решать числовые ребусы. Рассмотрим' следующую задачу:

DONALD + GERALD

ROBERT

Каждая буква в приведенном выше ребусе должна быть заменена отличной от других десятичной цифрой таким образом, чтобы эти цифры составляли правильное арифметическое выражение. В листинге 14.4 показана программа CLP(FD) для реше­ния этой задачи. Ниже приведен запрос к этой программе.

?- solve [ N1, N2, КЗ). N1 = [5,2,6,4,8,5] N2 = [1,9,7,4,3,5] N3 = [1, 2, 3,9, 4,0]





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 492 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2236 - | 2194 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.