Коммерциялық емес акционерлік қоғам

АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ

Компьютерлік технологиялар кафедрасы

 

 

ЖАСАНДЫ ЗЕРДЕ ЖҮЙЕЛЕРІ

 5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету      мамандығының бакалавр бағыты бойынша оқитын студенттерінің зертханалық жұмыстарын орындауға арналған әдістемелік нұсқаулық

 

 

 Алматы  2013 

Құрастырушы: Ахметова М. Жасанды зерде жүйелері: 5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету       мамандығының бакалавр бағыты бойынша оқитын студенттерінің     зертханалық жұмыстарын орындауға арналған әдістемелік         нұсқалық.  -АЭжБУ.  Алматы, 2013. - 36 б.

 

Әдістемелік нұсқаулықта кеңістіктегі күйлері бойынша іздеу, редукция

және предикаттарды есептеу жолдарымен шешу әдістері мен мысалдар келтірілген. Сарапшы жүйелердің  білімдерді пайдаланудың үлгілеріне қатысты зертханалық жұмыстарды орындауға нұсқаулар бар. Нұсқаулықта функционалдық-логикалық программалаудың ЛИСП және ПРОЛОГ тіліндегі жаттығулары қамтылған.

Әдістемелік нұсқаулық 5В070400 – Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығының барлық оқу түрінің  студенттеріне арналған.

Без. - 5,  Кесте - 1, әдеб.көрсеткіші – 20 атау. 

 

Пікір беруші: тех.ғыл.канд., профессор  Ибраева Л.Қ.

 

Алматы энергетика және байланыс университетінің 2012 жылғы  жоспары бойынша басылды.

  

© «Алматы энергетика және байланыс университетінің»   КЕАҚ,    2013 ж.   

Мазмұн

 

 

Кіріспе

3

 

Зертханалық жұмыс №1. ПРОЛОГ, ЛИСП тілдері ортасында программалар құру.

4

 

Зертханалық жұмыс №2. Кеңістіктегі күйі әдістерімен  зерделік программаны құру.

12

 

Зертханалық жұмыс 3. Редукция әдісін пайдаланатын зерделік программаны құру.

17

 

Зертханалық жұмыс №4. Предикаттарды есептеу теориясымен зерделік программаны құру.

21

 

Зертханалық жұмыс №5. Продукция үлгісіндегі сарапшы жүйелерді және оның құрамдас бөліктерін жобалау.

25

 

Зертханалық жұмыс №6. Фреймдік үлгідегі сарапшы жүйелерді және оның құрамдас бөліктерін жобалау.

31

 

Әдебиеттер тізімі

36

 

Кіріспе 

«Жасанды зерде жүйелері» пәні  студенттердің зердеге негізделген іздеудің әдістерін оқып үйренуіне бағытталған. Бұл пәнде жасанды зерде есептерінің жүйеленуі және күйлер кеңістігінде, есептерді бөлшектеу кеңістігіндегі әдістермен қатар предикаттарды есептеуді пайдаланатын әдістер қарастырылады.

Білімге негізделген жүйелерді басқарудың құрамдас бөліктерін жобалағанда туындайтын маңызды мәселелер қатарына шешімді іздеу әдістерін, яғни шығару стратегияларын табу жолдарын жатқызуға болады. Сондықтан зертханалық жұмыстарды орындағанда, студент осы жұмыста қойылған мәселені түсініп, пайдаланатын құралдарды игеру дағдысын көрсете білуі қажет.  Іздеу әдістерінің әр түрлерін қарастырудан бұрын есеп мақсатын қоюға жарайтын бірнеше жолдарды атап өтсек: кеңістіктегі күйлеріне негізделген жол; үлкен есептерді кіші есептерге бөлшектеуге негізделген жол; дәлелдеуге жататын теорема есебінде қарау жолы. Әдістемелік нұсқаулықта іздеу әдістерінің жолдары мен ПРОЛОГ және ЛИСП тілдерінде программалау дағдылары берілген.

Сарапшы жүйе көмегімен  шешілетін көптеген қолданбалы есептер бар. Сарапшы жүйе дегеніміз -   адам-маманды белгілі бір салада ауыстыра алатын компьютерлік программа. Сарапшы жүйелерді жобалау үшін адам-маманның болуы міндетті. Сарапшы жүйе құрамы жүйенің орындауға тиісті негізі функцияларын анықтап береді: жүйе пайдаланушымен адам тілінде сөйлесіп, адамша ұсыныс жасап, өз шешімін адам тілінде түсіндіріп, өз құрамындағы білімдерін адам баласы білімін қалай толықтырады, сондай тәсілмен толықтырып, өзіндегі бар білімдерді де адам сияқты жөндейді. Ақпараттық технологиялар мамандарының алдына қойылатын маңызды мәселелердің бірі - сарапшы жүйелерді жобалау, оның бөліктерін құру дағдысын меңгеру және СЖ жобалау саласындағы жаңалықтарды бағалай білу мәселесі. Әдістемелік нұсқаулықта білімді бейнелеу үлгілері келтіріледі және осы үлгілер бойынша білім қорын құру мысалдары қарастырылады. 

Жасанды зерде тілдері функционалдық және логикалық программалауға негізделген. Ол мәселе сипатын баяндау тәсілімен беретін ЛИСП және ПРОЛОГ тілдерінде құрылады. Зертханалық жұмыстарды орындау нәтижесінде  студент функционалдық және логикалық программалау тілдерінде программаларды құруға; ЛИСП және ПРОЛОГ тілдерінде программалық нысандардың мәнін оқып, түсінуге; ЛИСП және ПРОЛОГ  программаларын құрғанда рекурсия механизмін пайдалана білу; Жасанды зерде есептерінің әртүрлі әдістермен шешетін деректер құрылымын пайдаланатын программаларды құруды және өзгертуді үйреніп, білуге тиісті.

 

Зертханалық жұмыс 1. ПРОЛОГ, ЛИСП тілдері ортасында программалар құру

 

Жұмыстың мақсаты:

-       ПРОЛОГ және ЛИСП тілдерінің базалық ұғымдары мен негізгі мүмкіндіктерін игеру;

-       функционалдық, логикалық программалау ортасында  программа құрудың негізгі принциптерін үйрену. 

Жұмыс тапсырмасы:

1.   Турбо-ПРОЛОГ жүйесіндегі мәзір опцияларын үйрену (Run, Compile, Edit, Options, Files, Setup, Quit).

2.   Программаның clauses  тарауына  фактілер мен ержелерді қосып,  ішкі мақсатпен жұмыс істеу.

3.   Турбо-ПРОЛОГ-та қарапайым арифметикалық есептеулерді орындау.

4.   ЛИСП тілінің базалық командаларымен жұмыс істеуді үйрену.

5.   ЛИСП тілінде қарапайым арифметикалық есептеулерді орындау.

Қажетті ресурстар:

1)       Дербес компьютер

2)       Турбо-ПРОЛОГ ортасы

3)       ЛИСП ортасы

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Зертханалық жұмысты орындауды ПРОЛОГ жүйесінің Турбо-ПРОЛОГ версиясында қарастырамыз. Бұл тілдің өз компиляторы бар. Командалық жолға PROLOG командасын енгізу арқылы Турбо-ПРОЛОГ жүйесін іске қосасыз. Экранға Турбо-ПРОЛОГ тілінің Бас мәзірі деп аталатын терезесі шығады. Бұл терезенің жоғарғы қатарында пайдаланушыға қажетті  жеті түрлі опция бар.  Олардың қызметі келесі түрде болады:

1)     Программаны есептеуді іске қосады (Run).

2)     Программаны трансляциялайды (Compile).

3)     Программа мәтінін жөндейді (Edit).

4)     Компилятор опцияларын анықтайды (Options).

5)     Файлдармен жұмыс істейді (Files).

6)     Жеке қажеттіліктерді баптауды орындайды (Setup).

7)     Жүйеден шығады (Quit).

Бұл командалар екі түрлі тәсілмен жұмыс атқарады:

-           Таңдап алынған команданың бірінші әрпіне сәйкес, мысалы: R, C, E, O, F, S, Q деген сияқты.

-           Мәзір ішінде мына «→» және «←» бағдаршалар мен Enter пернесінің көмегімен.

Командамен жұмыс аяқталғанда одан шығу үшін Esc пернесін басса жеткілікті. Бас терезеде сонымен бірге төрт қосымша ішкі терезе бар. Сол жақ бұрышта Турбо-ПРОЛОГ-тың Editor - редактор терезесі орналасқан. Оң жағында Dialog сұхбат терезесі болса, сол жақ төменгі бұрышта Messege – хабарларды экранға шығаратын терезе бар.  Ал оң жақ төменгі бұрышта программаның қадамдық орындалуын қамтамасыз ететін Trace терезесі орналасқан. Редактор терезесінің жоғарғы қатарында көрінетін ақпарат түрлері мыналарды білдіреді: Indent – қатар жолдарды автоматты түрде жөндеу режимі іске қосылған деген мәліметті берсе, ал Insert – қатарларға таңбаларды кіріктіруге (вставка) болады деген ақпаратты береді. Турбо-ПРОЛОГ-тың жұмыс файлының үнсіз келісім бойынша атауы  WORK.PRO деп келсе, жалпы жағдайда ПРОЛОГ программасының кеңейтуі *.PRO деп аталады.

 Турбо-ПРОЛОГ-та жазылған программа бес бөлімнен тұрады. Оның кілттік сөздері: domains, database, predicates, goal, clauses  түрінде болып, сол арқылы бөлімнің басталуын хабарлайды. Программалардың барлығында осы бес бөлімнің болуы міндетті емес. Сонымен бірге Турбо-ПРОЛОГ тілінде түсінірулер (комментарий) программаның кез келген жерінде кез келген ұзындықтағы мына таңбамен /* және */ белгіленеді [1,2]. Бұл бес бөлім түрлері мыналарды бейнелейді:

1)     domains - Деректер типтерін анықтайды;

2)     database - Динамикалық Дерекқордың предикаттарын анықтайды;

3)     predicates  - Предикаттардың өздерін анықтайды;

4)     goal  - Ішкі мақсатты анықтайды;

5)     clauses  - Фактілер, ережелер, яғни программаның мәтіні жазылады.

Жалпы жағдайда Турбо-ПРОЛОГ тіліндегі кез келген программада predicates және clauses бөлімдерінің болуы міндетті, ал қалғандарының болу болмауы міндетті емес.  Егер программада goal  бөлімі болса, онда ондай программаларды ішкі  мақсатты программалар деп атайды.  Егер бұл бөлім болмаса, онда сыртқы мақсатты программа деп атайды. Сыртқы мақсатты программада ПРОЛОГ жүйесі сұхбат терезесіне сізді міндетті түрде шақырады.  Турбо-ПРОЛОГ тілі  - интерактивті немесе сұхбаттық тіл.  

Программа орындалуы мақсат операторы табылғаннан бастап іске асады.  Мақсат – ол программа шешуге тиісті мәселенің қалыптастырылған түрі.  Ішкі мақсаттарды ПРОЛОГ өзі тапса, ал сыртқы мақсатты ол пайдаланушыдан сұрайды.  Бұл жағдайда Турбо-ПРОЛОГ экранға Goal (мақсат) деген шақыруды шығарады. Содан кейін Турбо-ПРОЛОГ берілген мақсатты программадағы бар фактілер мен ережелермен салыстырады. Салыстыру принципінің сұлбасын өз есіңізде мықты сақтауыңыз қажет. Ол мынандай болып келеді: «жоғарыдан төмен қарай және солдан оңға қарай жүру».

ПРОЛОГ-тағы дерекқорлар екі түрлі болады: статикалық және динамикалық. Динамикалық түрі ПРОЛОГ-тың database деген бөлімінде орналасады. Осы дерекқордағы өзгерістерді мына ішкі предикаттар іске асырады:

1)         asserta (X), ssertz(X) – деректерді қордың басына немесе  соңына жазады;

2)     retract (X) – ДерекҚордағы фактілерді өшіреді;

3)     consult (файл атауы) – жедел жадыдағы файлды ашады.

Бақылау мысалы. Мысал [6] алынды. Белгілі бір деректер құрылымында іздеуді іске асыратын ПРОЛОГ тілінде программа жазу. Әрбір фактіде ең аз дегенде үш элемент болу керек. Деректер реляциялық түрде және ондағы жазба саны 15-тен кем болмауы қажет. Осы құрылымдағы іздеуді жазбаның бір немесе екі атрибуты бойынша құру қажет.

DOMAINS

   territory=ter(real, integer).

   population=pop(real, integer).

   info=c(string, territory, population, string).

PREDICATES

   country(info).

   search(string).

   search(integer, integer).

CLAUSES

   country(c("Australia", ter(7686.8, 6), pop(21585.1, 52), "Kanberra")).

   country(c("France", ter(674.8, 47), pop(64473.1, 20), "Paris")).

   country(c("India", ter(3287.6, 7), pop(1131191, 2), "New Delhi")).

   country(c("Hungary", ter(93.0, 109), pop(9930.9, 79), "Budapest")).

   country(c("Canadian", ter(9984.7, 2), pop(33091.2, 37), "Ottawa")).

   country(c("China", ter(9570, 3), pop(1322178.2, 1), "Pekin")).

   country(c("Russia", ter(17075.4, 1), pop(141887.5, 9), "Moskow")).

   country(c("USA", ter(9518.9, 4), pop(304000.0, 3), "Washington")).

   country(c("BreatBritain", ter(244.8, 76), pop(60776.2, 21), "London")).

   country(c("Greece", ter(131.9, 94), pop(10964.0, 70), "Athenes")).

   country(c("Kazakhstan", ter(2724.9, 9), pop(15658.3, 61), "Astana")).

   country(c("Madagascar", ter(587.0, 45), pop(19448.8, 55), "Antananarivo")).

   country(c("Maldives", ter(0.3, 186), pop(298.9, 166), "Male")).

   country(c("Estonia", ter(45.0, 129), pop(1342.4, 151), "Tallinn")).

   country(c("Japan", ter(377.8, 60), pop(127433.5, 10), "Tokyo")).

   country(c("Czechia", ter(78.9, 114), pop(10403.1, 79), "Prague")).

   search(X):-   country(c(Y, ter(_, _), pop(_, _), X)),   writef("The %s is the capital of the %s.\n", X, Y), fail;          country(c(X, ter(At, Bt), pop(Ap, Bp), Y)),

   writef("The capital of %s is %s.\nThe territory is %-1, zanimaet %u mesto v mire.\nThe population is %-1, zanimaet %u mesto v mire.\n", X, Y, At, Bt, Ap, Bp), fail.

search(T, P) :-    country(c(X, ter(_, Bt), pop(_, Bp), _)),     Bt<=T,  Bp<=P,    writef(" %s, ", X), fail.

Мысал нәтижелері. Іздеуді бір атрибут бойынша орындау. Мысалы мемлекет атауы және қала бойынша іздеу. Бір атрибутпен іздеуде программа сұратуында  goal:  search("China")  деп көрсетілген. Яғни іздеу айнымалысына нақты мән беру арқылы  бір атрибутты іздеу ережесі бойынша іздеу. Мысалы Қытай (China) мемлекеті  және Мәскеу (Moskow) қаласы жайлы сұратулар экранға қажетті ақпаратты шығарады: Goal: search ("China") және  Goal: search ("Moskow ").  Екі атрибут бойынша іздеу. Аумағы және халқының саны жағынан 10-шы орында тұрған  елдер мен аумағы  бойынша 100- орыннан жоғары тұрған және халқының саны бойынша 50-орыннан жоғары тұрған мемлекеттерді экранға шығару керек. Осы жерде мынаны айта кетуіміз қажет. Бірінші атрибут сұратуының түрі мынандай болып келеді: goal:  search(10, 10).  Яғни программадағы негізгі ереженің тақырыбындағы екі атрибуттың екеуі де қамтылған және екінші сұрату  Goal: search (100,50).

ЛИСП тіліндегі программалар. ЛИСП сандық емес есептерді өңдеуге арналған. Ол тізімдік құрылымдар алгебрасына, лямбда-есептеулер мен рекурсия теориясына негізделген [7-9]. Тілдің негізігі бағыты функционалдық, яғни кез келген сөйлем дөңгелек жақшаға алынады және ол редактор сыртында бірден функция деп қабылданып, «ENTER» батырмасы іске қосылғанда орындалады. Өрнектермен берілген есептеулер болмас үшін оның алдына мына таңбаны «’» қою қажет.  Өрнек алдындағы апостроф – бұл ЛИСП тіліндегі QUOTE функциясының қысқаша жазбасы. Функция анықтамалары файлдарда сақталуы мүмкін және олар мына: (load <файл атауы>) функциясын пайдалана отырып жүктеледі. Бұл функция файл өрнектерін жүктейді және оны орындайды. <Файл атауы> - бұл кеңейтусіз көрсетілген файл атауын білдіретін (".lsp" түрінде) жолдық константа. Егер операция сәтті аяқталса, LOAD файлда анықталған соңғы функция атауын қайтарады. Егер операция сәтсіз болса,  онда LOAD жолдық өрнек есебіндегі файл атауын қайтарады. Бұл LOAD функциясы ЛИСП тілінің басқа функциясынан шақыра алмайды. Ол тікелей тек пернетақтадан шақырылады. Онда бірде-бір ЛИСП функциясы орындауда болмауы қажет. Интерпретатор ЛИСП тіліндегі бастапқы программа мәтіндері бар файлдардың бәрін және LSP кеңейтуі бар барлық файлдарды ЛИСП файлдары деп қабылдайды. Әдетте XLisp  жүйесін іске қосу мына командамен орындалады: Xlisp-PLUS. Жүктелудің бірнеше секундынан кейін дисплей экранына мына хабар  «XLISP-PLUS Version 2.1h Portions Copyright (C )1988,  David Betz. Modified by Thomas Almy and others» шығады.  Одан соң жұмыс істеуге шақырып тұрған мына таңба шығады:  >  .  Сонымен жүйелік редактор өз жұмысын бастайды да экранға өз мәзірлерін ұсынады: File, Edit және Run. Қысқаша ЛИСП тілінің бірнеше функцияларын қарастырып өтейік.

Қайтару функциясы. CAR функциясы мән есебінде тізімнің бірінші элементін қайтарады. (CAR  тізім) ð S - өрнек (атом немесе тізім).

Құру функциясы CONS. CONS функциясы аргумент есебінде берілген тізім басы мен құйрығынан(соңы) жаңа тізім құрады. (CONS басы құйрығы). CONS функциясының мәні үнемі тізім болады.

Меншіктеу функциялары: SET, SETQ, SETF. SET – таңбаға меншіктейді, немесе онымен белгілі бір мәнді байланыстырады. Ол өзінің екі аргументін де есептейді.

ATOM, EQ, EQL, EQUAL предикаттары. Предикат – ол аргументтің белгілі бір қасиеті бар ма соны анықтайтын функция және мән есебінде NIL немесе T қайтарады. ATOM предикаты   аргумент атом ба соны тексереді:  (ATOM s - өрнек). Егер ATOM шақыруы аргумент болса, онда Т, керісінше де  NIL болады.

Тізім. Тізім элементтері атом немесе тізім болатын тәртіптелген тізбек.  Тізімдер дөңгелек жақшаға алынады да, элементтері бос орын арқылы ерекшеленеді. Тізімнің бірінші элементін «басы», ал қалғанын  «құйрығы» деп атайды. Ешқандай элементі жоқ тізімді бос тізім «()» немесе NIL деп атайды.  ЛИСП тілінде функцияны шақыру үшін де, өрнекті жазу үшін де жазбаның префикстік деп аталатын түрі қолданылады. Яғни функция да, оның аргументі де, немесе амалдар да жақша ішінде: (f x), (g x y), (h x (g y z)) және т.с.с. Тізімдермен жұмыс істейтін кейбір мысалдарды қарастырайық [7,19].

   1 Мысал. Екі тізім берілген. Осы екі тізімді көбейту нәтижесін тізім түрінде алу қажет. ЛИСП тілінде программа кодасы мынандай болады:

  (terpri)                  ;  Enter пернесіне ұқсас перне;

; proizvedenie функциясы анықталады;

  (defun  proizvedenie (spisok2   spisok1)

  (cond ((null  spisok1)  0)                            ;тармақталу;

 (T  (prince  (*  (car spisok2)  (car  spisok1))) (prince “ ”)

  (proizvedenie (cdr spisok2)  (cdr  spisok1)))))

  (princ “Тізімді енгіз”)   (terpri)

; a,b сандары енгізіледі;

  (setq a (read))

  (setq b (read))

  (setq c () )   ; c - бос тізім;

; Нәтиже экранға шығады;

  (terpri)  (princ “Көбейту нәтижесіндегі тізім”)

  (terpri)  (proizvedenie a  b)

  (terpri)  (princ “Соңы !!!”)

2 Мысал. Екі сан берілген. Осы екі санның қосындысын табу қажет. ЛИСП тілінде программа кодасы мынандай болады:

; sum функциясы анықталады;

        (defun sum (N)

    (cond  ((=N 1) 1)                   ;тармақталу;

      (T (+ N( sum (-N  1))))))

Одан ары қарай осы нәтижені экранға шығаруға болады. Ол үшін алдыңғы мысалдағыдай амалдарды кодаларға қосу қажет.

Жұмыстың орындалу тәртібі.

1)     Турбо-ПРОЛОГ жүйесіндегі мәзір опцияларын үйрену үшін осы ортада студент тегін, атын, тобын экранға шығаратын қарапайым программа құрыңыз. Осы программаны Files, Compile опцияларында орындап, Run опциясында іске қосыңыз.

2)     Ішкі мақсат goal предикатын іске қосыңыз. Ол Dialog терезесінде орындалады.

3)     Программаның clauses  бөлігінде  студент жайлы фактілерді және іздеу ержелерін қосып,  ішкі мақсатпен жұмыс істеңіз.

4)     Кез келген екі санның орташа шамасын табатын қарапайым арифметикалық есептеулерді орындауға арналған Турбо-ПРОЛОГ программасын құрыңыз.

5)     Өзін-өзі шақыруды орындайтын Турбо-ПРОЛОГ программасын құрыңыз.

6)     ЛИСП тілінде кесте жазбасы түріндегі студент тегін, атын, тобын экранға шығаратын қарапайым программа құрыңыз.

7)     Тізімнің басы және құйрығымен жұмыс істейтін ЛИСП тілінің базалық командаларынан тұратын қарапайым программа құрыңыз.

8)     Кез келген екі санмен арифметикалық есептеулерді орындайтын ЛИСП тілінде программа құрыңыз.

9)     Тізімдерді өңдейтін ЛИСП тілінде программа құрыңыз.

10)     Екі не одан да көп тізімдерден жаңа тізім құратын ЛИСП тілінде программа құрыңыз.

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент Турбо-ПРОЛОГ жүйесі мәзірлерін үйренуі, программада  фактілер мен ержелерді қосып,  ішкі мақсатпен жұмыс атқаруы, Турбо-ПРОЛОГ және ЛИСП тілінде қарапайым арифметикалық есептеулерді орындауы,  ЛИСП тілінің базалық командаларымен жұмыс істеуді үйренуі керек.

 

ПРОЛОГ тіліндегі нұсқалар

№1 нұсқа. ПРОЛОГ тілінде мына сұрақтарға жауап бере алатын мәліметтері бар  программа құру:

a)     студент аты, туған жылы, тапсырған пәні, бағасы.   

b)    кітапхана, кітап, автор, бағасы, шыққан жылы.

c)     тұратын жері, қала, көше, үй, пәтер.

d)    автомобиль, маркасы, түсі, жылы, елі.

№2 нұсқа. ПРОЛОГ тілінде құрамында 6-7 студентке арналған және бірнеше пәнді қамтитын тұжырым жазыңыз. Мұнда тегі, пән атаулары, мерзімі бірнеше рет қайталануы мүмкін.

a)     тапсырды_емтихан (студент, пәні, бағасы).

b)    тапсырды_курстық _жұмыс (студент, пәні, балы).

c)     тапсырды_зертханалық _жұмыс (студент, тобы, пәні, бағасы).

d)     тапсырды_сессия (студент, 1 пән, бағасы, 2 пән, бағасы).

№3 нұсқа.  ПРОЛОГ тілінде пәтерді жөндеу (бөлмелермен), бөлмелер санын, өлшемдерін ойдан алып, тұсқағаз жапсыруға кететін шығындарды есептеуді жүзеге асыратын программаны жазыңыз.

a)     кететін_бояулар (бөлме саны, өлшемі, бағасы).

b)    тұсқағаз_шығыны (бөлме саны, өлшемі, бағасы).

c)     пәтерге_шығын (кететін_бояулар (бөлме саны), бағасы).

d)    жалпы_шығын (кететін_бояулар (бөлме саны), тұсқағаз_шығыны (бөлме саны, өлшемі, бағасы).

№4 нұсқа. ПРОЛОГ тілінде квадраттық теңдеу түбірін есептеуді жүзеге асыратын программаны жазыңыз.

a)     кубты_есептеу (нәтиже, өлшемі).

b)    санды_дәрежелеу (дәреже, сан, нәтиже).

c)     орта_шама (сан, сан, нәтиже).

d)    санды_квадраттау (сан, нәтиже).

№5 нұсқа. ПРОЛОГ тілінде үшбұрыштың ауданын табатын программаны жазыңыз.

a)     квадрат_теңдеу_түбірі (түбір_алу (санды_квадраттау (сан, нәтиже), қосу, бөлу_амалдары (сан, сан))).

b)    трапеция_ауданы (сан, сан, сан, нәтиже).

 

ЛИСП тіліндегі  нұсқалар

№6 нұсқа. Мына қарапайым амалдарды ЛИСП интерпретаторы көмегімен орындаңыз:

а) 3.234∙(45.6+2.43).

б) 55+21.3+1.54∙2.5432-32.

в) (34-21.5676-43)/(342+32∙4.1).

№7 нұсқа.  ЛИСП тілінде өз тобыңыздың студенттер тізімін құрыңыз (аты-жөні аты-жөні ... аты-жөні):

a)     топ (студент аты, тегі, туған жылы, тапсырған пәні, бағасы).

b)    қалалар (аты, халқы, климаты, орналасқан жері).

c)     компьютер (түрі, фирмасы, жылдамдығы, құны).

d)    аудио (әнші, диск, тираж, жылы).   

№8 нұсқа.  Әр студент үшін LIST функциясы көмегімен мынандай тізімдер құрыңыз:

a)     студент өзі үшін - (туған жылы), (мекенжайы), (дәрістерден алған орташа балы), (тәжірибе сабақтардан алған орташа балы), (зертханалық жұмыстардан алған орташа балы).

b)    олардың ата аналары үшін - (аты-жөні), (туған жылы), (орташа балы), (тәртібі).

c)     кафедра үшін - (аты-жөні), (туған жылы), (мекенжайы), (жұмыс орны), (орташа балы).

d)    факультет үшін - аты-жөні), (туған жылы), (мекенжайы), (жұмыс орны), (емтиханнан алған орташа балы).

№9 нұсқа.  Мына CONS және SETQ функциялары көмегімен жоғарыда аталған тізімдерді әр студентке қатысты таңбалар арқылы былайша жинақтаңыз:

a)     студент аты-жөні - (туған жылы) (мекенжайы), (дәрістерден алған орташа балы) (тәжірибе сабақтардан алған орташа балы).

b)    студент аты-жөні - (зертханалық жұмыстардан алған орташа балы), (әкесінің аты-жөні) (әкесінің туған жылы) (әкесінің мекенжайы).

c)     студент аты-жөні  – (тобы), (шешесінің аты-жөні) (шешесінің туған жылы), (шешесінің мекенжайы), (шешесінің жұмыс орны).

d)    судент аты-жөні – (тобы), (туған жылы) (мекенжайы).

№10 нұсқа.  Базалық функциялар көмегімен кез келген таңдап алынған студент үшін мына параметрлерді салыстырыңыз:

a)     туған жылы;

b)    оқу үлгерімі (орташа балды сипатайтын сан бүтін де, бөлшек те болуы мүмкін);

c)     туысқандық байланыс бар ма;

d)    ата-анасымен бірге тұра ма.

№11 нұсқа. Пайдаланушыдан топтағы студенттің аты-жөнін сұрау арқылы (топ тізімі бар деп есептелінеді)  ол туралы мынандай деректерді:

a)     туған жылы.

b)    орташа балы.

c)     ата-анасы 

d)    оның басқа да қасиеттерін сипаттауды беретін функцияны жазыңыз.   

 

Бақылау сұрақтары

 

1.  Турбо-ПРОЛОГ программасы құрылымы. Бөліктер қызметтері.

2.  Турбо-ПРОЛОГ бас мәзірінің негізгі опцияларын атаңыз.

3.  ПРОЛОГ тіліндегі ережелер мен фактілер айырмашылығы.

4.  ПРОЛОГ тіліндегі рекурсияның қайталаудан айырмашылығы.

5.  Турбо-ПРОЛОГ-тағы салыстыру принципі.

6.  ПРОЛОГ тіліндегі тізімге жату предикаты.

7.     ЛИСП тілінің базалық функцияларын атап шығыңыз.

8.     Мына предикаттардың EQ, EQL, EQUAL негізгі айырмашылықтары.

9.     Мына функциялардың CONS және LIST негізгі айырмашылықтары.

10. ЛИСП-тегі тізімнің қай элементі басы, қайсысы құйрығы деп аталады?

11. ЛИСП-тегі тізім элементтерін анықтайтын қандай функция?

12. ЛИСП-тегі тізім қасиетін қайтаратын қандай функция?

 

Зертханалық жұмыс №2. Кеңістіктегі күйі әдісімен зерделік программа  құру

 

Жұмыстың мақсаты:

-       кеңістіктегі күйі бойынша тереңнен  іздеу әдістерін пайдалануды игеру;

-       кеңістіктегі күйі бойынша жайылып іздеу әдістерін пайдалануды игеру;

-       кеңістіктегі күйі бойынша эвристикалық әдісті пайдалануды игеру.

Жұмыс тапсырмасы:

1)     Күйлер қалыптарын құруды үйрену.

2)     Толық қарау әдісіндегі «кезек» механизмін құрастыру.

3)     Күйлер кеңістігі әдістеріндегі «бектрекинг» механизмін анықтау.

4)     Тереңнен іздеу әдісіндегі «стек» механизмін құрастыру.

5)     Эвристикалық әдісіндегі іздеу механизмін анықтау.

Қажетті ресурстар:

1)            Дербес компьютер.

2)            ТурбоПРОЛОГ ортасы.

3)            ЛИСП ортасы.

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Бұл жұмыста кеңістіктегі күйі бойынша іздеу әдістерін пайдалана отырып, ойындарға арналған компьютерлік зерделік программа құру.

Білімдерге негізделген жүйелерді басқарудың құрамдас бөлшектерін жобалағанда туындайтын маңызды мәселелер қатарына шешімді іздеу әдістерін, яғни шығару стратегияларын табу жолдарын жатқызуға болады. Таңдалып алынған іздеу әдістері ережелерді пайдалану жолдары мен оларды іске қосу  тәртібіне әсер етеді. Мысал үшін 8» және «15» ойынын қарастырайық.  Бастапқы күйлер 3∙3 және 4∙4 массивтері есебінде беріліп, мақсатты күйде де осы қалыптар тек басқа деректермен беріледі [10].  Бұл күйлер түрлері 1 а,б суреттерінде көрсетілген.

 

1сурет - «8» және «15» бастапқы және мақсатты күйлері

 

Бұл мысалдағы күйлерді сипаттайтын қалып есебінде сандар массивтері берілген.  Ал оператор есебінде бос клетканың - солға, жоғары, оңға, төмен жылжуы берілген.  Толық қарау әдісі.  Жайылып іздеу.  (BFS, Breadth-first search).  Жайылып іздеуде төбелер қалай құрылды солай ашылады.  Жайылып іздеу әдісіне жататын  іске асыру механизмі немесе тізімдерді өңдеу тәсілі ретінде программалау алгоритмдерінде «кезек» механизмі таңдалып алынады. Бұл іздеу әдісінде open тізімі үшін кезек механизмі орындалады, оны әдебиетте FIFO «first-in-first-out» яғни «бірінші келді–бірінші қызмет көрсетілді» құрылымы деп атайды. Бұл механизмде күйлер тізімнің оң жағынан қосылып, сол жағынан өшіріледі.  Тереңнен іздеу (Depth-first search, DFS).  Бұл әдісте ең алдымен ең соңғы құрылған төбелер ашылады. Төбелерді ашу процессі дегеніміз осы төбеге операторлар жиынын қолдануды айтамыз. Тереңнен іздеу әдісіне жататын  іске асыру механизмі немесе тізімдерді өңдеу тәсілі ретінде программалау алгоритмдерінде «стек» механизмі таңдалып алынады. Бұл іздеу әдісінде open тізімі үшін дүкен типіндегі стек механизмі орындалады, оны әдебиетте LIFO «last-in-first-out»  яғни «соңғы келді–бірінші қызмет көрсетілді» құрылымы деп атайды. Бұл механизмде күйлер тізімнің сол жағынан қосылып, сол жағынан өшіріледі. 

Күйлер кеңістігі графында іздеу алгоритмдерінің біріне бектрекинг (backtrack) деп аталатын қайтаруы бар іздеу тәсілін атауға болады [11]. Бұл тәсіл есептің мүмкін болатын шешімдері көп болатын жағдайда қолданылады. Бектрекинг тәсілінің мәні мынада: есептің іздеуінде тармақталатын жолдарда, оның біреуімен кетіп, онда мақсатты күй болмаса, қалған жолдарға қайтып келу үшін осы тармақты еске сақтап қою.  Жалпы жағдайда мұндай қайту тармақтары көп болуы да мүмкін. Программалаушы тек бектрекинг нүктелерін анықтау мен  қайту үдерісін басқаруды іске асыратын амалдарды орындауы  қажет.  Эвристикалық әдіс (Тең бағалар әдісі). Бұл тәсіл бойынша  бастапқы төбеден мақсатты төбеге дейін бағасы ең арзан болатын төбе арқылы өтетін жол таңдалып алынады. Сонымен бірге жолдың өзінің ұзындығын да бағалап отыру тәсілі де бар. Тең бағалар әдісінде c(ni,nj) деген бағалау функциясы беріледі, ол ni  төбесінен одан кейінгі nj  төбесіне өтуде төбелердің бағасын есептейді. Бұл әдісте құрылатын ағаш төбелерінің келесі төбеге өтудегі бағасы шығарылып еске сақталады да, s төбесінен n төбесіне дейінгі жол белгіленіп отырылады.  Мысалы, g(n) -  құрылған ағаштағы s төбесінен n төбесіне дейінгі жол бағасы болсын.  Осы g(n) функциясының ең арзан болатын жолын таңдау арқылы мақсатты күйге жететін ең қысқа жолды таңдап аламыз. Қорытындылай келсек,  бұл тәсілде мынандай бірлік функциясы таңдап алынады: f(n)=g(n)+w(n) – ол әр төбеге берілетін бағаны есептейді, мұндағы g(n) – жол ұзындығы, g(0) = 0 деп қабылданып алынады, ал g(n)= g(n-1)+1, сонда g(1)=0+1= 1 болады. Функциядағы w(n) – мақсатты күймен салыстырғанда өз орнында жатпаған фишкалар саны.  Ең соңында мақсатты күйге апаратын жолды көрсететін ең арзан төбе таңдалып алынады.

Ол үшін алдымен осы алгоритмді іске асыратын ЛИСП тілінде  HEURISTIC_SEARCH деген функциясы анықталады [11].  Нақты іздеу есебіне тәуелді EST деп аталатын эвристикалық бағалау функциясын да анықтаймыз.  Мынаны атап өтуіміз керек: 3 қадамда, Open тізімінен бірінші элемент - төбені таңдап алғанда, ең арзан бағаны таңдаймыз, өйткені Open тізімі ондағы сақталған төбе - күйлердің бағаларының азаюы бойынша тәртіптелген. Бұл тәртіпті ЛИСП тілінде қосымша анықталған MERGE функциясы қамтамасыз етеді.  Енді сол тәсілдің ЛИСП тіліндегі кодаларын келтірейік.

 

;Эвристикалық іздеу функциясын анықтау;

(defun HEURISTIC_SEARCH(StartState)

   (prog (Open Closed Current

          Deslist                   ;балалық төбелер тізімі;

          Reflist                    ;нұсқағыштар тізімі;

          Depth           ;ағымдағы төбенің тереңдігі;)

 ; 1 Қадам:;

    (setq Open (list(list 'S0 StartState 0

 (EST (list StartState 0)) )))

 ; 2 Қадам:;

  HS (cond ((null Open) (return())))

 ; 3 Қадам:;

                     (setq Current (car Open))

                     (setq Open (cdr Open))

                     (setq Closed (cons Current Closed))

                     (setq Depth (caddr Current))

 ; 4 Қадам:;

                     (cond ((IS_GOAL Current)

              (return (SOLUTION Current Reflist))))

 ; 5 Қадам:;

                     (setq Deslist (OPENING Current))

 ; қайталанатын төбе-күйлерді  алып тастау:;

                     (setq Deslist (RETAIN_NEW Deslist))

                     (cond ((null Deslist) (go НS)))

 ; 6 Қадам:;

                     (setq Open (MERGE (ADD_DEPTH_EST (add1 Depth)

Deslist) Open))

    (setq Reflist (append (CONNECT Deslist Current) Reflist))

                     (go HS) ))

Эвристикалық тәсіл бойынша іздеу алгоритмінде алдыңғы тәсілдердегідей (BREADTH_FIRST_SEARCH және  LIMITED_DEPTH_SEARCH) қосымша OPENING, SOLUTION, IS_GOAL, CONNECT, EST функцияларын пайдаланады. Сонымен бірге ол бұрын анықталған RETAIN_NEW функциясымен қатар тағы да екі қосымша ADD_DEPTH_EST және MERGE функцияларын пайдаланады. Бірінші функция балалық төбелердің тереңдігін анықтаумен қатар, олардың эвристикалық бағасын да есептейді. Ал екінші функция екі тәртіптелген күйлер тізімдерін (эвристикалық бағалар мәндерінің төмендеуі бойынша) нәтижелі тәртіптелген тізімге келтіреді. Енді осы қосымша функциялардың ЛИСП тіліндегі кодаларын келтірейік:

 

;Қосымша ADD_DEPTH_EST функциясын анықтау;

 (defun ADD_DEPTH_EST (Dn Slist)

   (cond ((null Slist) ())                                  ;тармақталу;

;тізім басы мен құйрығынан тізім құру және сан қосу;

         (t (cons (list (caar Slist) (cadar Slist) Dn

                        (EST (list (cadar Slist) Dn)) )

;Қосымша функцияның құйрығына қосу;

                  (ADD_DEPTH_EST Dn (cdr Slist))) ) ))

  ;Қосымша MERGE функциясын анықтау;

 (defun MERGE (L1 L2)

   (cond ((null L1) L2)

         ((null L2) L1)

;тәртіптелуді қамтамасыз етеді;

         ((> (car (cdddar L1)) (car(cdddar L2)))

            (cons (car L2) (MERGE L1 (cdr L2))))

         (t (cons (car L1) (MERGE (cdr L1) L2))) ))

Осы зертханалық жұмысты қорғауға қажетті терминдерге мыналарды жатқызамыз: күйлер, күйлерді сипаттайтын қалыптар, оператор, бастапқы күй сипаты, мақсатты күй сипаты, граф түріндегі жазба, төбелерді ашу,  тереңнен іздеу әдісі (Depth-first search, DFS), іздеу әдістеріндегі  open және closed тізімдері, жайылып іздеу әдісі (BFS, Breadth-first search), кезек құрылымы (FIFO «first-in-first-out»), стек құрылымы (LIFO «last-in-first-out»), эвристикалық іздеу әдісі.

Жұмыстың орындалу тәртібі.

1)       Күйлерді сипаттауға арналған  қалыптарды, соның ішінде таңбалар қатары, векторлар, екі өлшемді массивтер, ағаштар, тізімдерді құру.

2)       Тізім түрінде құрылған күйлерге қосымша күйлерді оң жағынан қосылып, сол жағынан өшіруді орындау. Бұл «кезек» механизмі.

3)       Осы «кезек» механизмін Турбо-ПРОЛОГ және ЛИСП тілдерінде орындау.

4)       Тізім түрінде құрылған күйлерге қосымша күйлерді сол жағынан қосып, сол жағынан өшіруді орындау. Бұл «стек» механизмі.

5)       Осы «стек» механизмін Турбо-ПРОЛОГ және ЛИСП тілдерінде орындау.

6)       Күйлер кеңістігі әдістеріндегі «бектрекинг» механизмін граф түрінде анықтау.

7)       Эвристикалық әдісіндегі іздеу механизмін граф түрінде анықтау.

 

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент күйлерді сипаттауға арналған  қалыптарды үйренуі, «стек» және «кезек» механизмдерін  Турбо-ПРОЛОГ және ЛИСП тілдерінде орындауы, күйлер кеңістігі әдістеріндегі «бектрекинг» механизмін граф түрінде анықтауы керек.

№1 нұсқа. Тереңнен іздеу әдісінің компьютерлік программасын құру.

a)   «Крестер –Нөлдер» ойынын ПРОЛОГ тілінде құру.

b)  «Теңіз шабуылы» ойынын ЛИСП тілінде құру.

c)  Туриске анықтамалық мәлімет беретін ПРОЛОГ программасын құру.  

d)  «АЭжБУ кітапхана көмекшісі» іздеуінде ЛИСП программасын құру.  

№2 нұсқа. Жайылып іздеу әдісінің компьютерлік программасын құру.

a)       Іздеуді деректерден бастайтын ойын программасын құру.

b)      «Робот бөлмеден студентті табады» ПРОЛОГ программасын құру.  

c)       «Жануарларды жіктеу» іздеуінде ЛИСП программасын құру.  

d)      Іздеуді мақсаттан бастайтын программа құру.

№3 нұсқа. Эвристикалық іздеуден компьютерлік программа құру.

a)   «АЭжБУ қашықтықтан оқу» іздеуінде ЛИСП программасын құру.  

b)  «Күн планеталары» анықтамалық ПРОЛОГ программасын құру.  

c)  «Шежіре» беретін ЛИСП программасын құру.

d)  «Рикошет» ойынына ЛИСП программасын құру.

№4нұсқа. Күйлер кеңістігінің кез келген әдісін пайдаланып компьютерлік программа құру.

a)       ПРОЛОГ тілінде «айлық ауа райын болжау» программасын құру. 

b)      «Өсекші тілі» деген ЛИСП тілінде программа құру. 

c)       «Жануарлар» деп аталатын ЛИСП тілінде программа құру. 

d)      «Реверси» ойынын ПРОЛОГ тілінде құру.

 

Бақылау сұрақтары

 

1)       Тереңнен және жайылып іздеу әдістерінің айырмашылығы неде?

2)       Эвристикалық алгоритмдердің артықшылығы.

3)       Іздеуді деректерден бастайтын әдіс стратегиясы қандай?

4)       Іздеуді мақсаттан бастайтын әдіс стратегиясы қандай?

5)       Қандай құрылымдар ойындағы күйлерді сипаттайды?

6)       Тереңнен іздеу әдісінде қандай іздеу механизмі бар?

7)       Жайылып іздеу әдісінде қандай іздеу механизмі бар?

8)       Кезек құрылымы деген не?

9)       Стек құрылымы деген не?

10)   Бектрекинг механизмін сипаттаңыз.

11)  Күйлерді сипаттайтын қандай қалыптар бар?

12)  Эвристикалық іздеудегі механизмдер.

 

Зертханалық жұмыс №3. Редукция әдісін пайдаланатын зерделік программаны құру

 

Жұмыстың мақсаты:

-       үлкен есепті кіші есептерге бөлу бойынша іздеу әдістерін пайдалануды игеру;

-       күйлер сипатын ЖӘНЕ/НЕМЕСЕ графымен беруді игеру;

-       есептер кеңістігіндегі редукция әдісін игеру.

 

Жұмыс тапсырмасы:

1)       Есептер кеңістігіндегі күйлер қалыптарын құруды үйрену.

2)       ЖӘНЕ/НЕМЕСЕ графы механизмін құрастыру.

3)       Есептер кеңістігіндегі «стек» механизмін құрастыру.

4)       Эвристикалық әдісіндегі іздеу механизмін анықтау.

 

Қажетті ресурстар:

1)       Дербес компьютер.

2)       Турбо-ПРОЛОГ ортасы.

3)       ЛИСП ортасы.

 

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Үлкен есепті кіші есептерге бөлшектеу немесе оның әдебиетте қалыптасқан басқаша атауы Редукция әдісі өз құрамында кеңістіктегі күйі бойынша іздеу жолдарын сақтап қолданады.  Бұл әдісте мәселе шешілуге тиісті есепті Үлкен есеп деп қарап, оны көптеген кіші есептерге бөлшектеу арқылы тиімді шешім жолына жетуді  қарастырады. Әрбір кіші есеп алдыңғыға қарағанда, қарапайым болып келеді, оны белгілі бір әдістермен, мысалы жоғарыдағы соқыр әдістердің бірімен шешуге болады. Ол үшін есепті бөлшектеу үдерісін ары қарай жалғастырып, алынған кіші есептерден тағы одан кіші есептерді алып, ең соңында қарапайым (элементарные) есеп болғанға дейін бөле береміз. Ал қарпайым есеп дегеніміз шешімі белгілі есеп. Мәселені қоюдың мұндай жолын есепті кіші есептерге келтіру немесе есептің редукциясы деп атайды. Кеңістіктегі күйлері бойынша шешілуге тиісті есептер сияқты редукция әдісіне негізделген есептерде де белгілі бір қалыптарды анықтап алу қажет:

1)     Есеп/кіші есеп сипаты мен бастапқы есеп сипатының қалыптары.

2)     Операторлар жиыны мен олардың есептің сипатына ететін әсері.

3)     Қарапайым есептер жиыны.

Осы аталған құрылымдар есеп шешуін табуға іздеуді ұйымдастыруға қажетті есептер кеңістігін білдіреді. Ал есеп/кіші есеп сипаттарының қалыптары жайында сөз қозғасақ, онда оларды кеңістіктегі күй тәсілдеріндегідей бастапқы күйлер, операторлар, мақсатты күйлер мен олардың қасиеттері деген сияқты сипаттап келтіруге болады. Бұл жағдайда қарапайым есептер есебінде күйлер кеңістігінде бір қадамда орындалатын есептерді алуға болады. ЖӘНЕ/НЕМЕСЕ графы. Шешуші граф. Редукция есебінің кіші есептерге бөліну үдерісін әдетте, графқа ұқсас құрылымдармен өрнектейді. Олардың төбелерінде есептер мен кіші есептер, ал оларды байланыстырып тұратын доғалар редукцияланатын есеп пен одан туындайтын кіші есепті жұп төбелермен қосып тұрады. Доғалардың бағыты редукция бағытын білдіреді. Мұндай құрылымдар  ЖӘНЕ/НЕМЕСЕ  графтары деп аталады. Редукция мәнін толық түсіну үшін көпшілікке кеңінен таныс классикалық есеп болып кеткен Ханой мұнарасы немесе оны пирамида жайындағы есеп деп те атайды, есебін қарастырайық [12]. Есеп шарты бойынша үш қазық берілген. Оны  A, B, C әріптерімен белгілейік. Сонымен бірге көптеген диаметрі әртүрлі ортасы тесік дискілер берілген. Олар қазықтарға бірінің үстіне бірі кигізілген.  Бастапқы кезде барлық дискілер А қазығында орналасады және есептің шарты бойынша кіші дискілер үлкендердің үстінде болады, керісінше орналасуына рұқсат жоқ.  Есептің мақсаты барлық дискілерді С қазығына орналастыру қажет. Орындалуы тиісті ережелер: жылжытуды тек үстіңгі дискіден бастайды, кіші дискінің үстіне үлкен дискіні қоюға болмайды. Есептің ең қарапайым жағдайы үшін, дискіні i қазығынан j қазығына қою (бұл ауыстыруды былайша белгілейміз:(i -> j). Жалпы жағдайда саны n болатын дискілерді w қазығын қосымша ретінде пайдалана отырып, i қазығынан  j қазығына қою қажет.

Рекурсивті функцияларды басқаруға «стек» механизмін пайдаланады. Осы алгоритмнің іске асуын ПРОЛОГ тілінің кодаларымен өрнектейік [13].

 Domains

Loc = right;middle;left.   */аргумент типтеріне мағыналы атаулар береміз

Predicates     */осы предикат аргументтері қандай домендерге (типтерге) жататынын хабарлаймыз

Hanoi(integer) – procedure(i).

move(integer,loc,loc,loc) – procedure(i,i,i,i).

inform(loc,loc) - procedure(i,i).

clauses                                               */ойын мақсаты

Hanoi(N) : -

  move(left, middle, right).

move(1,A, _ , C) : -

  inform(A,C), !.

move(N,A, B , C) : -

N1= N – 1,

move(N1,A, C , B), */бір қазықтан келесіге N дискілерді ауыстырғанда үшінші қазықты қосымша қолдана отырып,  предикат (move) предикатын пайдаланады

inform(A,C),          

move(N1,B, A, C).

inform(loc1,loc2) : -                  */нақты дискімен орындалатын амалды (inform) предикаты атқарады

write ( "move a disk from", "loc1", to "loc2"), nl.

Goal    */мақсат бөлігінде (Goal) ойнайтын дискілер саны көрсетіледі   

Hanoi(3).

Осы зертханалық жұмысты қорғауға қажетті терминдерге мыналарды жатқызамыз: қарапайым есептер, есеп редукциясы, редукция операторы, бастапқы күй сипаты, мақсатты күй сипаты, граф түріндегі жазба, ЖӘНЕ/НЕМЕСЕ графы. Шешуші граф, ЖӘНЕ-төбе, НЕМЕСЕ-төбе, соңғы төбелер, шешілетін төбелер кезек құрылымы (FIFO «first-in-first-out»), стек құрылымы (LIFO «last-in-first-out»).

 

Жұмыстың орындалу тәртібі.

1)                     Есептер кеңістігіндегі күйлерді сипаттауға арналған  қалыптарды, соның ішінде таңбалар қатары, векторлар, екі өлшемді массивтер, ағаштар, тізімдерді құру.

2)                     Тізім түрінде құрылған күйлерге қосымша күйлерді оң жағынан қосылып, сол жағынан өшіруді орындау. Бұл «кезек» механизмі.

3)                     Осы «кезек» механизмін Турбо-ПРОЛОГ және ЛИСП тілдерінде орындау.

4)                     Тізім түрінде құрылған күйлерге қосымша күйлерді сол жағынан қосып, сол жағынан өшіруді орындау. Бұл «стек» механизмі.

5)                     Осы «стек» механизмін Турбо-ПРОЛОГ және ЛИСП тілдерінде орындау.

6)                     Есептер кеңістігіндегі әдістеріндегі механизмдерді ЖӘНЕ/НЕМЕСЕ графы түрінде анықтау.

7)                     Шешуші граф түсінігін граф түрінде анықтау.

 

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент есептер кеңістігіндегі күйлерді сипаттауға арналған  қалыптарды үйренуі, «стек» және «кезек» механизмдерін  Турбо-ПРОЛОГ және ЛИСП тілдерінде орындауы, есептер кеңістігіндегі әдістеріндегі ЖӘНЕ/НЕМЕСЕ және Шешуші граф түсінігін граф түрінде анықтауы керек.

 

№1 нұсқа. ЖӘНЕ/НЕМЕСЕ графымен сипатталатын программа құру.  

a)             «Дөңгелектер» ойынын ПРОЛОГ тілінде құру.

b)           «Футбол» ойынын ЛИСП тілінде құру.

c)            Дәрігер кеңесін беретін ПРОЛОГ программасын құру.  

d)           «Талапкерге көмек» іздеуінде ЛИСП программасын құру. 

 

№2 нұсқа. «Кезек» механизміне негізделген  программа құру.

a)            Іздеуді деректерден бастайтын ойын программасын құру.

b)           «Робот пен мысық» ПРОЛОГ программасын құру. 

c)            «Ағаштар жіктелуі» іздеуінде ЛИСП программасын құру. 

d)           Іздеуді мақсаттан бастайтын программа құру.

 

№3 нұсқа. «Стек» механизміне негізделген  программа құру.

a)   «Жасанды зерде анықтамасы» іздеуінде ЛИСП программасын құру. 

b)  «Қазақ әдет-ғұрыптары» анықтамасын беретін ПРОЛОГ программасын құру. 

c)  «Қазақ қолөнері» анықтамасын беретін ЛИСП программасын құру.

d)  «Кемелерді ату» ойынына ЛИСП программасын құру.

 

№4нұсқа. Есептер кеңістігінің кез келген әдісін пайдаланып компьютерлік программа құру.

a)       ПРОЛОГ тілінде «Астро- болжау» программасын құру. 

b)      «Құпия сөздер әлемі» деген ЛИСП тілінде программа құру. 

c)       «Құстар» деп аталатын ЛИСП тілінде программа құру. 

d)      «Реверси» ойынын ПРОЛОГ тілінде құру.

 

 

Бақылау сұрақтары

 

1.       Редукциядағы соқыр тәсілдерінің қандай айырмашылығы бар?

2.       Редукция әдісіндегі  эвристикалық алгоритмдер ерекшелігі неде ?

3.       Редукция әдісінде  деректерден бастап іздеу стратегиясы қандай?

4.       Редукция әдісінде  мақсаттан бастап іздеу стратегиясы қандай?

5.       Редукция әдісінде   күйлерді сипаттайтын құрылымдар қандай?

6.       Редукция әдісіндегі іздеу механизмі қандай?

7.       Кеңістіктегі күйлер мен редукция әдістерінің айырмашылығы.

8.       Шешуші граф деген не?

9.       ЖӘНЕ/НЕМЕСЕ  графы деген не?

10.   Төбелердің шешілуі деген не ?

11.   Қарапайым есептер түсінігі.

12.   Соңғы төбелер ұғымы.

  

Зертханалық жұмыс №4. Предикаттарды есептеу теориясымен зерделік программа құру

 

Жұмыстың мақсаты:

-       бірінші дәрежедегі предикаттарды есептеу теориясындағы әдістерді пайдалануды игеру;

-       предикаттарды есептеу теориясындағы күйлер сипатын ЖӘНЕ/НЕМЕСЕ графымен беруді игеру;

-       предикаттарды есептеу теориясындағы қалыптарды бейнелеуді игеру.

Жұмыс тапсырмасы:

1)     Предикаттарды есептеу теориясындағы күйлер қалыптарын құруды үйрену.

2)     Предикаттарды есептеу теориясындағы күйлер сипатын ЖӘНЕ/НЕМЕСЕ графы механизмі арқылы құрастыру.

3)     Предикаттарды есептеу теориясындағы күйлер сипатын әртүрлі механизм тәсілдерімен құрастыру.

4)     Предикаттарды есептеу теориясындағы операторларды анықтау.

5)     Предикаттарды есептеу теориясындағы операторлық сұлба тәсілін пайдалану.

6)     ПРОЛОГ және ЛИСП тілдерінде программа құру.

Қажетті ресурстар:

1.     Дербес компьютер.

2.     Турбо-ПРОЛОГ ортасы.

3.     ЛИСП ортасы.

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Бірінші дәрежедегі предикаттарды есептеу. Осы аталған логикадағы жүйенің бір бөлігі математикадан тұрса, бір бөлігі сөйлесу  табиғи тілден тұрады. Бұл тілді автоматты түрдегі ой тұжырымдарын  құру үшін компьютерде пайдаланады. Осы тілде ережелер құрып, логикалық тұжырымдар жасау мүмкіндігі бар. Енді көпшілікке кеңінен таныс маймыл мен банан жайлы классикалық есеп түрін қарастырайық [12]. Оның сөйлеммен берілетін қойылымы былайша өрнектеледі:  бөлмеде маймыл, жәшік және бір байлам банан бар. Байланған банан бумасы бөлме төбесіне ілінген және оның биіктігіне маймыл қанша секірсе де бойы жетпейді. Ол оған тек жәшік үстіне шықса ғана қолы жетеді. Маймылдың бананға қолы жететін іс-әрекеттер тізбегін құру қажет. Және есептің қойылымы бойынша маймыл бөлме ішінде ары бері жүре алады, жәшікті қозғалта алады, жәшік үстіне шыға алады және оның үстінде тұрып бананға қол жеткізе алады. Жоғарыдағы сипатталған «Маймыл әлемі» үнемі белгілі бір күйде болады. Күйлер белгілі бір уақыт аралығында өзгеріп тұруы мүмкін. Ағымдағы күй нысандарының өзара орналасуы бойынша анықталады. Бастапқы күйді табиғи тілдің мынандай сөйлемдері арқылы сипаттай аламыз:

1)       Маймыл есік жанында.

2)       Маймыл еденде тұр.

3)       Жәшік терезе алдында.

4)       Маймылда банан жоқ.

Енді осы күйлерді есептегі объектілердің өзара байланысын көрсетуге ыңғайлы болуы үшін  келесі 1кестедегідей бейнелейік.

 

1кесте - Есеп нысандарының байланыстары

Күйлер

Нысандардың орналасуы

бастапқы

Есік жанында

Еденде

Терезе жанында

Бар не жоқ

ағымдағы

Маймылдың жатықтағы орны

Маймылдың тік жағдайдағы орны

Жәшік орны

Маймылда банан бар не жоқ

 

Есепті бір ойыншыға арналған ойын есебінде қарап, ойын ережелерін былайша қалыптастырамыз. Сөйлемде мынандай тұжырымдар бар:

1)     Жүріс мақсаты маймыл Р1 орнынан Р2 орнына ауысады.

2)     Жүріске дейін де, орындалғаннан соң да маймыл еденде тұрады.

3)     Жәшік орны өзгермейді.

4)     Ал «қолында банан бар» күйі өзгермейді.

Есептегі ең маңызды мәселеге: «Маймыл бастапқы белгілі бір S күйінде тұрып, бананды ұстай ала ма сұрақты жатқызамыз. Бұл сұрақты мынандай предикат түрінде: ұстай алады( S) өрнектейміз. Мұндағы  S – аргументі маймыл әлемінің күйі. Ал ұстай алады предикатының программасы екі түрлі бақылау нәтижесіне сүйене алады:

1) Маймылдың қолында бананның бар болуы үшін ұстай алады предикаты кез келген S күйі үшін шын болуы керек, бұл жағдайда, ешқандай жүріс қажеттігі болмайды.  Предикат түрі:

ұстай алады күй ( ----, ----, -----, бар болуы)).

1)  Басқа жағдайларда бір немесе одан да көп жүрістер қажет. Егер маймыл үшін Р1күйінен S2 күйіне ауысатын жүріс түрі бар болса, және сол кез келген күйде маймыл бананды алса (нөлден көп жүріс саны бар болса), онда ол  бананды кез-келген  S1 күйінде де алады.

Енді осы 1- дәрежедегі предикаттарды есептеу теориясындағы әдістерді  пайдаланған  осы «Маймыл мен банан» классикалық мысал есебінің ПРОЛОГ тіліндегі кодасын келтірейік [13].

predicates

  get_it.

  banana(symbol,symbol,symbol).

  search(symbol,symbol,symbol).        

clauses

  goal

           write("Enter coordinates of monkey..."), nl,

           readln(M), nl,

           write("Enter coordinates of banana..."), nl,

           readln(B), nl,

           write("Enter coordinates of chair..."), nl,

           readln(C), nl,

           search(M,B,C).

  search(O,A,H):-   O=H,          write("Monkey near chair"), nl,

           banana(O,A,H);

           write("Monkey is far away from chair. Please enter new position for a monkey to move to..."), nl,     readln(N),            search(N,A,H).

  banana(X,Y,Z):-

           X=Y,

           write("Monkey is under banana"),

           get_it;

           write("Monkey is far away from banana. Enter new position for a monkey and banana to move to"),

           readln(K),

           banana(K,Y,K).

  get_it:-

  write("Monkey is under banana and can get it, Hallelua. Do you want to take it?"),nl,

  readln(P),

           P="yes",

           write("Oh, Yeah");

           write("I'm too young to die - said Monkey").

 

Осы зертханалық жұмысты қорғауға қажетті терминдерге мыналарды жатқызамыз: предикаттарды есептеу, резольвента, термдер, атомдық формулалар, дұрыс құрылған формула (ДҚФ-ППФ), резолюция принципі,  жалпылық кванторы, бар болу кванторы, логикалық түрде шығару концепциясы, бос сөйлем, математикалық логика операциялары.   

 

Жұмыстың орындалу тәртібі.

1.   Предикаттарды есептеу теориясындағы күйлерді сипаттауға арналған  қалыптарды, соның ішінде таңбалар қатары, векторлар, екі өлшемді массивтер,ағаштар, тізімдерді құру.

2.   Есеп қойылымының сөз сипатын құру.

3.   Күйлерді сөйлемдер арқылы сипаттау.

4.   Есеп нысандарының байланыстарын құру.

5.   Тұжырымдарды предикаттар есебінде құру.

6.   Есептегі операторларды анықтау.

7.   Есептің күйлер кеңістігін құру.

8.   Резолюция принципі бойынша іздеуді орындау.

9.   Қолданған тәсіл бойынша есепті Турбо-ПРОЛОГ және ЛИСП тілдерінде орындау.

 

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент предикаттарды есептеу теориясындағы күйлерді сипаттауға арналған  қалыптарды үйренуі, есеп қойылымының сөз сипатын құруды, күйлерді сөйлемдер арқылы сипаттауды, есеп нысандарының байланыстарын құруды, тұжырымдарды предикаттар ретінде құруды, есепті Турбо-ПРОЛОГ және ЛИСП тілдерінде жасауды орындауы керек.

№1 нұсқа. Күйлері дұрыс құрылған формула (ДҚФ) жиындарымен сипатталған программа құру.

e)        «Қасқыр, Ешкі және капуста» ойынын ПРОЛОГ тілінде құру.

f)        «Баскетбол» ойынын ЛИСП тілінде құру.

g)       Автомеханик кеңесін беретін ПРОЛОГ программасын құру. 

h)       «Зерттеушіге көмек» іздеуінде ЛИСП программасын құру. 

№2 нұсқа. Тұжырымдары предикаттарға  негізделген  программа құру.

a)       Іздеуді деректерден бастайтын ойын программасын құру.

b)      «Робот пен гүл» ПРОЛОГ программасын құру. 

c)       «Жемістер жіктелуі» іздеуінде ЛИСП программасын құру. 

d)      Іздеуді мақсаттан бастайтын ПРОЛОГ программа құру.

№3 нұсқа. Есеп нысандарының байланыстарын құруға негізделген  программа құру.

a)   «Адам жегіштер мен Миссионерлер» ЛИСП программасын құру. 

b)  «Қазақтың аңыз-адамдары» анықтамалық ПРОЛОГ программасын құру. 

c)  «Робот және алма» ЛИСП программасын құру.

d)       «Жылан жүрісі» ойынына ЛИСП программасын құру.

№4нұсқа. Есептегі операторларды анықтау арқылы программа құру.

a)       ПРОЛОГ тілінде «Ауа райын болжау» программасын құру. 

b)      «Емдік сөздер әлемі» деген ЛИСП тілінде программа құру. 

c)       «Жыртқыштар» деп аталатын ЛИСП тілінде программа құру. 

d)      «Рикошет» ойынын ПРОЛОГ тілінде құру.

 

Бақылау сұрақтары

 

1. Дұрыс құрылған Формула (ДҚФ) деген не?

2. ДҚФ жиынына арналған ЖӘНЕ/НЕМЕСЕ графын сипаттаңыз.

3. ДҚФ жиынына арналған  іздеу стратегияларын атаңыз?

4. Резольвенция принципі қалай іске асады?

5. Кванторларды атаңыз және сипаттаңыз.

6. Логикалық түрде шығару концепциясының мәні неде?

7. Бос сөйлем деген не?

8.  Математикалық операцияларды атаңыз.

9. Жалпылық, бар болу кванторларының айырмашылығы қандай?

10.  Резольвента деген не?

 

Зертханалық жұмыс №5. Продукция үлгісіндегі сарапшы жүйелерді және оның құрамдас бөліктерін жобалау

 

Жұмыстың мақсаты:

-       Сарапшы жүйелерді жобалаудағы негізгі талаптарды игеру;

-       Сала мәселесіне қатысты продукция үлгісін жобалауды игеру;

-       Продукция үлгісінің құрамдас бөліктерін құруды үйрену.

 

Жұмыс тапсырмасы:

1.   Сарапшы жүйелерді жобалаудың негізгі белгілерін ажырату.

2.   Продукция үлгісінің  негізгі мақсатын анықтау.

3.   Продукция үлгісінің  сөйлемдермен берілген сипатын анықтау.

4.   Продукция үлгісінің құрамдас бөліктерінің санын анықтау.

5.   Продукция үлгісінің Сұхбат бөлігінің құрылымын құру.

6.   Сарапшы жүйенің жұмысшы жадысының түрін анықтау.

7.   Сарапшы жүйенің түсіндіру бөлігіндегі механизмді анықтау.

8.   ПРОЛОГ немесе ЛИСП тілдерінде программа құру.

 

Қажетті ресурстар:

4.     Дербес компьютер.

5.     Турбо-ПРОЛОГ ортасы.

6.     ЛИСП ортасы.

 

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Сарапшы жүйе көмегімен  шешілетін көптеген қолданбалы есептер бар. Сарапшы жүйе дегеніміз  адам-маманды белгілі бір салада ауыстыра алатын компьютерлік программа.  Сарапшы жүйелерді жобалау үшін адам-маманның болуы міндетті. Сарапшы жүйе құрамы жүйенің орындауға тиісті негізі функцияларын анықтап береді: жүйе пайдаланушымен адам тілінде сөйлесіп, адамша ұсыныс жасап, өз шешімін адам тілінде түсіндіріп, өз құрамындағы білімдерін адам баласы білімін қалай толықтырады, сондай тәсілмен толықтырып, өзіндегі бар білімдерді де адам сияқты жөндейді. Сарапшы жүйе программаларының басқа программалық өнімдерден тағы бір ерекшелігіне ол деректер, білімдер құрылымдарымен бірге арнайы шешімді шығару механизмін бөлек ұстап пайдалана білуін де жатқызамыз. Білім үлгілерін үш топқа бөліп қарастырамыз: продукция жүйе үлгісі, фреймдік үлгі, семантикалық желілер түріндегі үлгілер [15].     

Продукция үлгісінің білім қорындағы ережелердің түрі мынандай болады: ЕГЕР А  ОНДА  S, мұндағы  А- шарт; S- әрекет. Бұл ережеде егер  А шын болса, онда S әрекеті орындалады. Әдетте  S әрекеті, берілген шарт сияқты тұжырым бола алады, ондай тұжырымды, егер жүйеге ереженің   А шарты шын болған жағдайда жүйе шығарып бере алады. Білімді пайдаланудың продукция үлгісінің түрі: (i); P; Q: Ai => Bj ; N; Мұндағы i - ереже нөмірі, P- ереже приоритеті, Q- ережелерді қолдану аумағы  Ai => B  продукция ядросы, i, j – тұжырымның  => (секвенция) белгісінің қай жағынан алатынын көрсететін параметрлер. Әдетте  i  - Дерекқор, Білім Қоры, Сұхбат,  О (түсіндіру блогы) сияқты бөліктерден, ал  j – оның алынатын жақтары да сондай, содан басқа оған толықтыру блогы енуі мүмкін, N -  продукцияларға арналған түсіндірмелер.  Мысалы мынандай болып келуі мүмкін: АБД => ВБД  немесе  АБД => ВБЗ немесе АД => ВБЗ  [14].

1Мысал. «Консалтингтік қызмет көрсету» деп аталатын Сарапшы жүйені құру кезінде продукция үлгісін пайдаланамыз. Жүйенің Білім қорындағы бір ережені қарастырайық. Оның сөйлеммен берілген сипаты: «ЕГЕР  процессор аты = «Celeron» ЖӘНЕ  жады көлемі = 256 болса, ОНДА  осы параметрлері бар барлық компьютерлердің деректерін бер». Ереженің SQL сұрату тіліндегі  сипаты келесі түрде өрнектеледі: SELECT * FROM basic WHERE proc like 'Celeron%' and memory='256' ORDER BY  art.  Ереженің продукция ядросы мынандай болады: А1БД  ЖӘНЕ А2БД Þ ВБЗ. 

Енді Сарапшы жүйе бөліктерінің бірі - Сұхбатты  қалай құрамыз соны қарастырайық. Сарапшы жүйелерде Сұхбат блогын ұйымдастыруға арналған екі түрлі форма бар: біріншісі – шектелген табиғи тілдегі жиынды пайдалану, екіншісі бірнеше әрекетті алдын ала таңдау нәтижесінде сұхбат жүргізу. Бірінші формада сөздік-мәзір деп аталатын құрылымды пайдалану. Онда маман-адамның сөйлем қорынан, яғни лексиконынан тұратын сөйлемдерден кілттік сөздерді таңдап алып, әрекет жасау.  Екіншісінде белгілі бір іс-әрекетті беретін сөздерді алдын ала дайындап пайдаланушыға ұсыну.  Жалпы жағдайда Сарапшы жүйеде пайдаланушының екі категориясы бар. Олардың жүйеден талап ететін мақсаттары әртүрлі болғандықтан пайдаланушылар мынандай екі түрге бөлінеді: 1) әдеттегі пайдаланушы, оған сарапшы жүйеден кеңес қажет, сондықтан ол жүйемен адамша сөйлесіп, өзіне қажетті мағлұматты алады; 2) білім инженериясына жататын топ. Оларға саладағы маман адам және білім инженері.  Бұл топтың қажетін Сарапшы жүйенің білімді толықтыру бөлігі деп аталатын құрамдас бөлшегі орындайды. Ол бөлік сұхбат жүргізу нәтижесінде білімдерді толықтырып, жөндейді, өзгертеді. Осы  «Консалтингтік қызмет көрсету» деп аталатын Сарапшы жүйені құру кезінде оның Сұхбат бөлігін жасау үшін кілттік сөздер механизмін пайдаландық. Сонымен пайдаланушының жүйемен сұхбаты келесі түрде болуы мүмкін (3 суретті қараңыз).  Келтірілген мысалда пайдаланушы жүйеге табиғи тілдегі қарапайым сұрақтар қояды. Егер сұрақтар сарапшы жүйеде салынған белгілі бір ережелерге сай келсе, онда ол оны тауып, пайдаланушыға жауап береді.

2 Мысал. Сарапшы жүйенің аты «Электрондық құдағи».  Сұхбат бөлігінің мынандай кілттік сөздер:  «жұп», «қыз»  (немесе «ер адам», «әйел адам»), «ақпарат» арқылы басқарылады.  Қойылған сұрақтардан соң оларға берілген жауаптарды талдау басталады. Осы талдау нәтижесінде кілттік сөздермен пайдаланушы жауабы салыстырылады. Егер сөз дөп келсе, сұхбат не одан ары қарай жүреді немесе басқару білім қорының сұратуына түседі. Осылайша сұхбат арқылы басқарылған программа модулі іске қосылады. Түсіндіру-бөлігі. Сарапшы жүйенің маңызды бөлігіне түсіндіру жатады. Мысалы бұл бөлік міндетті түрде Сұхбат бөлігімен байланыста. Өйткені оның интерфейсі табиғи тілде өтетіндіктен, негізгі сөз қорының сөйлемдері осы блокта сақталуы мүмкін. 

 

 

 

 

 

 

 

 

 

 

3 сурет - Сұхбат блогының принскрині

 

Сондықтан осы блоктағы қабылданған механизмдерді түсіндіру бөлігінде де пайдалануға болады. Жүйенің білім қорымен түсіндіру блогы арасындағы байланыс түрі тіпті тығыз.  Ол үшін түсіндіру модульдері әдетте екі түрлі сұрақ төңірегінде құрылады. Ол сұрақтарға:  «Осы айтқан кеңесіңіз қалай пайда болды?» және «Сарапшы жүйе неге осындай шешімге келді?». Осы екі сұрақтарға жауап беру нәтижелерінің механизмдерін сарапшы жүйенің түсіндіру блогы басқарады. Жүйе  «Неге?»  деген сұраққа жауап беруі үшін ол жауап жолын соңғы қолданылған ережеден бастайды, яғни шешім қабылдау процесінің ең соңғы қадамынан бастайды. Мұндағы «Неге?» сұрағы жүйенің тұжырымға келу жолын ереже шартынан бастап, ереже қорытындысына қарай бағытталған жолмен алып жүреді.  Дегенмен шығару үдерісін басқа жағынан да зерттеу үшін оның ережелердегі кері тұжырымға келуін де қарастыру қажеттігі бар. Яғни тұжырымды талдауды оның қорытынды бөлігінен бастап, шарт бөлігіне қарай жүру жолын қарастыру.  Осындай талдауды іске асыратын сұраққа – «Қалай?» сұрағы жатады. Осы  «Қалай?» сұрағына жауап беру нәтижесінде, сарапшы жүйе пайдаланушыға қолданған білім қорының ережелерін көрсете отырып, қадамнан соң қадам арқылы шешімді алудың бүкіл процесін көрсетіп береді.  Шығаруды толық бейнелеп көрсету үшін бір мысал қарастырайық. Шығару желісі бірнеше П1, П2, П3 деген атаулары бар ережелерден тұрады дейік.  Оның продукция үлгісіндегі көріністері келесідей болсын: 

- П1: ЕГЕР А1 ЖӘНЕ А2 шын болса, ОНДА В1- шын;

- П2: ЕГЕР А3 ЖӘНЕ А4 шын болса, ОНДА В2- шын;

- П3: ЕГЕР В1 ЖӘНЕ В2 шын болса, ОНДА В3- шын.

Ал осы ережелер бір-бірімен желі (4 суретті қараңыз) арқылы байланысқан. Әр ережеге, оның шарт бөлігі мен қорытынды бөлігіне сөйлемдерден тұратын түсіндіру мәтіндерін байлап қоямыз. Яғни бұл мәтіндерді шаблондар түрінде ұйымдастыруға болады. Сұхбат бөлігі түсіндіру бөлігіндегі шаблон-өрістердегі мәтіндерді шығарып бере алады. Мысалы, «Консалтингтік қызмет көрсету» деп аталатын Сарапшы жүйені құру кезінде оның Түсіндіру бөлігін жасау үшін «Неге?» деген сұраққа жауап іздейтін механизмді пайдаландық. Сонымен пайдаланушының жүйеге  түсіндіруі  келесі түрде болуы мүмкін: «Сіз 17 тең монитор түрін (А1 шарты) таңдадыңыз»  НЕМЕСЕ «сіздің таңдаған процессор типі (А2 шарты)»,  сондықтан «қатты диск өлшемі көрсетілмеген (В1 соңы)», «сіз көрсеткен жады өлшемі =120 (А3 шарты)» НЕМЕСЕ «бейнекарта өлшемі көрсетілмеген (А4 шарты)», сондықтан «процессор бағасы көрсетілмеді  (В2 соңы)», осылайша  В1 НЕМЕСЕ  В2 шын емес, сондықтан «компьютердің жалпы құны көрсетілмеді  (В4 соңы)».

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

  

4 сурет -  Түсіндіру блогының тәсімі

 

Сарапшы жүйенің бөліктерін продукция үлгісі негізінде құруға арналған жаттығуларды меңгеруге қажетті терминдерге мыналарды жатқызамыз: сарапшы жүйелер, сарапшы жүйенің құрамдас бөліктері, сарапшы жүйе дерекқоры, білім қоры, білімді пайдалану үлгілері, логикалық үлгі, продукция үлгісі, сұхбат құрамдас бөлігінің механизмдері, түсіндіру құрамдас бөлігінің механизмдері, шығару стратегиясының механизмдері. 

  

Жұмыстың орындалу тәртібі.

1.     Сарапшы жүйелердің негізгі белгілерін анықтау.

2.     Қойылған  мәселенің жіктеудің қай саласына жататынын анықтау.

3.     Продукция үлгісінің  сөйлемдермен берілген сипатын анықтау.

4.     Продукция үлгісіне кіретін бөліктердің санын анықтау.

5.     Продукция үлгісінің Сұхбат бөлігінің құрылымын құру.

6.     Сарапшы жүйенің жұмысшы жадысының түрін анықтау.

7.     Сарапшы жүйенің түсіндіру бөлігіндегі механизмді анықтау.

8.     ПРОЛОГ немесе ЛИСП тілдерінде программа құру.

 

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент сарапшы жүйелерді жобалаудың негізгі белгілерін ажыратуды, продукция үлгісінің негізгі мақсатын, оның сөйлемдермен берілген сипатын,  құрамдас бөліктерінің санын анықтауды, үлгінің Сұхбат бөлігінің құрылымын, жұмысшы жадының түрін құруды, түсіндіру бөлігіндегі механизмді анықтауды, есепті Турбо-ПРОЛОГ және ЛИСП тілдерінде жасауды орындауы керек.

 

№1 нұсқа. Сала мәселесін  жоспарлауға қатысты продукция үлгісінде  программа құру.

a)       «Электрондық құдағи» продукция үлгісін  ПРОЛОГ-та  құру.

b)      «Косметика қызметін бағалау» продукция үлгісін  ЛИСП-те  құру.

c)       «Кәсіпорын активтері» продукция үлгісін ПРОЛОГ-та  құру.   

d)      «Еңбек биржасы» іздеуінде ЛИСП программасын құру. 

 

№2 нұсқа. Сала мәселесінде диагностика жасайтын  Продукция үлгіде  программа құру.

a)       «Көз дәрігері»  продукция үлгісін  ПРОЛОГ-та  құру.

b)      «Маклер» продукция үлгісін  ЛИСП-те  құру.

c)       «Автомеханик» продукция үлгісін  ПРОЛОГ-та  құру.

d)      «Темір жол анықтамасы» продукция үлгісін  ЛИСП-те  құру.

 

№3 нұсқа. Сала мәселесінде болжау құратын продукция үлгісінде  программа құру.

a)        «Ипотекадан көмекші» продукция үлгісін  ПРОЛОГ-та  құру.

b)       Кәсіпорын қаржысын болжайтын үлгісін  ЛИСП-те  құру.

c)       «Автокөлік логистикасының дамуы» үлгісін  ПРОЛОГ-та  құру.

d)       «Айлық ауа райын» болжайтын продукция үлгісін  ЛИСП-те  құру.

 

№4 нұсқа. Сала мәселесінде бейнені тануға қатысты продукция үлгісінде  программа құру.

a)            Қазақ сөздерін танитын продукция үлгісін  ПРОЛОГ-та  құру.

b)           Жануарлар дыбысын танитын продукция үлгісін  ЛИСП-те  құру.

c)            Сирек құстарды белгілерінен танитын үлгіні  ПРОЛОГ-та  құру.

d)           Ноталарды танитын продукция үлгісін  ЛИСП-те  құру.

 

№5 нұсқа. Сала мәселесін  талдауға қатысты продукция үлгісінде  программа құру.

a)            «Неврапаталог»  продукция үлгісін  ПРОЛОГ-та  құру.

b)           «Турист» продукция үлгісін  ЛИСП-те  құру.

c)            «Университет» продукция үлгісін  ПРОЛОГ-та  құру.

d)           «Кәсіпорын энергетикасы» продукция үлгісін  ЛИСП-те  құру.

 

№6 нұсқа. Сала мәселесінде  оқытуға  қатысты продукция үлгісінде  программа құру.

a)        «Жылу энергетикасы»  терминдерін үйрететін үлгіні  ПРОЛОГ-та    құру.

b)    «Телекоммуникациялық байланыстар» терминдерін үйрететін продукция үлгісін  ЛИСП-те  құру.

c)       «Энергетикадағы қауіпсіздік» терминдерін үйрететін продукция үлгісін ПРОЛОГ-та  құру.

d)       Нейрон желілері  пакеттерін талдайтын  сарапшы жүйе құру.

 

 Бақылау сұрақтары

 

1.        Продукция үлгісіндегі СЖ ДҚ құрамдас бөлігі деген не?

2.        Продукция үлгісіндегі СЖ жобалау көрсеткішін атаңыз. 

3.        Продукция үлгісіндегі СЖ Сұхбат құрамдас бөлігі деген не?

4.        Продукция үлгісінің басқалардан артықшылығы.

5.        Сарапшы жүйе құрудың мақсаты не?

6.        Қандай білім үлгілерін білесіз?

7.        СЖ қызмет ету режимдері қандай?

8.        Кілттік сөздер механизмдерін атаңыз.

9.        «Неге» сұрағына сай стратегияны атаңыз.

10.   «Қалай» сұрағына сай стратегияны атаңыз.

 

Зертханалық жұмыс №6. Фреймдік үлгідегі сарапшы жүйелерді және оның құрамдас бөліктерін жобалау

 

Жұмыстың мақсаты:

-       Сарапшы жүйелерді жобалаудағы негізгі талаптарды игеру.

-       Сала мәселесіне қатысты фреймдік үлгіні жобалауды игеру.

-       Фреймдік үлгінің құрамдас бөліктерін құруды үйрену.

 

Жұмыс тапсырмасы:

1)     Сарапшы жүйелерді жобалаудың негізгі белгілерін ажырату.

2)     Фреймдік үлгінің  негізгі мақсатын анықтау.

3)     Фреймдік үлгінің  сөйлемдермен берілген сипатын анықтау.

4)     Фреймдік үлгінің құрамдас бөліктерінің санын анықтау.

5)     Фреймдік үлгінің Сұхбат бөлігінің құрылымын құру.

6)     Сарапшы жүйенің жұмысшы жадысының түрін анықтау.

7)     Сарапшы жүйенің түсіндіру бөлігіндегі механизмді анықтау.

8)     ПРОЛОГ немесе ЛИСП тілдерінде программа құру.

 

Қажетті ресурстар:

1.       Дербес компьютер.

2.       Турбо-ПРОЛОГ ортасы.

3.       ЛИСП ортасы.

 

Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар

Білімдерді пайдаланудың фреймдік үлгісін 1979 жылы М.Минский ұсынған болатын. Фрейм ұғымы  - адам зейіні қабылдайтын түсініктердің жадыда қалыптасатын абстрактілі бейнесі.  Әр фреймнің өзіндік атауы және өз слоттармен олардың мәндерін қамтитын тізімдері болады. Слот терминал болуы да немесе төменгі деңгейдегі фрейм болуы да мүмкін [16,17].  Кез келген фреймді былайша құруға болады:  (ФРЕЙМ АТЫ:(1- слот аты: 1- слот мәні), …(N- слот аты: N- слот мәні)). Фреймдік үлгі адам жады мен оның ой-санасының жүйеленген психологиялық үлгісі ретінде ұсынылған. Фреймдер мынандай типтерге бөлінеді:  фрейм-экземпляр – сала мәселесінің ағымдағы күйін сипаттайтын фреймнің нақты іске қосылған түрі; фрейм-көрсетім – сала мәселесіндегі мүмкін болатын жағдаяттар мен нысандарын сипаттайтын шаблон; фрейм-класс – фрейм-көрсетімдердің жиынын сипаттауға арналған жоғарғы деңгейдегі фрейм [18].

  1Мысал  «Мейрамхана» сала аумағына қатысты фреймдік білімдерді пайдалану үлгісін құру. Шешу үдерісінің сипаты. Аталған фреймдік үлгісін құру үшін мынандай қадамдарды орындауымыз қажет:

 1) Шешуге қажетті сала аумағына қатысты абстракт нысандар мен ұғымдарды анықтау. Оларды фреймдер-прототиптер түрінде қалыптастыру;

2) Сала аумағына қатысты нақты объектілерді анықтау. Оларды фреймдер-экземплярлар түрінде қалыптастыру;

3) Салаға қатысты мүмкін болатын жағдаяттарды анықтау. Оларды фреймдер-жағдаяттар түрінде қалыптастыру. Егер сала аумағына қатысты прецеденттер болса, онда фрейм-экземплярларды қосу;

4) Жағдаяттар дамуының өзгеруін сипаттау. Оларды сценалар жиыны  арқылы сипаттау. Оларды фреймдер-жағдаяттар түрінде қалыптастыру;

5) Нақты есепке қатысты деректерді бейнелейтін фрейм-нысандарды, сценарийлерді, сценаларды қосу.

Мысалдың шешуі. Аталған сала аумағының кілттік ұғымдарға мыналар жатады: Мейрамхана, мейрамханаға келетін адам (клиент), мейрамханада қызмет атқаратын адамдар (аспазшылар, даяшылар). Біз қарапайымдылық үшін тек даяшыларды қарастырамыз. Қызмет ететін кісілер мен клиенттерді біріктіретін бір ұғым бар, ол «Адам» ұғымы.  Сонда «Мейрамхана» және «Адам» фреймдері прототип-көрсетім фреймдері де, ал «Даяшы» және «Клиент» фреймдері - прототип-роль фреймдері болады.  Сонымен бірге фреймдердің негізгі слоттарын да анықтау қажет. Яғни слоттардың осы шешілетін есепке қатысты қасиеттерін анықтап сипаттау қажет. Фреймдер типтерін анықтауды ыңғайлы ету үшін оны мынандай түрде бейнелейік: <Фрейм Слот аты Слот мәні Мәнді алу тәсілі Демон>. Слоттар мәнін қабылдап алу «сыртқы көздерден» деген ұғым бар. Бұл ұғым мынаны білдіреді: қажетті ақпаратты қосымша (пайдаланушыдан, экраннан, құрылғыдан деген сияқты) ақпарат көздерінен аламыз. Сонда біздің мысалымызға қатысты фреймдер түрлері былайша бейнеленіледі: 

< АДАМ жынысы Ер не әйел, жасы 0 жылдан бастап 120 жылға дейін >

< МЕЙРАМХАНА  Атауы  Мекені Жұмыс уақыты Бағыты Класс Орташа >

Фрейм-мұрагерлер өз аталарының барлық слоттарын өз құрамында ұстайды, олар белгілі бір параметрлер өзгерген жағдайда ғана анық түрде қолданыла алады.

<ДАЯШЫ (AKO АДАМ) жасы18-ден 55-ке дейін жұмыс өтілі, жалақысы жұмыс графигі,  жұмыс орны Фрейм-нысан >

< КЛИЕНТ (AKO АДАМ) Төлем түрі  Қолма-қол ақша немесе карточка Үнсіз келісім бойынша (Қолма қол ақша) Статусы Әдеттегідей немесе Vip Үнсіз келісім бойынша (Әдеттегідей) Тапсырыс формасы Тапсырыс бар немесе жоқ Үнсіз келісім бойынша (тапсырыс жоқ)  Сарқыттөлем>

Осы мысалдағы фреймдердің әртүрлерінің арасындағы өзара байланыстар графикалық түрде граф секілді құрылыммен беріледі (5 суретті қара). Бұл мысалда фрейм-көрсетім есебінде мына фреймдер: «Мейрамхана» және «Адам» жүреді.  Ал фрейм-роль есебінде  «Мейрамхана Дос», «Кафе Маг», «Даяшы», «Клиент», «Серік», «Айжан», «Болат» жүреді. Ал фрейм-жағдаят есебінде мына фреймдер «Тапсырыс», «Төлем» жүреді. Сонымен бірге соңғы фреймдер өз құрамында қосақталған процедураларды ұстайды. Фреймдік үлгіде жауап алу кезінде фрейм төбесімен қоса оның слоттары да есептеледі. Мысалы мына «“Маг” мейрамханасында даяшы болып кім жұмыс істейді?» деген сұраққа жауап алу үшін мына әрекеттер орындалуы қажет: сұрату мазмұнынан түсінікті болғандай «Мейрамхана “Маг”» деген фреймді іздейміз  және оның  «Серік» фреймімен байланысын анықтаймыз. Соңғы фрейм, «Даяшы» фреймінің мұрагері болып табылады. Сонымен бірге  «Жұмыс орны»  деген слотты да іздеп, оның фреймдердегі мәндерін табамыз.

 

 

5 сурет - «Мейрамхана» саласына қатысты фреймдер тәсімі

 

Фреймдерде мынандай байланыстар анықталуы мүмкін:

<Клиент AKO Адам Даяшы AKO Адам Айжан AKO Даяшы Серік AKO Даяшы AKO Болат AKO AKO Клиент>

<АдамМейрамхана Кафе-Мейрамхана"Дос" AKO Мейрамхана Кафе "Маг" AKO Мейрамхана AKO AKO>

<Мейрамханаға келу  «Маг» келу AKO Слот: келуші адам Слот: жұмыс орны Слот: жұмыс орны Слот: Мейрамхана Слот: Даяшы >

<Тапсырыс Төлем Болат Слот: сцена 2>

< Тапсырыс Болат Слот: сцена 4 AKO Төлем AKO Слот: төледі Слот: жасады Слот: қабылдады>.

Бұл мысалда «Даяшы» фреймінің мұрагері «СЕРІК» фреймі болады және ол «Маг» кафесінде жұмыс істейді.

Сарапшы жүйенің бөліктерін фреймдік үлгі негізінде құруға арналған жаттығуларды меңгеруге қажетті терминдерге мыналарды жатқызамыз: фрейм, слоттар, фреймдер типтері, слоттарды алу тәсілдері, демондар, граф түріндегі жазба, қосақталған процедура.

 

 Жұмыстың орындалу тәртібі.

9.       Сарапшы жүйелердің негізгі белгілерін анықтау.

10.   Қойылған  мәселенің жіктеудің қай саласына жататынын анықтау.

11.   Фреймдік үлгінің  сөйлемдермен берілген сипатын анықтау.

12.   Фреймдік үлгіге кіретін бөліктердің санын анықтау.

13.   Фреймдік үлгінің Сұхбат бөлігінің құрылымын құру.

14.   Сарапшы жүйенің жұмысшы жадысының түрін анықтау.

15.   Сарапшы жүйенің түсіндіру бөлігіндегі механизмді анықтау.

16.   ПРОЛОГ немесе ЛИСП тілдерінде программа құру.

 

Жеке тапсырмалардың нұсқалары.

Студентке берілетін тапсырманы оқытушы анықтайды. Жеке тапсырмада студент сарапшы жүйелерді жобалаудың негізгі белгілерін ажыратуды, фреймдік үлгінің негізгі мақсатын, оның сөйлемдермен берілген сипатын,  құрамдас бөліктерінің санын анықтауды, үлгінің Сұхбат бөлігінің құрылымын, жұмысшы жады түрін құруды, түсіндіру бөлігіндегі механизмді анықтауды, есепті Турбо-ПРОЛОГ және ЛИСП тілдерінде жасауды орындауы керек.

 

№1 нұсқа. Сала мәселесін  жоспарлауға қатысты фреймдік үлгіде  программа құру.

e)   «Риэлтор» фреймдік үлгісін  ПРОЛОГ-та  құру.

f)    «Сауда орталығы» фреймдік үлгісін  ЛИСП-те  құру.

g)  «Кафедраның көмекшісі» фреймдік үлгісін ПРОЛОГ-та  құру.   

h)  «Аумақтардағы Энергия тарифы» іздеуінде ЛИСП программасын құру. 

 

№2 нұсқа. Сала мәселесінде диагностика жасайтын  фреймдік үлгіде  программа құру.

e)   «Кітапхана» саласы бойынша фреймдік үлгіні  ПРОЛОГ-та  құру.

f)    «Деканат» фреймдік үлгісін  ЛИСП-те  құру.

g)  «Автомеханик» фреймдік үлгісін  ПРОЛОГ-та  құру.

h)  «Темір жол анықтамасы» фреймдік үлгісін  ЛИСП-те  құру.

 

№3 нұсқа. Сала мәселесінде болжау құратын фреймдік үлгіде  программа құру.

e)   «Магистратураға түсушілер» фреймдік үлгісін  ПРОЛОГ-та  құру.

f)    Облыста энергетика құрылыстарын салуды болжайтын үлгіні  ЛИСП-те  құру.

g)  «Демографиялық даму» үлгісін  ПРОЛОГ-та  құру.

h)  «Инфляцияның айлық көрсеткіштерін» болжайтын продукциялық үлгіні  ЛИСП-те  құру.

 

№4 нұсқа. Сала мәселесінде бейнені тануға қатысты фреймдік үлгіде  программа құру.

e)   Ағылшын сөздерін танитын фреймдік үлгісін  ПРОЛОГ-та  құру.

f)    Құстар дыбысын танитын фреймдік үлгісін  ЛИСП-те  құру.

g)    Сирек аңдарды белгілерінен танитын үлгіні  ПРОЛОГ-та  құру.

h)  Адам дауысын танитын фреймдік үлгіні  ЛИСП-те  құру.

 

№5 нұсқа. Сала мәселесін  талдауға қатысты фреймдік үлгіде  программа құру.

e)   «Экстрасенс»  фреймдік үлгісін  ПРОЛОГ-та  құру.

f)    «Турист» фреймдік үлгісін  ЛИСП-те  құру.

g)  «Дизайнер» фреймдік үлгісін  ПРОЛОГ-та  құру.

h)  «Қала энергетикасы» фреймдік үлгісін  ЛИСП-те  құру.

 

№6 нұсқа. Сала мәселесінде  оқытуға  қатысты фреймдік үлгіде  программа құру.

e)   «Жылу энергетикасы»  терминдерін үйрететін фреймдік үлгіні  ПРОЛОГ-та  құру.

f)    «Телекоммуникациялық байланыстар» терминдерін үйрететін фреймдік үлгіні  ЛИСП-те  құру.

g)  «Энергетикадағы қауіпсіздік» терминдерін үйрететін фреймдік үлгіні ПРОЛОГ-та  құру.

h)   Жасанды нейрон желілері  пакеттерін талдайтын  сарапшы жүйе құру.

 

Бақылау сұрақтары

 

1.        Фреймдік үлгінің артықшылығы мен кемшілігі

2.        Фреймдік үлгідегі Дерекқор құрамдас бөлігі қандай?

3.        Фреймдік үлгідегі Сұхбат құрамдас бөлігі қандай?

4.        Фрейм құрылымы қандай?

5.        Демон дегеніміз не?

6.        Қадай фрейм типтері бар?

7.        Қосақталған процедура деген не?

8.        Слоттарды алудың қандай тәсілдері бар?

9.         Фрейм жіктеулері қандай?

10.   Семантикалық желі үлгісінің артықшылығы.

 

Әдебиеттер тізімі 

1.       Доорс Дж. И др. Пролог - язык программирования будущего /Пер.с англ. – М.: Финансы и статистика, 1990. - 144 с.

2.       Братко И. Программирование на языке Пролог для искусственного интеллекта –М.:Мир, 1990.

3.       Клоксин, Меллиш «Программирование на языке Пролог»- М.: Мир, 1987.

4.       Дж. Стобо «Язык программирования Пролог» - М.: Радио и связь, 1993.

5.       Л. Стерлинг, Э. Шапиро «Искусство программирования на языке Пролог» - М:Мир, 1990.

6.       Логическое программирование http: //ru.wukipedia.org/wiki/   

7.       Хъювенен Э., Сеппянен Й. Мир Лиспа В 2-х т. Т.1: Введение в язык Лисп и функциональное прогаммирование. Пер. С финск. – М.:Мир, 1990. – 447 с.

8.       Хъювенен Э., Сеппянен Й. Мир Лиспа В 2-х т. Т.2: Методы и системы прогаммирования. Пер. С финск. – М.:Мир, 1990. – 319с.

9.       Сергиевский Г.М.  Функциональное и  Логическое программирование. –М.: Изд.Центр «Академия». -  2010. – 320 c.

10.   Люгер, Джордж,,Ф. Искусственный интеллект: стратегии и методы решения сложных проблем – М.:2003. - 864 с.

11.   Большакова. И., Мальковский М. Г., Пильщиков В. Н.  Искусственный интеллект. Алгоритмы эвристического поиска (учебное пособие) - М.: Издательский отдел факультета ВМК МГУ, 2002. - 83 с.

12.   Нильсон Н. Искусственный интеллект. Методы поиска решений./ Пер. с анг. –М.:Мир, 1973. - С. 270.

13.   Д. Марселус. Программирование экспертных систем на Турбо Прологе. Пер. с анг.-М.:Финансы и статистика, 1994, - 256 с.

14.   Ахметова М. Сарапшы жүйе және оның құрамы: Оқу құралы. Алматы: ҚазҰТУ, 2004 – 100 б.

15.   Джексон Питер, Введение в экспертные системы. /Пер.с англ.: Уч.пособие, 2001. – 624 с.

16.   Представление и использование знаний / Пер. с японск. /Под ред. Х.Уэно,  М.Исидзука, - М.:Мир, 1989. – 220 с.

17.   Приобретение знаний. / Пер. с японск. /Под ред. С.Осуги,  Ю.Саэки М.Исидзука, - М.:Мир, 1990. – 304 с.

18.   Фрейм. Модели представления знаний фреймами. http://alportal.ru.

19.   Семенов М.Ю. Язык Лисп для персональных ЭВМ - М.:Издательство МГУ, 1989.

20.   Ахметова М. Функционалдық-логикалық программалау және жасанды зерде жүйелері: Оқу құралы. -  Алматы: «Бастау» баспасы. 2012.- 330 б.