Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зертханалық жұмыс 15.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
98.82 Кб
Скачать

Зертханалық жұмыс 15. Логикалық есептерді Prolog программалық ортада жұмыс жасау. Формулалар жəне оларды түрлендіру.

Логикалық есептермен Prolog программалық ортада жұмыс жасау. Жасанды интеллект үшін Prolog – та программа құру.

Программаның мысалы:

Пролог – символды сандық емес ақпаратты өңдеуге арналған программалау тілі. Ол әсіресе обьект және олардың арасындағы қарым-қатынасы бар есепті шешу үшін лайықты.1.1 суретте мысал келтірілген-туысқандық қатынас. Бобтың әкесі Том дегенді Прологта келесідей жазуға болады:

ӘКЕ(ТОМ,БОБ).

Бұл жерде біз тек Томмен Бобтың арасындағы туысқандық қатынастығана жаздық. 1.1 суреттегі туысқандық қатынас пролог-программада келесі түрде жазылады.

ӘКЕ(ПАМ, БОБ).

ӘКЕ(ТОМ, БОБ).

ӘКЕ(ТОМ, ЛИЗ).

ӘКЕ(БОБ, ЭНН).

ӘКЕ(БОБ, ПАТ).

ӘКЕ(ПАТ, ДЖИМ).

1.1-сурет. Туысқандық қатынас ағашы.

Бұл прграмма алты сөйлемнен тұрады. Әр сөйлем туысқандық қатынастың бір фактісін көрсетеді. Пролог-жүйеге программаны енгізгеннен кейін туысқандық қатынас туралы сұрақ қоюға болады. Мысалы, Паттың әкесі Бобпа деп? Бұл сұрақты клавиатурадан терминалды теріп, пролог-жүйеде беруге болады.

? - ӘКЕ( БОБ, ПАТ). Prolog-та жазылуы Parents(bob, pat).

Жүйенің программадан бұл фактіні тауып бергендегі жауабы

Yes (да)

Басқада сұрақтар қоялық:

? - ӘКЕ(ЛИЗ, ПАТ). Parents(liz, pat).

Жүйенің жауабы

No (нет),

Программада Паттың әкесі Лиз туралы ешнәрсе айтылмайды. Программа “нет” деп жауап береді және келесі сұраққада

?- ӘКЕ(ТОМ, БЕН). Parents(tom, ben).

Бен туралы программада айтылмаған.

Қызықты сұрақтар қоюға болады. Мысалы: “Лиздің әкесі кім?”

?- ӘКЕ(Х, ЛИЗ). Parents(X, liz).

Бұл жолы жүйе “да” немесе “жоқ” деп жауап бермейді. Алдында келтірілген тұжырымдар дұрыс болу үшін Х мәнін шығарып береді. Сол себепті алатын жауабымыз:

Х=ТОМ

“Бобтың балалары кім?” деген сұрақты пролог-жүйеде келесі түрде беруге болады:

?-ӘКЕ(БОБ, Х). Parents(bob, X).

Бұл жағдайда бірнеше жауап аламыз. Жүйе бірінші жауабын береді:

Х=ЭНН

Біз басқа жауабын алғымыз келеді. Жүйеге оны ;- ді теру арқылы берсек бізге келесі жауабын шығарады.

Х=ПАТ

Егер біз келесі жауабын сұрасақ, жүйе “нет” деп жауап береді, өйткені барлық жауаптар қарастырлып кеткен.

Программада басқада сұрақтар қоюға болады: “Кімнің әкесі кім?”. Бұл сұрақтың басқа түрін келтірейік:

Х, У-ті табу, У-тің әкесі Х.

Прологта ол былай жазылады.

?- ӘКЕ(Х, У). Parents(X,Y).

Х=ПАМ

У=БОБ;

X=ТОМ

Y=БОБ;

X=ТОМ

Y=ЛИЗ;

......

Программаға оданда күрделі сұрақтар қоюға болады, Джимның әкесінің әкесі кім?-деген сияқты. Біздің прорграммада әкесінің әкесі деген қатынас көрсетілмеген. Бірақ ондай сұрақты екі этапқа бөліп қоюға болады 1.2 – суреттегідей.

(1) Джимнің әкесі кім? Оны У деп санайық.

(2) У – тің әкесі кім? Оны Х деп санайық.

Мұндай құрама сұрақты прологта екі қарапайым сұрақтың тізімі түрінде жазуға болады.

?-ӘКЕ(У, ДЖИМ), ӘКЕ(Х, У). Parents(Y, djim), parents(X,Y).

Жауабы келесідей болады:

Х=БОБ

У=ПАТ

1.2-сурет. Әкесінің әкесі деген қатынас.

Біздің құрама сұрағымызды келесі түрде жазуға болады: “Екі талапты қанағаттандыратын Х және У табу”:

ӘКЕ(У, ДЖИМ) және ӘКЕ(Х, У)

Бұл талаптың орнын ауыстырсақ одан логикалық мағынасы өзгермейді:

ӘКЕ(Х, У) және ӘКЕ(У, ДЖИМ)

Бұл сұрақты пролог-жүйеде мына формада беруге болады:

? - ӘКЕ(Х, У) және ӘКЕ(У, ДЖИМ).

Бұдан шығатын нәтиже бірдей. “Томның немересі кім?” - деп сұрауға болады.

? - ӘКЕ(ТОМ, Х) және ӘКЕ(Х, У).

Жүйе былай жауап береді:

Х=БОБ

У=ЭНН;

Х=БОБ

У=ПАТ;

Келесі сұрақ былай болуы мүмкін: “Энн және Паттың ортақ әкесі барма?” Мұны екі этапқа бөлуге болады:

(1) Эннің әкесі Х-тің қайсысы?

(2) Сол Х Паттың әкесіме?

Бұл сұрақ пролог-жүйесінде былай жазылады:

?- ӘКЕ(Х, ЭНН), ӘКЕ(Х, ПАТ). Parents(X,ann), parents(X,pat).

Жауабы:

Х=Боб

Біздің мысал-программамыз кейбір маңызды сәттерді анықтады:

  • Прологта қатынасты анықтауға болады, мысал ретінде әкесі, сол қатынастар үшін орындалатын n-обьектіні көрсете аламыз.

  • Программада анықталған қатынасқы байланысты пролог-жүйеге сұрақтар қоя алады.

  • Пролог-программа сөйлемдерден тұрады. Әрбір сөйлем нүктемен аяқталады.

  • Қатынастың аргументтері: нақты обьект немесе тұрақты ( Том, Энн сияқты) немесе абстрактылы обьект, мысалы Х және У сияқты бола алады. Бірінші типтегі обьектіні атом десе, екінші типтегі обьектіні айнымалы деп атайды.

  • Жүйеге қойылатын сұрақтар мақсаты бір немесе бірнеше тұжырымдардан тұрады. Мақсаттың тізбегі келесідей:

ӘКЕ(Х, Энн), ӘКЕ(Х, Пат)

Бұл екі мақсатты тұжырымның коньюнкциясы білдіреді:

Х - Эннің әкесі және

Х – Паттың әкесі.

Пролог - жүйенің қарастыратын сұрақтары нәтижесіне жету үшін ұмтылатын мақсат сияқты сұрақтар.

  • Қойылған мақсатқа жеттікпе жоқпа, соған сәйкес сұрақтың жауабы кері немесе оң болуы мүмкін. Оң жауабына қарай қойылған мақсат нәтижесіне жетті деп айта аламыз. Кері жағдайда мақсат орындалмайды немесе сәтсіздік.

Жаттығу

    1. Туысқандық қатынас алдыңғы бөлімде қарастырылғандай деп санайық, келесі сұрақтарға пролог – жүйенің қалай жауап беретінін табыңыздар.

  1. ? - ӘКЕ(ДЖИМ, Х).

  2. ? - ӘКЕ(Х, ДЖИМ).

  3. ? - ӘКЕ(ПАМ, Х), ӘКЕ(Х, ПАТ).

  4. ? - ӘКЕ(ПАМ, Х), ӘКЕ(Х, У), ӘКЕ(У, ДЖИМ

Жауабы:

  1. No

  2. Х=Пат

  3. Х=Боб

  4. X=Боб, У=Пат

    1. Туысқандық қатынасқа байланысты сұрақтарды Прологта анықтаңыз:

  1. Паттың әкесі кім?

  2. Лиздың баласы барма?

  3. Паттың әкесінің әкесі кім?

Жауабы:

  1. ?- ӘКЕ(Х, ПАТ).

  2. ?- ӘКЕ(ЛИЗ, Х).

  3. ?- ӘКЕ(У, ПАТ), ӘКЕ(Х, У).

domains

s=symbol /* s обьектісінің символы symbol */

predicates

parent(s,s)

clauses

parent(pam,bob). /* Бобтың әкесі Пам */

parent(tom,bob).

parent(tom,liz).

parent(bob,ann).

parent(bob,pat).

parent(pat,jim).