Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


Ћистинг 14.4, –ешение числового ребуса в системе CLP(FD)




% ѕрограмма решени€ числового ребуса DONALD+GERALD=ROBERT средствами CLP(FD)

solve — [D, ќ,H,A, L,D], [G, E,R,A,L,D], [R, 0, ¬, E, R, √]):-

Vars =,0,N,A,L,G,E,R,B,T], % ѕеременные, необходимые дл€ решени€ задачи

domain [ Vars, 0, 9), all_dif ferent I Vars), 1000C0*D + 10000*0 + 100D00*G + 10000*E + 100000*R + 10000*0 + labeling £ [], Vars).
% %

¬се эти переменные обозначают- дес€тичные цифры ¬се эти переменные - разные

1000*N + 100*A + 10*L + D + 1000*R + 100*A + 10*L + D # = 1000*B + 1D0*E + 10*R + T,

¬ листинге 14.5 приведена программа CLP(FD) дл€ решени€ знакомой задачи с восемью ферз€ми. ¬ качестве указани€ по составлению подобных программ следует отметить, что обе программы (и дл€ решени€ числовых ребусов, и дл€ решени€ зада≠чи с восемью ферз€ми) имеют следующую основную структуру: вначале задаютс€ об≠ласти определени€ переменных, затем налагаютс€ определенные ограничени€ и в ко≠нечном итоге предикат разметки находит конкретные решени€. Ёто Ч обычна€ структура программ CLP(FD),



„асть II. ѕрименение €зыка Prolog в области искусственного интеллекта


Ћистинг 14,5. ѕрограмма CLP(FO) дл€ задачи с восемью ферз€ми

% ѕрограмма решени€ задачи с восемью ферз€ми средствами CLP(FD)

solution — Ys);- % Ys - список координат Y ферзей

Ys = [_,_,_,_, _г _,_,_], *  оличество ферзей равно 8

domain (Ys, 1, ¬), % ¬се координаты имеют область определени€ 1..8

all dif ferent! Ys), % ¬се координаты - разные, что позвол€ет

% предотвратить взаимные нападени€ по горизонтали

safe! Ys), % ќграничение, с помощью которого предотвращаютс€

% нападени€ по диагонали

labeling! [J, Ys). I Ќайти конкретные значени€ дл€ Ys

safe — ѕ) ■

safe! [Y | Ys]):-

no attack (Y, Ys, 1), 4 1 - рассто€ние по горизонтали между ферзем Y

% и ферз€ми из списка Ys

safet Ys).

% no_attack(Y, Ys, D):

% ферзь, который определен переменной Y, не нападает ни на одного из ферзей

h в списке Ys;

I D - рассто€ние по горизонтали между первым ферзем и остальными ферз€ми

no_attack(Y, [],_).

no_attack(Yl, [Y2 | Ys], D):-D #\= Y1-Y2, D #\=Y2-Yl, Dl is D+l, no_attack(Yl, Ys, Dl).

Ќаконец, рассмотрим процедуру решени€ с помощью системы CLP(FD) задач оп≠тимизации, таких как минимизаци€ времени завершени€ при составлении расписа≠ний. ƒл€ решени€ задач оптимизации удобно примен€ть следующие встроенные пре≠дикаты CLP(FD): minimize! Goal, X) и maximize; Goal, X)

Ёти предикаты наход€т такое решение Goal, которое минимизирует (максимизирует) значение X.  ак правило, Goal - это цель предиката indomain или предиката разметки, например, как показано ниже.

?- х in 1..20, V # = X*(20-’), maximize (indomain (X), V), X = 1 0, V = 100

ѕростую задачу планировани€ (см. рис. 14.1) можно решить с помощью следую≠щего запроса:

?.- StartTimes = [“а, “№, “с, Td,Tf ], % Tf - врем€ завершени€ domain< StartTimes, 0, 20), “а #>= 0,

“а + 2#=<“№, % «адание а предшествует заданию №

“а + 2#=<“с, % «адание а предшествует заданию с

“№ + 3 #=< Td, % «адание b предшествует заданию d

“с + 5#=<Tf, % «адание с завершаетс€ ко времени завершени€ Tf

Td + 4 #=< Tf,

minimize! labeling([ ], StartTiraes], Tf).

StartTimes = [0,2,2,5,9]

¬ данном случае вырабатываетс€ только одно оптимальное решение.


√лава 14. Ћогическое программирование в ограничени€х







ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 559 | Ќарушение авторских прав


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

Ћучшие изречени€:

„то разум человека может постигнуть и во что он может поверить, того он способен достичь © Ќаполеон ’илл
==> читать все изречени€...

1682 - | 1552 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.011 с.