Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція_4_21_лог_зад.doc
Скачиваний:
0
Добавлен:
08.12.2019
Размер:
420.35 Кб
Скачать

7. Таблиця велосипедних змагань

Постановка задачі. У велосипедних перегонах три перші місця зайняли Алеша, Петя й Коля. Яке місце зайняв кожен з них, якщо Петя зайняв не друге й не третє місце, а Коля – не третє?

Розв'язок задачі полягає у встановленні залежності між спортсменами й місцями, яку можна описати табл. 1 (прочерки указують відому інформацію):

Таблиця 1

Вочевидь, Петя може посісти лише перше місце, тоді Коля - тільки друге, а Алеше дістається третє (табл. 2).

Таблиця 2

При описі цієї задачі на Прологу виходить наступна програма.

PREDICATES

name(symbol)

mesto(symbol)

prizer(symbol,symbol)

solution(symbol,symbol,symbol,symbol,symbol,symbol)

CLAUSES

name(alex). name(pier). name(nike).

mesto(odin). mesto(dva). mesto(tri).

prizer(X,Y):-name(X),mesto(Y),X=pier,not(Y=dva),not(Y=tri);

name(X),mesto(Y),X=nike,not(Y=tri);

name(X),mesto(Y),not(X=pier),not(X=nike).

solution(X1,Y1,X2,Y2,X3,Y3):-name(X1),name(X2),name(X3),

mesto(Y1),mesto(Y2),mesto(Y3),

prizer(X1,Y1), prizer(X2,Y2),prizer(X3,Y3),

Y1<>Y2,Y2<>Y3,Y1<>Y3,X1<>X2,X2<>X3,X1<>X3,!.

Звичайно, у наведеному прикладі для одержання розв'язку швидше використати таблицю, ніж програму.

8. Студенти на велосипедах

Однак у складніших випадках таблиці стають багатовимірними і їхнє використання стає важчим, ніж програму. Розглянемо ще один приклад – логічну задачу (“Наука й життя ” №3, 1968).

Постановка задачі. П'ятеро студентів їдуть на велосипедах.

  • Їх кличуть Сергій, Борис, Леонід, Григорій і Віктор.

  • Велосипеди зроблені в п'ятьох містах: Ризі, Пензі, Львові, Харкові й Москві.

  • Кожен із студентів народився в одному із цих міст, але жоден з них не їде на велосипеді, зробленому на його батьківщині.

  • Сергій їде на велосипеді, зробленому в Ризі.

  • Борис родом з Риги, у нього велосипед з Пензи.

  • У Віктора велосипед з Москви.

  • У Григорія велосипед з Харкова.

  • Віктор родом з Львова.

  • Уродженець Пензи їде на велосипеді, зробленому на батьківщині Леоніда.

Хто зі студентів родом з Москви ?

Розв'язком цієї проблеми є наступна програма.

DOMAINS

name=simbol

PREDICATES

student(name) % ім'я студента

gorod(name) % назва міста

velo(name,name) %власник і «батьківщина» велосипеда fact(name,name) %факти про приналежність велосипедів fact1(name,name) % факти про місце народження rodom(name,name) % опис місця народження студента

rodom_penza(name) % опис для уродженця Пензи

CLAUSES

% 1 % student(X):- X=serg; X=boris; X=vict; X=grig; X=leo.

% 2 %gorod(Y):-Y=penza;Y=lvov;Y=moskva;Y=xarkov;Y=riga.

% 3 % fact(serg, riga). fact(boris,penza). fact(vict,moskva).

fact(grig,xarkov).

% 4 %velo(X,Y):- student(X),gorod(Y), fact(X,Y), ! ;

student(X),gorod(Y), not( fact(X, _ )),not(fact( _, Y)).

% 5 % fact1(boris,riga). fact1(vict,lvov).

% 6 % rodom_penza(X) :- student(X), Z=penza,not(fact1(X,_)),

gorod(U),not(U=Z),velo(X,U),rodom(leo,U).

% 7.1 % rodom(X,Z) :- student(X),gorod(Z),fact1(X,Z), ! ;

%7.2 % student(X),not(X=leo),Z=penza,rodom_penza(X), !;

%7.3 % student(X),gorod(Z),not(fact1(_,Z)),X=leo,

not(Z=penza),student(K),not(fact1(K,_)),velo(K,Z);

%7.4 % student(X),not(X=leo),gorod(Z),not(Z=penza),

not(fact1(_,Z)), not(fact1(X,_)), gorod(Y),not(Y=Z),

velo(X,Y),not(rodom(leo,Z)),not(rodom(leo,Y)).

Розглянемо опис фактів і правил у цій програмі:

  1. Перші два правила описують можливі обмеження на значення предикатів student і gorod. Це необхідно, щоб здійснювати припустимі підстановки при пошуку рішення.

  2. Факти, позначені цифрою три, описують відомі дані про те, де зроблено велосипеди деяких студентів.

  3. Цифрою 4 позначене правило, що описує приналежність деякого велосипеда деякому студентові. Правило складається із двох альтернатив, розділених знаком “;” . Перша частина правила говорить, що студент X володіє велосипедом Y, якщо такий факт є. Друга частина правила дозволяє робити будь-які підстановки, які не суперечать відомим фактам. Предикат відсікання “!” тут зупиняє пошук нових варіантів, якщо виконано всі попередні йому умови.

  4. Цифрою 5 позначено відомі факти про місце народження студентів.

  5. Цифрою 6 описано знання про те, хто зі студентів може бути родом з Пензи. Це не можуть бути Борис або Віктор, оскільки відомо, що вони народились в інших містах, і має бути студент, велосипед якого зроблений на батьківщині Леоніда.

  6. Правило 7, що складене з чотирьох частин, описує загальні знання про батьківщину кожного зі студентів:

    1. По-перше, може бути відомий факт відносно цього і тоді інші варіанти розглядати нема необхідності.

    2. Друга частина правила описує, хто може бути родом з Пензи.

    3. Третя частина правила описує можливе місце народження Леоніда.

    4. І, нарешті, четверта частина правила описує, з якого міста, окрім Пензи, можуть бути інші студенти, крім Леоніда.

Завантаживши цю програму, можна одержати шукане рішення.

9. Складання розкладів є однією з практичних задач, що часто зустрічаються.

Постановка задачі. П'ять студентів повинні відвідувати лекції весь тиждень, але за власними правилами, а саме:

1. Якщо прийшли Андрій і Дмитро, то Бориса бути не повинно, але якщо Дмитро не прийшов, то Борис повинен бути, а Віктор бути не повинен.

2. Якщо Віктор прийшов, то Андрія бути не повинно й навпаки.

3. Якщо Дмитро прийшов, то Григорія бути не повинно.

4. Якщо Бориса нема, то Дмитро повинен бути, коли нема також і Віктора, а якщо Віктор є, то Дмитра бути не повинно, але має бути Григорій.

5. Щодня студенти повинні приходити в різних комбінаціях.

Які це комбінації?

Для розв'язку цієї проблеми може бути використана програма.

DOMAINS

s=symbol

PREDICATES

st_A(s) st_D(s) st_B(s) st_V(s) st_G(s)

ogr1(s,s,s,s,s) ogr2(s,s,s,s,s)

spisok(s,s,s,s,s)

norm1(s,s,s,s,s) norm2(s,s,s,s,s)

norm3(s,s,s,s,s) norm4(s,s,s,s,s)

CLAUSES

st_A(A):-A=andre; A=net.

st_D(D):-D=dmitri; D=net.

st_B(B):-B=boris; B=net.

st_V(V):-V=victor; V=net.

st_G(G):-G=grig; G=net.

ogr1(andre,_,_,net,_). ogr1(net,_,_,victor,_).

ogr2(_,dmitri,_,_,net). ogr2(_,net,_,_,_).

norm1(andre,dmitri,net,_,_). norm2(andre,net,boris,net,_).

norm3(_,dmitri,net,net,_). norm4(_,net,net,victor,grig).

spisok(A,D,B,V,G):-st_A(A),st_D(D),st_B(B),st_V(V),st_G(G),

norm1(A,D,B,V,G),ogr1(A,D,B,V,G),ogr2(A,D,B,V,G);

st_A(A),st_D(D),st_B(B),st_V(V),st_G(G),

norm2(A,D,B,V,G),ogr1(A,D,B,V,G),ogr2(A,D,B,V,G);

st_A(A),st_D(D),st_B(B),st_V(V),st_G(G),

norm3(A,D,B,V,G),ogr1(A,D,B,V,G),ogr2(A,D,B,V,G);

st_A(A),st_D(D),st_B(B),st_V(V),st_G(G),

norm4(A,D,B,V,G),ogr1(A,D,B,V,G),ogr2(A,D,B,V,G);

st_A(A),st_D(D),st_B(B),st_V(V),st_G(G),

not(norm1(A,D,B,V,G)),not(norm2(A,D,B,V,G)),

not(norm3(A,D,B,V,G)),not(norm4(A,D,B,V,G)),

ogr1(A,D,B,V,G),ogr2(A,D,B,V,G).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]