Баѓдарламалаудыњ технологиясы

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

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

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

 

 

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

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

 

Алматы  2013

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

 

Дәрістер жинағында жасанды Зерде жүйелері мен оның программалау тілдерінің теориялық мәселелері және ЛИСП, ПРОЛОГ тілдерінің мүмкіндіктері баяндалған.

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

Без. - 8,  Кесте -7, әдеб.көрсеткіші – 25 атау.

 

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

                                 

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

 

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

 

Кіріспе

 «Жасанды зерде жүйелері» оқу құралының мақсатына  Жасанды зерде (ЖЗ) программалау тілдерінің теориялық негіздері, жұмыс істеу принциптері және әдістерін оқып білу жатады.  Білімнің мұндай түрін оқып үйрену Жасанды Зерде саласындағы есептерді шешуге мүмкіндік береді.  Программалаудың бұл түрінде  жағдайды сипаттауға көп көңіл бөлінеді. Программалау мақсат термині төңірегінде өтеді. Сала мәселесін қою ситуацияны анықтаудан басталып,  одан ары қарай есепті «қалай» шешу туралы бүге-шүгесіне дейін сипатталады. Яғни әдеттегі программалау тәсілдеріндегідей «не» істеу керек екені көрсетілмейді. Сонымен қатар дәрістерде  Жасанды зерденің  әдістері мен үлгілерін қолдана білу дағдысын да үйрету, студенттерді іс жүзіндегі ЖЗ жүйелерін құруға арналған программалық қамтама жасау технологияларына оқыту әдістері келтірілген. 

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

 

1 Дәріс. Жасанды зерде тілдері. Логикалық программалау негіздері

 

Дәрістің мақсаты. Жасанды зерде (ЖЗ) есептеріне арналған программалау тілдерін таңдауға байланысты негізгі мәселелер.

Дәрістің мазмұны. Жасанды зерде тілдерінің тарихы. Программалаудың мағлұмдамалық түрінің мүмкіндіктері.

Жасанды зерде тілдерінде программалау әдістері функционалдық және логикалық программалау тілдерімен тығыз байланысты. Бұндай тәсіл программалаудың декларативттік стиліне жатады. Бұл тілдерге қойылатын талаптар: тілдер құрылымы компьютерлік архитектураның төменгі деңгейімен, операциялық жүйелер және аппараттық құралдар архитектурасы деңгейімен,  жады көлемі, процессор жеделдігімен шектеулі болуы қажет. Жасанды зерде жүйелері әдетте басқа ірі жүйелердің модульдері ретінде құрылады. Сондықтан осы ірі жүйелерге қатысты барлық стандарттық талаптар тілге де қатысты болады. Соған қарамастан функционалдық және логикалық программалаудағы модульдер көптеген прототиптер мен жаңа әдістерді меңгеруге қажетті құралдарды пайдалана алады. Сонымен бірге бұл тілдер жаңа заманғы программалау тілдеріне енетін жаңа құралдар негізін құруда көп роль атқарады. Қазіргі заманғы программалаудағы дүниежүзілік тәжірибе ЖЗ тілдеріндегі стандарттан үйренуден жалыққан жоқ. Осындай мақсатты іске асыруда болашақта функционалдық және логикалық программалау тілдерінің маңызы арта түседі деп есептейміз. Зерделік жүйелерді сипаттау екі түрлі деңгейде өтеді: білімдер және таңбалар. Жасанды зерде тілдерінде программалау әдістері функционалдық және логикалық программалау тілдерімен тығыз байланысты.  Бұндай тәсіл программалаудың декларативттік стиліне жатады. Сонымен бірге бұл тілдер жаңа заманғы программалау тілдеріне енетін жаңа құралдар негізін құруда көп роль атқарады. Қазіргі заманғы программалаудағы дүниежүзілік тәжірибе ЖЗ тілдеріндегі стандарттан үйренуден жалыққан жоқ. Логикалық программалаудың ерекшелігін арттыру оның құндылығын бағалайтын зерттеу жобаларын құрғанда ПРОЛОГ тілінің артықшылығын кеңінен көрсетеді.  Осы тілде жасалған көптеген қолданбалар ЖЗ мәселесіне арналған Халықаралық конференция мен логикалық программалауға арналған симпозиум еңбектерінде жарияланған. ПРОЛОГ программалаудың қисынды жүйедегi тіл. ПРОЛОГ тілін сарапшы жүйе - программалау бағытындағы кеңінен қолданылатын тілдер қатарына да жатқызады.  ПРОЛОГ-тың басқа тілдерден ерекшелігі - онда жазылған программалардың декларативтік сипатта болуы. Программаның негізгі құрылымдық блоктарына белгілі бір құрылымдағы нысандар жиыны және осы нысандарды байланыстыратын функциялар мен қатынастар жатады. ПРОЛОГ-та әдеттегі пограммаларда кездесетін шартты операторлар, цикл немесе өту операторлары сияқты басқару конструкциялары болмайды. ПРОЛОГ программасы - шығаратын мәселенің үлгісі есебінде жүреді. ПРОЛОГ - программалау, ойлау стилінің басқа түрін қажет етеді. Сондықтан кейде мұндай жұмыс - психологиялық белгілі бір күш салуды қажет етеді. Яғни, әдеттегідей мәселені шешу үшін белгілі бір іс-әрекет тізбегінің  орнына, ПРОЛОГ программасында нысандар мен олардың қарым-қатынас терминдері арқылы есептің мазмұнын беруі қажет. Программалаушы ПРОЛОГ-та есеп алгоритмінің орнына, оның логикалық спецификациясын құрады. Ал ары қарай алгоритм құруды ПРОЛОГ жүйесі автоматты түрде өзі жасайды. Ол оны өз бойындағы логикалық шығару механизмі көмегімен іске асырады. Бұл іс-әрекет былайша атқарылады: мәселенің мақсаты - дерекқорға сұрату есебінде құрылады. Бұл сұратуда салалық мәселе аумағының сипаттамасы бар. Сұратудағы мәндерді дерекқордан іздеу үшін ПРОЛОГ жүйесі - шығару механизмін іске қосады. Осылайша, ПРОЛОГ-та өтетін есептеулер есептің мақсатты тұжырымын дәлелдеуге арналған дедукция процесі болып табылады. Қазіргі кезде ПРОЛОГ тілі де, оның негізіндегі теориялық концепцияларда көптеген салаларда кеңінен тарап, етек жайды [1,2]. Ондай сала қатарына: есептеу жүйелері архитектурасы, программалау тілдері семантикасының формальды сипаты, дедуктивтік мүмкіндігі бар дерекқорлар сарапшы жүйелерді құру, лингвистика сияқты сала мәселелері жатады. ПРОЛОГ логикаға негізделген басқа тілдер сияқты  программалаудың мағлұмдалық стилінде орындалады, яғни  шектелген салалық мәселе есебін жоғары деңгейлік терминдерінде құруды іске асырады.  Процедуралық программалау стилінде алгоритмді орындаудың рет-ретімен жазылған нұсқаулар түріндегі программа жазылады. Логикалық программалауда компьютерге "шын деген не", екені, ал процедуралық программалауда  "қалай орындау керек" екені хабарланады. Бұндай мүмкіндік программалаушы адамға есепті шешу және сала мәселесіндегі спецификацияларды құруға көңіл бөлуін қамтамасыз етеді. Процедуралық программалау стилінде ол үшін "ары қарай не істеу керек" деген сұрақтың алгоритмдік нұсқаулары көрсетіледі.

Логикалық программалау идеялары 1930 жылдардың басында пайда болды. Сол жылдары француз математигі Жак Эрбран (1908 – 1931) ұсынған теорема логикалық программалау зерттеулерінің негізі десек те болады. Бұл зерттеуді теореманы автоматты түрде дәлелдеудің (АДТ) алгоритмі деп атайды. Ол бұл зерттеу нәтижесін «1-ші дәрежелі предикаттарды есептеуге» қолданды. Осыдан 30 жыл өткенде, ең алғаш рет Эрбран теоремасын американдық ғалым Ван Хао  іске асырды. 1965 жылы Дж.Робинсон Эрбран алгоритмін ЭЕМ лайықтап өңдеп, толықтырып, оның унификацияланған тиімді түрін құрды. Оны ол резолюция принципі деп атады. Логикалық программалау идеяларын іске асыруға Массачутес технологиялық институтының ғалымдары  Хьют пен Зусман өз үлестерін қосты. Олар 1960 жылдары Плэнер және Микро-Плэнер тілдерін құрды. 1960–1970 жылдары логикалық программалау теориясы Роберт Ковальский зерттеулерімен толықты. Ол 1974 жылы «Предикаттар логикасы – программалау тілі» деген еңбегінде ол логикалық қисынды есептеуде логикалық өрнектер орнына хорн дизъюнктері деп аталатын формуланы пайдалануды ұсынды. Логикалық программалау зерттеулері одан ары қарай да іргелі ізденістерден құр алақан болған жоқ. 1973 жылы Марсель университетінің Ален Колмэро бастаған бір топ ғалымдары резолюция принципіне табан тірей отырып, теореманы дәлелдейтін программа құрды. Бұл программа негізінде Ковальский жасаған интерпретатор тұрды. Ол табиғи тіл мәтіндерін жөндеп, өңдеу жүйесіне қызмет етті. Программа Фортран тілінде жазылды және ол өте баяу жұмыс істеді. Кейіннен бұл өнімді ПРОЛОГ деп атады. 1976 жылы Р.Ковальский мен Маартен ван Эмден логикалық программаларды құрудың екі түрлі жолын ұсынды: процедуралық және декларативтік. Іргелі теориялық жұмыстар мен көптеген қызықты ой желілері туындап жатса да, логикалық программалау концепциясы әсіресе технократ АҚШ-қа қатысты кеңінен даму таппады. Ол тек академиялық ортада қолданыс тауып отырды.  Мысалы 1977 жылы Д.Уоррен және Ф.Перейра  DEC PDP-10 ЕЭМ арналған ПРОЛОГ тілінің тиімді интерпретаторын жасады. Интерпретатор толығынан ПРОЛОГ тілінде құрылды. Тілдің осы іске асырылу жолы «Эдинбург версиясы» деген атаумен  көптеген жылдар бойы тілдің басқа версияларына прототип етінде қызмет етіп, тілдің ресми емес стандарты қызметін атқарды. Болашақты қамтитын маңызды идеялары мен сәтті орындалған жолдары бола тұрса да, жасанды зерде бағытында зерттеулер жүргізіп отырған батыстың көптеген ұйымдарының логикалық программалауға көзқарастары немқұрайлы болды. 1980 жылдары ПРОЛОГ-ты зерттеушілер саны  бүкіл дүниежүзі  бойынша саны жүзге де жетпейтін еді [3,4].  

Жағдай 1981 жылдың қазан айынан бастап күрт өзгерді. Өйткені Жапон елі бесінші буынды есептеу машинасын құрамыз деп дүние жүзіне мәлімдеме жасады. Онда ПРОЛОГ тілі осындай машиналардың негізгі базалық тілі есебінде қабылданған болатын. Осы 1980 жыл бойы ПРОЛОГ тақырыбы көптеген ғылыми журналдар мен жасанды зерде бағытындағы зерттеулер жарияланулары беттерінен түспей қойды. ПРОЛОГ тілі өзінің белгілі бір биіктігіне көтеріліп, оның стандарты енгізілді. 1990 жылы ПРОЛОГ-тың  ISO/IEC 13211–1:1995 деген стандарты пайда болды. Аталған «жапон жобасының» мақсаты аса айқын болмаса да, ондағы логикалық программалаудың маңызды ролі  анық бейнеленіп, көрсетілді.  Бұл жобаның негізгі мақсаты білімдерді өңдейтін жүйе құру еді.  Жүйені құрушылар жүйе пайдаланушымен қарым-қатынасты табиғи тілде жүргізу арқылы басқарса, ал программалаушы маманмен логикалық программалау тілінде іске асырады деген мақсаты көздеді.  Бұндай жүйелер өздерін өздері үйретумен бірге, өздеріндегі бар білімді жаңалармен толықтырып отыру қасиетін де меңгеруі қажет еді. Жапондар ЭЕМ жұмысын адамның ойлау деңгейіне көтеру мәселесін қойды. Олар фон-Нейман архитектурасынан бөлек деңгейдегі архитектура құруды көздеді. Жапон жобасынан соң американ және европа жобалары да дүниеге келе бастады.  Осындай мақсаттарға лайықталған PSI және  PIM деген логикалық программалау компьютерлері құрылды. Осыдан төрт жыл өткен соң, Delta деген атты ЭЕМ құрылды.  Онда логикалық шығару машинасы, реляциялық дерекқор және табиғи тілдегі интрефейс бар еді. Бұл машина қуаты 20 Гбайт болды. Мұндай машинамен жұмыс істеу кезінде дерекқордағы операцияларды қатар түрде атқару қажеттігі мен жұмыс атқару жылдамдығының миллиард липсқа жетуі анықталды. Мұндағы липс дегеніміз бір секунд аралығындағы логикалық қорытынды шығару қадамдары. Бұл мақсатты орындау үшін 100 параллель жұмыс атқарып тұратын процессорлар қажет болды. Бұндай 100-ядролық процессорлар жапон елінде 1990 жылдар басында болады деген сенім бар еді. Қазіргі таңда көп ядролы процессорлардың кеңінен шығарыла бастауы логикалық программалау мен ПРОЛОГ тілінің қатар есептеулермен біріге отырып аса қажетті ғылыми зерттеулердің жаңа  деңгейлеріне көтерілуі осыдан болса керек. Сонымен бесінші буынды ЭЕМ жасау жобасы жасанды зерде саласындағы алғашқы жобалардай тағы да тоқырауға ұшырап жабылды. Бірақ  оған кеткен қаншама еңбектер мен зерттеулердің барлығы босқа болды деген ойдан аулақпыз.  Жобалар нәтижесінде білімді пайдалану және логикалық параллель қорытынды шығару қисындарының зерттеулері мен жинақталған тәжірибелер жасанды зерде саласында жаңа ойларға қозғау салып, логикалық программалау әдістеріне қызығушылық тудырды. Қазіргі кезде, ПРОЛОГ тілі жапон елі мен Европа елдерінде  жасанды зерденің ең кең тараған тіліне саналады. Ал АҚШ-та жасанды зерденің көп тараған тіліне функционалдық программалаудың тілдері жатады [9].  

Қазіргі кезде ПРОЛОГ тілінің іске асырылған 30 ға жуық түрлері бар.  Соның ішінде «коммерциялық»  деген атпен  белгілі ПРОЛОГ жүйелерге:  Quintes Prolog және  SICStus Prolog жүйелер жатады. Бұл жүйелерде көптеген құралдар мен кең көлемді кітапханалар бар және оны  SICS (Swedish Institutebof Computer Science) қолдайды. Жылдамдығы жағынан осы SICStus жүйесінен  кем түспейтін және екілік кодалы компиляторы бар  GNU Prolog  шығарылды. Кейбір кеңейтулері бар, байт-кодаға негізделген, іске асырылған жүйелердің ең жылдамы  B-Prolog жүйесі бар. Пакет түрінде құрылған Strawberry Prolog жүйесі  ПРОЛОГ тілімен танысуға және Windows және Linux ортасында шағын программалар жазуға жарайды. Дегенмен бұл жүйе күрделі программаларды жазуға жарамайды. Тағы бір атап өтуге жарайтын шағын компьютерлерге арналған Palm Toy Language Palm деп аталатын ПРОЛОГ түрін  айтуға болады. Қазіргі кезде кеңінен тараған ПРОЛОГ жүйелерінің біріне SWI-Prolog жүйесі жатады. Онда  XPCE графикалық құралдары және оның GNU лицензиясы бар. Бұл шығарылатын GNU-Prolog компиляторы екілік кодасында жұмыс істейді. Бұл зерттеулер 80 жылдардың соңынан басталып, қазір ол білім, ғылым саласында, коммерциялық қолданбаларда кеңінен пайдаланылуда. Ресейде ПРОЛОГ-тың «ПРОЛОГ Д» «Акторный ПРОЛОГ», «Флэнг» деп аталатын версиялары пайда болды. ПРОЛОГ-тың «Акторный ПРОЛОГ» деп аталатын версиясы Ғаламтор агенттерін құру және зерттеу саласында қолданылады. Бұл саланың негізгі атқаратын міндеті  нақты пайдаланушы мүддесіне сәйкес Ғаламтордағы деректерді жинап, талдап, осы жұмысты автоматтанырады. Яғни бұл агенттер әмбебап іздеу жүйелері сияқты қызметті орындайды. «Акторный ПРОЛОГ» версиясы ПРОЛОГ тілінің негізгі жақсы ерекшелігін пайдаланады, яғни тілдің негізгі идеясы Ғаламтор тақырыптарының гипермәтіндік құрылымына және адам баласының ақпаратты іздеудегі әдетіне сәйкес келеді. ПРОЛОГ-ты осы салада қолдану оның негізгі ерекешеліктері мен қасиеттерін кеңінен пайдалану болып табылады. Өйткені ПРОЛОГ тілі әмбебап программалау тілі болумен қатар  сұрату тілі және мәтіндерді синтаксистік талдауда қуатты құрал болып табылады. Қазіргі кезде дүниежүзілік ғаламтор дамуында үлестірілген деректер семантикасына  және оны мағлұмдалық өңдеу әдістеріне деген  қызығушылық бар. Ол қазір Web 2.0 деген атауға сәйкес дамытылуда. Осыған байланысты OWL тілінің концепциясы бар.  Бұл тілді классикалық ПРОЛОГ тілінің кеңейтуі деп те қарауға болады.  Яғни оның негізінде бірінші дәрежелі логика концепциясы жатыр. Бұл OWL (Web Ontology Language) тілі Ғаламторға  арналған онтология тілі деп те аталады. Оның негізгі элементтері  XML/Web стандарты бойынша қалыптасқан. Ол Web құжаттары мен қолданбаларындағы сияқты кластар мен олардың арасындағы қатынастарды сипаттайтын байланыстарды көрсетуге арналған. Мұндай тіл негізінде деректердің  нысан және оның қасиетін көрсететін қалыбы жатыр.  Бұл тілді құрушылардың пікірлері бойынша ол Web парақтарды ғана емес дүниедегі бар болатын басқа да нысандарды сипаттауға жарайды. Сонымен қазіргі таңда, жаңа компьютерлік архитектуралардың және жаңа ақпараттық технологиялардың бағыттарының дамуына байланысты дүниежүзінде  логикалық программалаудың негізін құратын ПРОЛОГ тілінің көптеген диалектеріне деген қызығушылықтар бар.

 

2 Дәріс. Жасанды зерде тілдері. ПРОЛОГта жұмыс істеу

 

Дәрістің мақсаты. ПРОЛОГ программалау тілінің негізгі мүмкіндіктерімен танысу. Тілдің  статикалық, динамикалық дерек қорлары.

 Дәрістің мазмұны. ПРОЛОГ тілінің артықшылықтары. ПРОЛОГ тіліндегі айнымалылар.  Деректер құрылымы. ПРОЛОГ бөлімдері мен тізімдері. Басқару механизмдері. Кесу операторы.

ПРОЛОГ-тың басқа тілдерден ерекшелігі - онда жазылған программалардың мағлұмдамалық сипатта болуы. Программаның негізгі құрылымдық блоктарына белгілі бір құрылымдағы нысандар жиыны және осы нысандарды байланыстыратын функциялар мен қатынастар жатады. Программалаушы ПРОЛОГ-та есеп алгоритмінің орнына, оның логикалық спецификациясын құрады. Ал ары қарай алгоритм құруды ПРОЛОГ жүйесі автоматты түрде өзі жасайды. Ол оны өз бойындағы логикалық шығару механизмі көмегімен іске асырады. Бұл іс-әрекет былайша атқарылады: мәселенің мақсаты - дерекқорға сұрату есебінде құрылады. Бұл сұратуда салалық мәселе аумағының сипаттамасы бар. Сұратудағы мәндерді дерекқордан іздеу үшін ПРОЛОГ жүйесі - шығару механизмін іске қосады.  Осылайша, ПРОЛОГ-та өтетін есептеулер есептің мақсатты тұжырымын дәлелдеуге арналған дедукция үдерісі болып табылады. ПРОЛОГ  - логикалық программалаудың ең көп мәлім болған мысалы. Логикалық программа дегеніміз логика шеңберіндегі спецификациялар жиынтығы. ПРОЛОГ 1-ші дәрежедегі предикаттар теориясына негізделген. Бұл тілдің атының өзі былайша таратылады: Programming in Logic - Логикадағы Программалау. Программа орындалғанда интерпретатор үнемі логикалық спецификациялар негізінде шешімді шығарып отырады. 1-ші дәрежедегі предикаттар теориясы идеясын пайдалану  компьютерлік ғылымдар үшін және жасанды зерде мәселелерін шешу үшін  қолданатын  ПРОЛОГ тілінің ең үлкен жетістігі деп білуге болады. 1-ші дәрежедегі предикаттар теориясын проргаммалау тілінде қолдану түсінікті, элегантты синтаксис пен жақсы анықталған  семантиканы пайдалануға мүмкіндік береді. ПРОЛОГ тілінің даму тарихы теоремаларды дәлелдеу, оның ішінде резолюциялық терістеу алгоритмін жасау кезеңінен бастау алады.  Осындай қасиеттерге ие болған ПРОЛОГ өзі программалаудың мынандай: коданы автоматты түрде генерациялау, программаларды  верификациялау және жоғары деңгейлі программалау тілдерін құру мәселелерін.  шешуге болатын құрал есебінде көрсете білді.  ПРОЛОГ тілінің көптеген диалекттері бар. Қазіргі кезде тілдің  Уоррен және Перейра жасаған версиясы қолданылады. Алайда ПРОЛОГ тіліндегі деректерді қарапайым түрде бейнелеу үшін предикаттар логикасында қабылданған көптеген анықтамалар пайдаланылады. Дегенмен предикаттар логикасы синткасисінің ПРОЛОГ тілінен айырмашылығы да бар. Мысалы, ПРОЛОГ тіліндегі “: — “ таңбасы 1-ші дәрежелі предикаттар локикасының « таңбасына сәйкес келеді. ПРОЛОГ синтаксисінің басқа да айырмашылықтарын атап өтейік. Мысалы, предикаттар логикасындағы “НЕМЕСЕ”, «Егер болмаса» – деп аталатын операция атаулары ПРОЛОГ тілінде not деп белгіленеді. ПРОЛОГ тілінде предикаттар аттары мен өзара байласқан айнымалылар аттары әріптен басталған әріптік-сандық таңбадан тұрады. Айнымалылар үлкен әріптен басталған әріптік-сандық таңбадан тұрады. Мысалы likes (X, susie) өрнегі немесе  likes (Everyone, susie)  өрнегі мына фактіні білдіреді: "Сьюзиді әркім жақсы көреді".   Немесе  likes(george, Y), likes(susie, Y) деген өрнек Джордж және Сьюзиді сүйетін адамдар жиынын білдіреді.  Мысалы,  ПРОЛОГ тілінде мына қатынастарды  өрнектеу қажет болсын дейік: "Джордж Кейтті сүйеді және Джордж Сьюзиді сүйеді". Оны мына түрде жазуға болады: likes(george, kate), likes(george, susie). Осылайша "Джордж Кейтті сүйеді және Джордж Сьюзиді сүйеді" деген фактіні ПРОЛОГ тілінде: likes(george, kate); likes(george, susie) өрнектеледі. Ал мына фактіні   «Егер Джордж Кейтті сүймесе, онда Джордж Сьюзиді сүйеді»  ПРОЛОГ тілінде: Likes(george, susie): :-  not (likes (george, kate)) деп жазуға болады. ПРОЛОГ тілінде ешқандай шектеулер қойылмайды. Қойылатын жалғыз талап: формулаларды дұрыс құру. ПРОЛОГ тілінде программа құру дегеніміз - 1-ші дәрежелі предикаттар локикасында салалық мәселе аумағына қатысты нысандар мен олардың арасындағы қатынастарды сипаттайтын спецификациялар жиынтығын жасау. Нақты есепке қатысты спецификациялар жиынтығы Дерекқор (ДҚ) деп аталады. ПРОЛОГ интерпретаторы осы спецификациялар жиынтығына қатысты сұрақтарға жауап береді.  ДҚ сұратуы дерекқордағы жазбалар сияқты логикалық синтаксисте берілген шаблондар. ПРОЛОГ интерпретаторы шаблондар негізінде сұратулар ДҚ-дың мазмұнының логикалық себебі ме соны анықтауды жүргізеді. ПРОЛОГ интерпретаторы сұратуларды былайша өңдейді: ДҚ-дағы іздеуді тереңге бойлай солдан оңға қарай жүргізеді және көрсетілген сұрату ДҚ-дағы спецификациялар жиынтығының логикалық себебі ме соны анықтайды. ПРОЛОГ-та жұмыс істеуді оның  Турбо-ПРОЛОГ деген версиясы арқылы үйренеміз. Онда жазылған программа бес бөлімнен тұрады. Оның кілттік сөздері: domains, database, predicates, goal, clauses  түрінде болып, сол арқылы бөлімнің басталуын хабарлайды. Программалардың барлығында осы бес бөлімнің болуы міндетті емес. Сонымен бірге бұл тілде түсіндірулер программаның кез келген жерінде кез келген ұзындықтағы мына таңбамен: /* және */ белгіленеді [1,14]. Турбо-ПРОЛОГ тілінде программа құрғанда мына тәртіпті сақтау қажет: тілдегі нысандар мен қатынастардың барлығы кіші әріптермен жазылады; ең алдымен қатынастар (предикат) жазылады, содан соң үтір арқылы нысандар атаулары жазылып, атауларының тізімі дөңгелек жақшаға алынады; әрбір факт, мақсат соңында міндетті түрде нүкте (.) қойылады.  Программа орындалуы мақсат операторы табылғаннан бастап іске асады. Мақсат–ол программа шешуге тиісті мәселенің қалыптастырылған түрі. Ішкі мақсаттарды ПРОЛОГ өзі тапса, ал сыртқы мақсатты ол пайдаланушыдан сұрайды.  Бұл жағдайда Турбо-ПРОЛОГ  экранға Goal (мақсат) деген шақыруды шығарады. Содан кейін ол берілген мақсатты программадағы бар фактілер мен ережелермен салыстырады. Салыстыру принципінің схемасын өз есіңізде мықты сақтауыңыз қажет. Ол мынандай болып келеді: «жоғарыдан төмен қарай және солдан оңға қарай жүру». ПРОЛОГ-тағы дерекқорлар екі түрлі болады статикалық және динамикалық. Динамикалық ДҚ ПРОЛОГ-тың database деген бөлімінде орналасады. Дерекқордағы өзгерістерді мына ішкі предикаттар іске асырады:

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

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

3)  consult(файл аты) – оперативті жадыдағы файлды ашады.

ПРОЛОГ негізінен интерпретацияға жататын тіл. Тілдің кейбір версиялары толығымен интерпретация режимінде жұмыс істейді. Ал кейбір версияларын программа орындалуын жеделдету үшін немесе спецификациялар жиынтығының бөліктерін немесе барлығын компиляциялауға қолдануға болады. ПРОЛОГ тілі интерактивті тіл, пайдаланушы экранға мына таңба шыққанда « ?- » сұратуды енгізуі қажет. Мысалы ДҚ-ға тағы екі досты анықтайтын ережені қосу керек болсын дейік.  Бұл ереже былайша сипатталады: friends (X, Y): — likes (Х, Z), likes (Y, Z). Бұл өрнектің  талдауы: «Егер Х сүйетін Z және У сүйетін Z бар болса және дүниеде Z бар болса, онда  Х және У — дос». Бұл жерде мыналарды атап өтуіміз керек: біріншіден  предикаттар логикасында да, ПРОЛОГ тілінде де ауқымды айнымалылар анықталмағандықтан  Х, У және Z айнымалыларының анықталу аумағы friends ережесімен шектеледі. Екіншіден Х, У және Z, байланған немесе унификацияланған айнымалылар барлық өрнектер бойынша сәйкестендірілген. ПРОЛОГ интерпретаторы friends ережесін былайша өңдейді: алдыңғы мысал жиынтығына friends ережесі қосылады. ПРОЛОГ интерпретаторы мынандай сұрату жасайды: ?- friends (george, susie). Yes.

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

[1, 2, 3, 4]; [[george, kate], [allen, amy], [don, pat]];

[tom, dick, harry, fred]; [[ ]. 

Тізімді рекурсивті түрде өңдеудің мысалын қарастырайық. Оны member предикаты көмегімен элементтің тізім элементіне жата ма соны тексеру қажет. Аталған member предикаты екі аргументтен тұрады: элемент және тізім. Ол егер берілген элемент тізімде бар болса «шын» мәнін қабылдайды.

? member (а [а b с d, е]). Yes.

?- member(a, [1, 2, 3, 4]). No.

?- member(X, [а, b, c]). Х= а. Х = b. X= c.

ПРОЛОГ тіліндегі іздеуді басқаруда кесу операторын пайдалану.  Кесу операторы(cut) – «!» таңбасымен беріліп, аргументі жоқ, мақсаттық тұжырым ретінде көрсетіледі. Оның қолданылуында бірнеше тиімділіктер бар [5,6]. Біріншіден бұл оператор оған қатынағанда үнемі орындалатын оператор, екіншіден кері қайту жағдайында алдыңғы күйге келу мүмкіндігі болмаса онда осы операторы бар барлық мақсатты тұжырымдар «өтірік» деп есептеледі.  Программалауда кесу операторы бірнеше мақсатты орындайды. Біріншіден программалаушы адамға іздеу ағашының қалпын басқаруға мүмкіндік береді.  Егер ары қарай іздеу қажет болмаса, (толық іздеу) онда осы нүктеде ағашты кесуге болады. Осы кезде ПРОЛОГ тілінің кодасы функцияны шақыруды еске салады: егер ПРОЛОГ тілінің предикаты мәндердің бір жиынын «қайтарса», және осы кезде кесу операторына қатынау болса, онда интерпретатор унификацияның басқа қойылымдары үшін іздеу жүргізбейді. Егер осы мәндер шешімді бермесе де, іздеу ары қарай жалғаспайды. Екіншіден, кесу операторы рекурсияны басқаруға мүмкіндік береді. Кесу операторын қосу графты іздеу кезінде бір ғана шешім табылатынын білдіреді. Кесуді пайдаланудың тағы бір пайдасы программа жұмысын жеделдету және компьютер жадын үнемдеу.  Егер бұл оператор предикат ішінде болса, онда осы оператордың сол жағында орналасқан предикаттарға кері қайтуға арналған жады сілтемелері құрылмайды. Өйткені бұл жағдайда олар ешуақытта керек болмайды. Осылайша кесу операторын пайдалану қажетті шешімдерді табу үдерісін жадыны тиімді түрде пайдалану жағдайында өтуге мүмкіндік береді. Кесу операторы path предикатын қайтадан инициализациялауға қажет рекурсияны іске қосуда және сол арқылы графтағы іздеуді жалғастыруда пайдаланылады.

 

3 Дәріс. Жасанды зерде тілдері. Функционалдық программалау негіздері

 

Дәрістің мақсаты. Функционалдық программалау (ФП) негіздері және тарихы. Функционалдық типтер туралы ұғымдар.

Дәрістің мазмұны. Лямбда-есептеулер. Есептеудің әр түрлі стратегиялары.  ЛИСП тіліндегі есептеу түрлері. Префикстік және инфикстік  жазба. Функция типтері. Функционалдық программалау тарихы.  Функционалдық программалау мүмкіндіктері.

Функционалдық программалау негізін 1934 жылы А.Чёрч құрды.  А.Чёрч салып кеткен жол математика ғылымындағы іргелі зерттеулерге жатады, оның теориясы қазір әдебиетте А.Чёрчтің лямбда-есептеулері деп аталады. Әдеттегі математикалық мәтіндерде функцияны анықтау былайша өрнектеледі: f(x) = a +bx  , оның құрамында үш бөлік бар: ол f - функцияны белгілейтін таңба, оны функция идентификаторы деп атайды, екіншісі - (x) – аргументтер тізімі, және  оң жақта орналасқан өрнек, оны есептеу арқылы белгілі бір мәнді таба аламыз. А.Чёрч  анықтамасы бойынша функцияны келесі түрде жазамыз: f = λx.a + bx,  мұндағы теңдеудің сол жағында f - идентификатор, оң жағындағы өрнек лямбда-өрнек деп аталады. Лямбда-өрнек құрамында «λ» таңбасы бар, одан кейінгі орналасқан x айнымалысын байланған айнымалы деп, ал « . » таңбасынан кейінгі өрнекті лямбда-өрнектің денесі деп атайды.  Мысалы, мына өрнек (λx. x^2 + 3)5 бар делік. Аталған ережені пайдаланамыз: 5^2+3=28.Осындай амалдар әдеттегідей f(5) функциясын есептегенде де орындалады.  Яғни, функция мәні мына  f = λx. x^2 + 3  формуламен немесе мына өрнекпен  беріледі: f x= x^2 + 3

Қазіргі функционалдық программалау тілдері толығымен лямбда-есептеулерге негізделген. Оған бірнеше себептер бар:

1) лямбда-есептеулер функцияның рекурсивтік анықтамасының мағынасын табады, ол математикалық теңдік, соныменен ол ФП тілдерінің мағлұмдамалық семантикасын береді;

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

Ал «атаумен шақыру» «мәнімен шақыру» және  «қажетпен шақыру» механизмдерінің нәтижесі анықталатын функция атауы болады. Ал «қажетпен шақыру» («жалқау есептеулер») механизмдерінің нәтижесі ретінде кейін орындалатын есептеулері айтамыз. Кейінге қалдырылған есептеулер жалқау есептеулер»). Әдеттегі программалау тілдерінде функцияны шақыру оған енетін аргументтер мәндерін есептеуден кейін («атаумен шақыру» «мәнімен шақыру») орындалады. Аргументтер есебіндегі константалар функцияға тікелей беріледі, ал айнымалылар мәндері ретінде оларға параметрлер ретіндегі сәтте берілген мәндер пайдаланылады.

 

1кесте - ЛИСП тіліндегі есептеу түрлері және мысалдары

Қатаң есептеулер

Жалқау есептеулер

Дәрежені есептеу

(defun st(x n)

 (do ((res 1))

   ((= n 0) res)

   (setq res (* res x))

     (setq n (- n 1))))

;;атымен шақыру

> (st 3 3)

27

Тізім операциялары

 > (car (a b c))

A

> (cdr (a b c))

(B C)

> (cons(‘a ‘(b c))

(A B C)

> (cons(‘(a b) ‘(c d))

((A B) C D)

Тізімді бөлу және кері аудару

(defun razbei(l)

   (cond((null) nil)

     ((null (cdr l)) l)

(t (list (razbei (cdr l))

       (car l)))))

;;мәнімен щақыру

> (razbei ( 1 2 3))

(3 2 1)

Егер аргументтер арасында функция шақыруы болса, онда ең алдымен осы функцияны есептеу үдерісі іске қосылады. Әрине, егер функция ішіндегі аргумент пайдаланылмаса, онда оның есептелуі бос түрде өтеді. Кейінге қалдырылған есептеулер стратегиясының мәні мынада: аргумент тек ол бастапқы шақыру қайтаратын нәтижеге қажет болса ғана есептеледі.  Осы ерекшелікті кеңірек түсіну үшін факториалды есептейтін мысал түрін келтірдік (2 кестені қараңыз).

 

2 кесте - Есептеудің әртүрлі стратегиялары

Математикалық жазба

Дәстүрлі программалау

Функционалды программалау

fact(0) = 1;

fact(n) = n*fact(n-1) n>0

Function  fact (n:integer) : integer;

Begin If n = 0 then res: = 1

Else  Res := n*fact(n-1); End;

(defun fact (n)

(do((res n (* res n)))

( (> 2 n) (if (= n 0) 1 res))

(setf n(- n 1))))

 

Функционалдық программалау мыналарға: тізімдік құрылымдар алгебрасына, лямбда-есептеулерге, рекурсия теориясына негізделген. ФП тілдеріне: Lisp, Haskell, Miranda, Erlang және Рефал тілдері жатады. Функционалдық программалаудағы функцияны шақыру лямбда-есептеулер жазбасына негізделеді. Оларды префикстік және инфикстік жазбалар деп атайды. Жазбаның осындай түрлері 3-кестеде келтірілген.

          

3 кесте - Жазба түрлері

Префикстік жазба

Инфикстік жазба

f(x)

(f  x)

g(x ,y)

(g x y)

h(x, g(y ,z))

(h x (g y z))

x + y    

(+ x y)

x – y

(- x y)

x * y

(* x y)

x  / y

(/ x y)

 

ФП пайда болу тарихы. 1924 жылы М.Шейнфинкель қарапайым функциялар теориясын жасады. 1934 жылы Алонсо Черч осы зерттеуді лямбда-есептеулерін жиындар теориясын зерттеуге пайдаланды. 1940 жылы Хаскелл Карри айнымалысыз функциялар теориясын құрды. Қазір ол «комбинаторлық логика» деген атпен белгілі. Бұл теория лямбда-есептеулердің жалғасы. Осыны Д.Тернер жалғастырып комбинаторларды функционалдық программалау тілдерінің трансляторларының төменгі деңгейлі кодасы есебінде пайдалануды ұсынды. 1960 жылы осы теориялар негізінде Джон Маккарти ЛИСП деп аталатын программалау тілін құрды. 1970 жылдардың аяғында Дж.Бэкус жоғарғы дәрежелі функциялармен және комбинаторлық логика нотациясына жақын синтаксисипен жұмыс істеуге мүмкіндік беретін аппликативті жүйелерді құру жөнінде ой желісін ұсынды.  APL тіліндегі идеяларды одан ары қарай дамыта отырып,  ол FP жүйелерінің негізін салды.  Бұндай дамудың негізгі мақсаты  фон Нейман архитектурасына негізделген тілдердің тиімсіз жақтарынан арылу болатын. Функционалдық программалау зерттеулерінің тағы бір бағытына теоремаларды автоматты түрде дәлелдеу мәселесі жатады. 1970 жылдар аяғы мен 1980 жылдардың басында Эдинбург университетінің  Роберт Милнер бастаған ғалымдары ML (мета тіл) тілінің семантикасын анықтады. Бұл тіл жоғарғы дәрежелі функциялармен жұмыс істеумен қатар, типтерді автоматты түрде өзі шығарып тұратын қасиетке ие. Осы тілге ұқсас тілдің біріне Miranda тілі де жатады. Оны 1985–1986 жылдары Дэвид Тернер құрды.  Бұл жалқау функционалдық тілдердің ең алғашқы қарлығашы еді. Бұндай тілдер есептеу өрнектерін  оларға қажеттілік туғанша тоқтатып тұру қасиетіне ие. 1980 жылдардың ортасында Ericsson компаниясында қатар есептеу үрдістерін басқаруға арналған тіл ойлап табылды. Ол өнеркәсіпте, соның ішінде телекоммуникация саласында кеңінен қолданылуға ие болған Erlang тілі. Жаңадан туындаған Хаскелл тіліне Карри Хаскелл аты берілді. Тілдің алғашқы нұсқасы 1990 жылдардың басында құрылды. Қазіргі кезде Haskell-98 стандарты пайдаланылады. Ғылыми бастауын Ресейде  алған Рефал тілі. Бұл тілдің ең алғашқы версиясын 1960 жылдардың басында Валентин Турчин құрған.  Қазіргі кезде Рефал тілі xml-құжаттарын өңдеуге арналған тіл есебінде пайдаланылатын құрал ретінде қолданылып жүр. Өйткені осы тілдегі деректердің жалғыз және негізгі типі – нысандық өрнектер xml-құжаттарын пайдалануға ғажап түрде сәйкес келіп отыр [9].

Функция типтері. A және B типтеріндегі деректер бар делік. Бұл деректер сандар, жолдар, тізімдер, функциялар болуы мүмкін. Енді бір айнымалы  f функциясын қарастырайық. Оның айнымалысының анықталу аумағы A типіне, өз мәндерінің анықталу аумағы B типіне жатады делік. Сонда функция типі мына өрнекпен A→B анықталса онда оны функционалдық тип деп атаймыз.  Егер REAL – нақты сандар, POSITIV- теріс емес нақты сандар, INTEGER- бүтін сандар типтерін білдірсе онда мысалға Sin(x)  функциясының типі REAL→REAL  типінде, ал ln(x) функциясының типі POSITIV → REAL  типінде болады. Жалпы жағдайда типтер белгілеуде «→» таңбасы кездессе, онда ол функционалдық типте деген сөз. Каррирлеу. Бұл тип атауын есептеу үдерісінің сипаттауын комбинаторлық логикаға негіздеушілердің бірі Хаскелл Карридің атынан алған. Функционалдық тип ұғымын пайдалана отырып, көп айнымалы функцияны бір айнымалы функция есебінде қарастыру мүмкіндігі бар. Мысалы қосу x + y  функциясын алайық. Оның префиксттік жазбасы: add(x,y).  Ал функционалдық типі келесі түрде REALxREAL→ REAL  өрнектеледі,  мұндағы x белгісі декарттық көбейтуді білдіреді. Сонымен егер функциясының типі (A1 ∙A2 An) → B сияқты болса, онда A1 →( A2 (An→ B)…). екі түрлі типтегі элементтер есебінде қарастыруға болады. Функцияны осылайша өрнектеу оны каррирлеу деп аталады. Жоғарыда аталған add(x,y) функциясының қандай типте болатынын оның жазба түрі білдіреді. Егер жазба түрі add(x,y) сияқты болса онда функция типі REALxREAL→ REAL  түрінде, ал жазба түрі add x y сияқты болса, онда функция типі REAL→(REAL→REAL) түрінде болады. Аппликация және өрнекті жалпылау. Әдетте, f(a) деген өрнекті a аргументіне f  функциясын қолдану деп түсінеміз. Аргумент орнында, оны операнд деп атайды, кез келген өрнек, ал оператор орнында функция аты болады. Функционалдық программалауда f(a) функциясын  f және a аргументтеріне аппликация(қолданба) операциясын  қолдану нәтижесі деп қарайды. Ол былайша өрнектеледі: f(a) ↔ apply(f,a) де, осы операцияны аппликация деп атайды. Ал өрнекті жалпылау түсінігін былайша тарқатамыз: жоғарыда аталған apply операциясы өзіндегі екі аргументін де есептеп шығарады, және оның типі (A→ A) → (A→ A) түрінде болады. Осындай өрнектер, яғни барлық функциялар бір айнымалының функциясы есебінде қарастырылатын өрнектер, және функцияның аргументке қолданылуы apply операциясы іске асырылғандағы жағдайы оператор-операнд формасындағы өрнек деп аталады. Функционалдық программалауда apply операциясы анық түрде көрсетілмейді де, оның орнына мына жазба түрлері: ((x)(y)) немесе (x y) және егер жақшаларды алып тастасақ  xy қолданылады.  Жақшалардың санын: a1 a2 …an ↔ (…((a1 a2) a3)...an, азайту мақсатында жазылады, ал жақшалар келісім бойынша солдан оңға қарай орналасады. Мысалы: apply (apply(add,3),5). Мұндағы add  таңбасын каррирлеу функциясы деп қарасақ, онда бұл өрнек екі нақты 3 және 5 сандарын қосу операциясын білдіреді.  Бұл өрнектегі ең ішкі мәні apply(add,3) өрнегінде, яғни (add,3) бір аргументтік функция,  оның мәні константа, оған ең сыртқы apply қосылып, ең соңғы мән 8 тең [10]. Енді бұл өрнек былайша жазылады: ((add(3))5) ↔  add(3)(5) ↔ add 3 5.

Жалпы жағдайда, функционалдық программалау ортасында  атомдардан құралатын жиындардың элементтерін  S–өрнектер деп атайды. Әдетте программалауда кіші жиындар тізімдері (List) мен тізімдік құрылымдары (ListStructure(A)) қолданылады. Мысалы, мынандай тізімдік құрылым бардейік:  [a1 [a2, a3 , [a4]], a5]. Бұл тізімдік құрылым S–өрнектерді құрады. Тізімдік элементтердің бәрінің типтері біреу болады. Мысалы А-типі. Ол былайша: ListStructure(A) белгіленедіБұндай тізімдік құрылымдар үшін «ену деңгейі» деп аталатын ұғым бар. Ол ең көп «[» ашылу жақшасының санына тең. Мысалы жоғарыдағы тізім үшін  ол сан элементі aүшін 3 тең, ал  a5  элементі үшін 1 тең. Жоғарыдағы мысалдың компьютер жадындағы орналасу тәсімін 1-сурет анықтап береді. Мұндағы ұяшықтар жұбындағы ену «↓ » және шығу «  →» бағдаршалары нысанның «басын» және «құйрығын» білдіреді. Ал « Х» белгісі бос тізімді көрсетеді. Функционалдық программалауда меншіктеу операторы жоқ және айнымалылар бір рет мән қабылдаған соң өзгермейді. Функцияға қатынауда тек нәтиже ғана аламыз [10]. Функционалдық программалауда модульдерді біріктіретін екі түрлі өте маңызды элемент бар екенін айтып өтуіміз қажет. Біріктірудің бірінші түріне: «Функцияларды байлау, біріктіру» деп аталатын тәсіл жатады. Оған қарапайым функцияларды одан гөрі күрделі түріне байлауды жатады. Тізімдерді өңдеу, олардың элементтерін қосуға мысал: data [x] = [] | x : [x]. Бұл: икстер тізімі не бос тізім [], не басқа х тер тізімдердің конструкциясы. Берілген  x:xs  тізім, оның бірінші элементі — x, ал келесілері  — xs тізімінің элементтері. Бұндағы x элементі кез келген типте болуы мүмкін, мысалы x  «бүтін сан» болса, онда берілген анықтама бойынша бүтін сандар тізімі не бос тізім, не бүтін сандардан құралатын басқа бүтін сандар тізімінен тұрады.

 

 

 

 

 

 

 


1 сурет -  [a1 [a2, a3 , [a4]], a5] тізімінің графикалық бейнеленуі

 

Тізімдерді олардың элементтерін тік жақша ішінде жазу арқылы береміз. Мысалы [1] мынаны білдіреді 1:[]. Ал [1,2,3] деген 1:2:3:[] білдіреді. Біріктірудің екінші түріне: «Программаларды байлау» деп аталатын тәсіл жатады. Функционалдық программа деп ену деректері мен шығу нәтижесі бар программаны айтамыз. Егер  F және G - программа болса, онда (G.F) - G (F input) функциясын есептейтін программаға жатады. Аталған F программасы өз нәтижесін есептейді, оның нәтижесі G программасына арналған ену дерегі. Оны іске асыру үшін F программасындағы нәтижені уақытша файлға орналастырады.  Бірақ мұндай уақытша файлдар жадының көп көлемін алады, сондықтан оны шешу үшін функционалдық тілдерде мынандай амалдар қарастырылған. Аталған екі программа F және G бірге синхронды түрде орындалады. F программасы аталған G программасы белгілі бір ену деректерін оқығанда іске қосылып, ол аяқталғанша орындалып тұрады.  Одан соң F программасы тоқтап тұрады да, G программасы іске қосылады, ол кезекті деректер тобын оқиды. Егер G программасы F программасының барлық шығу деректерін оқып болмай аяқталса, онда F программасы үзіледі. Тіпті F программасы шексіз шығулары бар аяқталмайтын программа болса да, ол G программасы аяқталғанда тоқтайды. Ол цикл денесінен шығу шартын анықтайды. Ал оның өзі модульдегі аса қуатты құрал. Бұл әдіс «жалқау есептеулер» деп аталады. Өйткені F программасының орындалуы қанша мүмкін болса сонша сирек орындалады. Осы «жалқау есептеулер» әдісі функционалдық программалаудың ең қуатты құралына жатады.

 

4 Дәріс. Жасанды зерде тілдері. ЛИСП және Хаскелл тілдерінің мүмкіндіктері

 

Дәрістің мақсаты. Тілдердің жалпы принциптері. ЛИСП және Хаскелл тілдерінің негізгі принциптерімен танысу.

Дәрістің мазмұны. ЛИСП тіліндегі деректер типтері. ЛИСП тіліндегі арнайы, кіріктірілген функциялар, жаңа функцияларды анықтау, тізімдермен жұмыс. ЛИСП тіліндегі арифметикалық, логикалық, блок тәрізді функциялар және предикаттар.  Хаскелл тілінің мүмкіндіктері. 

ЛИСП тілін ең алғаш рет Джон Маккарти 1950 жылдың аяғында ұсынған. Ең алғашында бұл тіл рекурсивттік функциялар теориясына негізделген есептеу үлгісі ретінде қарастырылды. ЛИСП тілі  Фортран және Кобол тілдері сияқты көне тілдер қатарына жатқанымен ол үнемі өз дамуында программалау тілдерінің алдында келеді Функционалдық және логикалық принциптерін қолдана отырып программалаудың бұл үлгісінің негіздерін басқа тілдер (мысалы SCHEME, ML және FP) пайдаланып отыр. ЛИСП тілі жасанды зерде тәсілімен құрылатын программалар үшін ең тиімді де қажет құрал. ЛИСП тілінің трансляторының бірнеше түрі бар. Бұл тілдің ерекшелігі - жаңа ұғымдар құрудағы тиімділігі. ЛИСП тілінде машина жады былайша пайдаланылады: егер жаңа ұғымды жадқа орналастыру жағдайы қажет болғанда, машина зердесінен осы ұғымға қанша орын керек болса, сонша беріледі. Мұнда Паскаль тіліндегідей қанша орын қажеттігі алдын-ала дайындалмайды. Керісінше, ұғымды өшірген жағдайда, оның алып тұрған орны бірден босатылады. ЛИСП тілінің тағы бір ерекшелігі - программаларды машина жадында ұстау тәртібі. Мұнда олар бірінің ішіне  бірі кірген түрінде сақталады. Бұл іздеуге өте оңай және аз орын алады. ЛИСП тілінің, басқа программалау  тілдерінен негізгі айырмашылығы қатарына мыналар жатады: деректердің негізгі құрылымы ретінде тізім қолданылады; тілдегі программалар құрылымы да тізімдік түрде; тілдегі негізгі операциялар, тізімге арналған. ЛИСП тіліндегі деректерді сипаттайтын негізгі блок ретінде таңбалық өрнектер қарастырылады. Қарапайым түрдегі таңбалық өрнектер, әріптен басталатын, құрылымда әріптер мен цифрлар бар жолдар атомдардан тұрады. Тілдің ішкі құрылымында атом жады ұяшығымен беріледі. Т-таңбасы жеке атом түрінде беріліп, ол “True”(шын)-константасымен анықталады. Басқа арнайы атом NIL, бір жағынан “FALSE” (өтірік) константасын, ал екінші жағынан, бос тізімді анықтайды. Құрамды өрнектер бұтақталған құрылымдарда беріледі. Дегенмен, тізімдерді пайдаланудың кейбір кемшіліктері де бар. ЛИСП-де олар стек түрінде және тізімге ену - тек біржақты түрде өтеді. Тізімдегі элементтерде массив элементтеріндегідей қатынау мүмкіндігі болмайды. Яғни, деректерді іздеп табуға қиындық туатындықтан, ЛИСП-де көлемі үлкен жиынды деректерді беру үшін, басқа да құрылымдар енгізілген. Қазіргі кездегі ЛИСП версияларында массивтер, ХЭШ-кестелер, жазба тәрізді құрылымдар бар. ЛИСП тіліндегі тізімдер рекурсивті және келесі түрде сипатталады: (()(a b 1(c))class);(45 89 (()())). Бос тізім ЛИСП-де  () және – nil деп белгіленеді. Кейбір S-өрнектер есептеледі және олар формалар деп аталады. Қарапайым формалар мысалы ретінде сандарды, T және  nil атомдар- константалар бар. Форма ретінде функцияға қатынау түрін де қабылдауға болады, яғни келесі тізім:          (f a1 a2 ... an) (n≥0), мұндағы  f – функция аты, ал  ai – оның аргументтері, ол әдеттегі функциялар үшін формалар болуы да мүмкін.  Сонымен бірге ЛИСП тілінде арнайы функциялар да бар. Олардағы аргументтер саны кез келген  және аргументтері не есептелмейді, егер есептелсе оның есебі ерекше болады. ЛИСП тіліндегі программа осындай формалар тізбегін құрайды және программаның орындалуы осы формаларды бірінен соң бірін есептейтін тізбектерден тұрады.  Әдетте, программа  басында жаңа функциялар анықталып, содан соң оларға қатынаулар басталады. ЛИСП тілінде кіріктірілген (встроенных-стандартных) немесе оны ішкі деп те атаймыз, функциялар көп болады. Осы функциялар негізінде пайдаланушы программасы құрастырылады. Төменде осындай кіріктірілген функциялардың кейбір түрлері келтірілген. Бұл функциялардың барлығы ЛИСП тілінің - Common Lisp және MuLisp  деп аталатын версияларында бар [7,8]. ЛИСП тілінде комментарий деп мына (;) таңбаның арасындағы мәтінді айтамыз. 

Жаңа функцияларды анықтау. Бұл мақсатты орындау үшін  defun деп аталатын ішкі функция лайықты. Оған қатынау: (defun f (lambda(v1 v2  ... vn) e))        (n≥0)  (defun f (v1 v2 ... vn) e). Бұл функционалдық қалыптың мәні ретінде анықталатын функцияның атауы -  яғни f жүреді. Бұл қалыпты есептеудің жанама нәтижесі ретінде   vi  аргументтері (формальды параметрлерімен) және осы vi  параметріне тәуелді  e - қалыбындағы денесі бар  f  - атаулы жаңа ЛИСП функциясын келтіруге болады. Жалпы жағдайда әдеттегі ЛИСП функциясын жаңадан анықтау жоғарыда аталған жолмен жүреді. Яғни, тұрақты тіркелген аргументтер саны бар функция. Программада жаңадан анықталған функцияға қатынау: (f a1 a2 ... an) - мұнда ең алдымен ai  - функция аргументтері (нақты параметрлер) есептеледі,  содан соң vi жергілікті айнымалылар енгізіледі. Оларға әр айнымалыға сәйкес болатын ai  аргументтер мәні беріліп,  одан ары қарай осы vi  айнымалы мәндеріне сәйкес e  дене-қалып есептеледі.  Содан кейін бұл айнымалылар өшіріліп отырылады. Есептелген қалып мәні f  функциясының мәні. Тізімдерге қолданылатын операциялар. (car l) -  мұндағы l аргументінің мәні бос емес тізім болуы керек, ал функция мәні ретінде осы тізімнің жоғарғы деңгейіндегі бірінші  элемент қабылданады. (cdr l) - мұндағы l аргументінің мәні бос емес тізім болуы керек, ал функция мәні ретінде  осы тізімнің  «құйрығы», яғни бірінші элементі алынып тасталған тізім қабылданады. Мысалы егер X айнымалысының мәні болып (p(q r)) тізімі табылса, онда (car X)  қалыбының мәні p тең, ал (cdr X)  мәні ((q r)) тең болады. Бұл екі функциядан басқа осы екеуінің қызметтерінің араласуынан туындайтын функциялар да бар. Олардың атаулары a әрпінен басталып,  әрпімен аяқталады. Олардың арасында төрт a және d әріптерінің комбинациясынан тұратын позициялар бар. Осы жағдайда суперпозициядағы a  - әрпі car функциясының болуын білдірсе, ал  d  -  әрпі, cdr функциясы болады. Ал әріптер тізбегі суперпозициядағы car және cdr функцияларының қалай алмасып келуін білдіреді. Мысалы: (caddr l)  º  (car(cdr(cdr l))). Осы аталған суперпозициялық функциялардың l тізім-аргументтерінде өздеріне қажетті элементтер саны болады. Басқаша болған жағдайда программа үзіледі де қате туралы хабар шығады.  Тізім-аргументтерінде осындай қажетті элементтер саны болатын суперпозициялық функцияға nth функциясын да жатқызамыз. (nth n l) - мұндағы n аргументінің мәні оң бүтін сан (оны N деп белгілейміз), ал l аргументінің мәні - тізім болуы қажет. Ал функция мәні ретінде осы тізімнің басындағы N-дік элемент болады. Мысалы егер X айнымалысының мәні болып (p(q r)7) тізімі табылса, онда (nth 2 X)   қалыбының мәні 7 тең болады да, ал (caddr X)  мәні де 7 тең. Жоғарыда қарастырылған барлық ЛИСП-функциялары селекторлар деп аталады, өйткені олар тізімдегі белгілі бір элементтерді таңдап алады. Енді конструкторлар деп аталатын функцияларды қарастырайық. Олар өздерінің нәтижесі есебінде жаңа тізім құрады. (cons e l) – Бұл функция бірінші элементі ретінде e аргументінің мәні, ал тізім құйрығы ретінде l аргументінің мәні болатын тізімді құрайды.  (append l1 l2) - Бұл функция  екі (жоғарғы деңгейдегі) тізім элементтерін қосылуын (конкатенациясын) іске асырып, одан бір нәтижелі тізімді алады.  (list e1 e2 ... en)  (n≥1) -  Бұл функциядағы аргументтер саны кез келген сан болады және аталған функция аргументтер мәндерінен тізім құрады.  Соңғы нәтижелі тізімнің жоғарғы деңгейіндегі элементтер саны аргументтар санына тең. (last l) – Функция мәні бір элементтен тұратын тізім. Ол l  аргументтер тізіміндегі жоғарғы деңгейдің  соңғы элементі. Мысалы егер X айнымалысының мәні (p(q r)) тізімі және Y айнымалысы – тізім(t) болса,  онда (cons X Y) формасының мәні  ((p(q r))t) тең, (list X Y) мәні  ((p(q r))(t)) тең,(append X Y)  мәні   (p(q r) t), (last X) формасының мәні  ((q r)) тең болады.

Арифметикалық функциялар. Осындай функциялардың кейбіреуін қарастырайық. Мысалы: (length l) - Бұл функцияның l аргументінің мәні тізім болуы керек. Функция осы тізімнің элементтер(жоғарғы деңгейдегі)  санын есептейді.  Мысалы, (length X) мәні 2 тең, егер X мәні (p(q r)) тізіміне тең болса.  Келесі функциялардың аргументтерінің мәндері сандар. Ол сандарға арифметикалық амалдарды қолдануға болады.    (add1 n) Функция аргумент санына 1  санын қосып, оның нәтижесін өз мәні ретінде береді. (sub1 n) - функция аргумент санынан 1  санын алып, оның нәтижесін өз мәні ретінде береді. (+ n1 n2) -  функция мәні ретінде оның аргументтерінің мәндерінің қосындысы қабылданады. (- n1 n2)-функция мәні ретінде оның аргументтерінің мәндерінің айырмасы қабылданады. (* n1 n2)- функция мәні ретінде аргументтері мәндерінің көбейтіндісі қабылданады. (/ n1 n2) - функция мәні ретінде бір санның екіншісіне бөлгендегі бөліндісі қабылданады. (rem n1 n2) - функция мәні ретінде бір санның екіншісіне бөлгендегі қалдығы қабылданады.

Предикаттар.  Предикаттар деп олардың логикалық мәндері «шын» немесе «өтірік» деген мәндерге ие болатын қалып(форма) түрін айтамыз. ЛИСП тілінің ерекшелігіне «өтірік» мәніне ие есебінде бос тізім қабылданады да, ол мына ( ) таңбамен белгіленеді,  ал «шын» деп осы ( ) және  nil  бөлек басқа кез келген өрнектер қабылданады. (null e) -  функция өз аргументі бос тізім бе соны тексереді. Егер нәтиже оң болса, онда функция мәні  T тең, ал керісінше болса nil тең. (eq e1 e2) -  функция өз аргументтер мәндерін салыстырады, олар атомдар-идентификаторлар болуы қажет.  Егер олар тең болса, онда функция мәні  T тең, ал керісінше болса nil тең. (eql e1 e2) – алдыңғы функциядан ерекшелігі  ол өз аргументтер мәндерін салыстырумен бірге, олар атомдар-идентификаторлар болуымен қатар атом-сандар болуын қадағалайды.  Егер олардың аргументтері тең болса, онда функция мәні  T тең, ал керісінше болса nil тең. (equal e1 e2) - функция өз аргументтерінің кез келген S-өрнек мәнін  салыстырады. Егер екеуі де  бір S-өрнекті білдірсе, онда функция мәні  T тең, ал керісінше болса nil тең. (neq e1 e2) – алдыңғы функцияға ұқсас,бірақ аргументтер мәндері «тең емес»  салыстырылады. (member a l) – Бірінші аргумент мәні атом, ал екіншісінің мәні тізім. Бұл функция берілген атомды берілген тізімнің жоғарғы деңгейінде іздейді. Егер іздеу оң нәтиже берсе, онда функция мәні есебінде l тізімінің құйрығы, ал керісінше, nil тізімі беріледі.  Енді келесі берілген мына функцияларды қарастырайық.      (= n1 n2); (/= n1 n2); (> n1 n2); (>= n1 n2);         (< n1 n2)(<= n1 n2). Бұл функциялардың аргументтері сандар. Бұл сандарға «теңдік», «теңсіздік», «көп», «көп не тең», «аз», «аз немесе тең» деген салыстырулар жүргізіледі,  егер салыстырулар оң нәтиже берсе, онда T атомы, керісінше жағдайда nil қабылданады. 

Логикалық функциялар. (not  e) –функция логикалық терістеуді іске асырады. Оны null функциясының көшірмесі деуге де болады.  Егер аргумент мәні nil тең болса,  онда функция T деген нәтиже, ал аргументтің басқа мәндерінде нәтиже есебінде nil беріледі. Келесі функциялар ерекше топқа жатады. Олар өз құрамында кез келген саны бар аргументтерді ұстайды және олардың мәндерін есептеу міндетті емес. (and e1 e2 ... ek)  (k≥1) – функция конъюнкция операциясын іске асырады.  Функция кезекпен өз аргументтерін есептейді. Егер олардың біреуінің мәні nil болса, онда функция басқа аргументтерін есептемей-ақ өз жұмысын nil нәтижесімен аяқтайды да, керісіншеде келесі аргументінің мәнін есептеуге кіріседі. Егер функция осылайша соңғы аргументінің мәнін есептеуге жетсе, онда осы аргументтің мәнімен ол өз жұмысын аяқтайды. (or e1 e2 ... ek)  (k≥1) - функция дизъюнкция операциясын іске асырады.  Егер олардың біреуінің мәні nil болмаса, онда функция басқаларды есептемей-ақ өз жұмысын осы аргументтің мәнімен аяқтайды. Керісінше жағдайда келесі аргументінің мәнін есептеуге кіріседі. Егер функция осылайша соңғы аргументінің мәнін есептеуге жетсе, онда ол осы мәнімен ол өз жұмысын аяқтайды.

ЛИСП функцияларының қатарына ЛИСП шартты өрнегі деп аталатын өрнекті де жатқызамыз. Оның түрі: (cond (p1 e1,1 e1,2 ... e1,k1) ... (pn  en,1 en,2 ...  en,kn))  (n≥1,  ki≥1). Аталған функция кезекпен өз аргументтерінің бірінші элементтерінің - pi предикаттарын есептеп шығарады.  Егер олардың барлығының мәндері nil болса, онда функция өз жұмысын осы мәндермен аяқтайды. Егер nil мәнінен бөлек болатын pi предикаты  табылса, онда функция басқа предикаттарды қарастырмайды, осыған сәйкес аргументтен (шартты өрнектің тармақтары)  ei,j барлық қалыптарын бірінен соң бірін есептеп шығарады да осы соңғы мәнмен өз жұмысын аяқтайды. Басқа арнайы функциялар. Осындай функциялардың кейбіреуін қарастырайық. (quote e)  немесе 'e - функция есептеуді болдырмайды. Ол өз мәні есебінде есептелмеген аргументті береді. Мысалы  '(car (2)) формасының мәні (car (2)) өрнегінің өзі. (gensym) –функция ерекше атомдарды-таңбаларды құрады. Оған әр кез қатынауда ол жаңа атом-идентификаторды беріп отырады. Генерацияланатын атом нөмірлері басталатын префикс және бүтін санды алдын ала тағайындауға болады. Мысалы MuLisp [12] тілінде: (setq *gensym-prefix* 'S)   (setq *gensym-count* 2). Осыдан соң gensym функциясына әрдайым қатынағанда ол мына S2, S3, S4  және тағы басқа осы сияқты атомдарды беріп отырады. Блоктық функциялар және олармен байланысты функциялар. (prog (v1 v2  ... vn) e1 e2  ... ek) (n≥0, k≥1) - Функция есептеулерінде жергілікті vi айнымалылары енгізіледі, олар функцияның бірінші аргументінде анықталған және олардың барлығына бастапқы мән ретінде nil бос тізім мәні беріледі. Осыдан соң функция өзінің басқа аргументтері ei формаларын есептейді. Осы қалыптардың ең соңғысын есептеген соң prog функциясы осы форма мәнімен өз жұмысын аяқтайды. Оның алдына ол барлық өзінің жергілікті vi айнымалыларын жояды. Аталған  prog функциясының мәні есебінде ең соңғы ek формасының мәні пайдаланылатын болған соң, басқа  ei формалары үшін жанама эффектісі бар функцияларды пайданау тиімді. Осындай функциялардың кейбіреуін келтірейік. Аталған ei  қалыптарының бірі есебінде атом –идентификатор болады. Бұл жағдайда ол есептелмейді де, оны осы блок ішіндегі go функциясы таңба есебінде қабылдайды. (return e) –функция блоктан кезектен тыс шығуды білдіреді. Ол блоктық  prog  функциясының ішінде қолданылады, өйткені жақын маңындағы блоктық функцияның есептеуін аяқтайды.  Аталған блоктық функция мәні e аргументінің мәніне тең.  (go  e) – функция таңба бойынша өтеді. Оның аргументі есептелмейді, ол осы функцияға жақын орналасқан блоктык функцияның таңбасы. Осы go функциясы аталған блоктық функцияның формасын есептеуді толығымен аяқтайды. Функция формаға енеді және  таңбадан кейін көрсетілген форманы есептеуге кіріседі.  (setq v e) – Бұл меншіктеуоператорына ұқсас функция.  Оның v аргументі есебінде  осы сәтте бар болатын айнымалы атауы жүреді.  Функция осы айнымалыға жаңа мән меншіктейді ол – e қалпының есептелген мәні. Бұл мән setq функциясының да мәні. Келесі ерекше деп аталатын екі функция жиі пайдаланылатын (setq v(cdr v)) және (setq v(cons(e v)) конструкцияларды жазуды оңайластыру үшін қажет. (pop v) –функцияның аргументі есебінде  осы сәтте бар және мәні бос емес тізім болатын айнымалы аты жүреді. Бұл бос емес тізімнің құйрығы айтылған айнымалының жаңа мәні және ол pop функциясының өз мәні ретінде де қабылданады. (push е v) - функцияның екінші аргументі айнымалы аты, ал бірінші аргумент – кез келген форма қабылдайды. Функция осы форманы есептеп шығарады және жаңа тізім құрады.  Ол тізімнің бірінші элементі – есептелген мән, ал құйрығы – v айнымалысының мәнін қабылдайтын тізім. Алынған нәтижелік тізім v айнымалысының жаңа мәні және  push функциясының мәні. Мысалы егер X мәні (d(e)g), ал U мәні  (1 2) болса, онда (pop X) мәні ((e)g) тең, ал (push U X) қалыбының мәні ((1 2)d(e)g) тең болады.

Қазіргі Haskell тілі  көптеген жалпы мақсаттарды орындайтын қазіргі заманғы тіл. Ол функционалдық программалауды қолдайтындардың ұжымдық білімдерін жинақтап, қуатты, жалпыға бірдей, элегантты тілді құру мақсатын іске асырған тіл. Бұл тілдің өзіне қатысты бірнеше қасиеттері бар. Haskell тілінің ерекшеліктері қателердің етек жаюына кедергі бола алады. Енді осы ерекшеліктерді атап өтсек: Таза. Қосымша эффектер жоқ; Қатаң типтелген. Типтерді басқа мағынада қолдану мүлде жоқ; Ыңғайлы. Программалар қысқа, ол функцияға қарап бірден «барлығын түсіну» мүмкіндігін береді; Жоғары деңгейлі. Жалпы Haskell тіліндегі программалар  алгоритмді қалай сипаттайды солай оқылады. Бұл алгоритм тұжырымдамасын функцияның анық орындап тұрғанын тексеруді оңайлатады. Әдетте кодалау процессі абстакциялаудың жоғары деңгейінде өтетіндіктен, қателердің кіретін орындары азаяды; Жадыны басқарады. Программадағы «ілініп» тұрған сілтемелерге көңіл аудармай-ақ қоюға болады. Қоқыс жинағыштар оны жинақтап алады. Программалаушы тек алгоритмнің орындалуын қадағалайды да, жады көлемі жайлы ойланбайды. Модульді. Жалпы Haskell тілінде алдын ала құрылған модульдерден сіздің программаңызды жасауға мүмкіндік беретін күшті механизм бар. Яғни программалар модульдерден құрала алады. Әдетте, модульдік функциялардың дұрыс орындалуын қадағалау индукция бойынша өтуі де мүмкін. Егер комбинация орындалуының дұрыстығы қадағаланса, онда олардың комбинациясы да дұрыс нәтиже береді. 

 

5 Дәріс. Жасанды зерде есептеріне кіріспе.  Жасанды Зерденің негізгі ұғымдары

 

Дәрістің мақсаты. Жасанды зерде тарихымен,  қолдану аймағымен, құру аспектілерімен танысу.

Дәрістің мазмұны. Жасанды зердедегі деректерді бейнелеу мен іздеу мәселелері. Жасанды зерде программаларының салыстырмалы сипаты. Зерденің биологиялық және әлеуметтік үлгілері. Зердені физикалық жүйе есебінде ұйымдастыру принциптерінің мәселелері.

Д.Люгер анықтамасы бойынша: «ЖЗсаналық тәртіп  негізінде жатқан заңдылықтарды оның алдында болатын және  оған әсер ететін артефактарды зерттеу және құру арқылы  зерттейтін пән» [11]. Жасанды Зерде деп саналы тәртіпті басқаруға автоматтандыратын  компьютерлік ғылымның аумағын атаймыз.  Жалпы «Зерде –Интеллект» деген не? Яғни оны қанша мөлшерде құруға болады және ол қандай мөлшерде алдын-ала табиғатта бар?  «Шығармашылық» деген не, түйсіну деген не,  интеллект бар екенін байқап қадағалап көреміз бе әлде оны басқаратын жасырын күш бар ма? Тірі заттардың нерв клеткаларындағы білімдер қалай құрылған және зерделік құрлығыларды жобалағанда оны қалай қолдануға болады? Өзіндік талдау деген не және ол саналықпен қалай байланысты? Зерделік компьютерлік программаларды адам санасына ұқсас құру керек пе, әлде қатаң түрде «Инженерлік» жол жеткілікті ме? Саналылықты компьютер техникасы көмегі мен құруға бола ма ? Әлде зерде мағынасы тек биологиялық жәндектерге тән сезім мен тәжірибе арқылы ғана анықтала ма? Осындай көптеген сұрақтардың зерттеулер адам баласын көптен бері толғандыруда.

Логиканың дамуы. Орта ғасырдағы ғалымдар ойлаудың өзін есептеулер қалыбы деген пікірде болды. Сондықтан осындай зерттеудің нәтижесінде ойлаудың өзін алдымен қалыпқа келтіру сосын механикаландыру  қадамдарын істеу арқылы басқаруға бола ма деген пікірлер туындай бастады. 19 ғасыр математигі Джордж Буль, ойлау процесін сипаттайтын формальді тіл құруға әрекет жасады. Ол логика заңдарының математикалық қалыбын жасады. Бұл қалып қазір де компьютерлік ғылымдардың нағыз жүрегі десек те болады. Бұл еңбегінің ұлылығы, оның ойлап тапқан жүйесінің қарапайымдылығы. Ол логикалық есептеулерінің негізі үш логикалық операциядан тұрады:  “және-и- (* немесе ^),  “немесе-или-(+ не v)”,  “емес-не-(-|)”. Бульдың операциялары екі сандық мәнмен жұмыс істейді –1 және 0. Бульдың жүйесі екілік арифметика негізін қалады. Буль жасаған жүйе бүкіл логиканың қалыбын жасау жұмыстарына классикалық негіз болды десе болады. Арифметика негіздірін сипаттайтын спецификациялардың анық және дәл тілін Готлоб Фреге құрды. Ол өзінің “Арифметика негіздері” атты еңбегінде Аристотельдің “Логика” еңбегінде қаралып өткен көптеген сұрақтарды сипаттайтын тіл құрды деуге болады. Фреге тілі қазір “1-ші дәрежелі претикаттарды есептеу” деген атпен белгілі. Фреге тілі математикалық тұжырымдар элементтерін құратын теоремалар жазуға және оларың шындық мәндерін жазуға арналған таптырмас құрал болды. Цифрлық компьтерлердегі машина сомасына арналған ең алғашқы зерттеулерді британ математигі Алан Тьюринг жүргізді. Ол 1950 жылы “Вычислительная машина и интелект” деген еңбегін Mind журналында жариялады. Тьюринг машинаны ойлауға үйретуге бола ма ? деген сұрақты зерттеді Ол бұл сұрақтың өзінде белгісіздік бар деп есептеді. Яғни ойлау деген не? Машина деген не? Сұрақтардың өзіне жауап іздеу керек. Сондықтан ол интеллект деген ұғымды эмпирикалық тест тұрғысынан түсіндіруді жөн деп санады. Осылайша қазіргі заманда да өз маңызын жоймаған Тьюринг- тестісі деп аталтын тест жасалды. Тьюринг тестісі. Бұл тест ақылды машина қабілеті мен адам қабілетін салыстыруды өткізеді. Тестіні “Имитациялық ойын” деп атаған Тьюринг машина мен адамды әр түрлі комнатаға орналастырған. Машинаны-имитатор деп атаған. Тергеуші имитатормен тек терминал арқылы байланысады, ол оны көрмейді, естімейді. Тергеуші компьютерді адамнан тек оның берген жауабы арқылы ғана ажырата алады. Егер тергеуші компьютерді адамнан ажырата алмаса, онда Тьюринг пайымдауы бойынша машинаның санасы бар деп есептеуге болады.  Бұл тесттің маңызды қасиеттеріне: «Интеллект-Зерде» - ұғымы туралы нақты түсінік беретінін жатқызамыз. Яғни ол  саналы нысанның бегілі бір сұрақтар жиынтығына беретін әсері, яғни реакциясы, осылайша «Интеллект-Зерде»  ұғымы анықталып, ондағы түсініксіздік тудыратын сұрақтарды болдырмауға әрекет жасайды. Ондайларға «компьютер ойлау үшін өзінің ішкі үдерістерін пайдалана ма, әлде машина өзінің әрекеттерін саналы түрде жасай ма?»  деген сұрақтар жатады. Бұл сұрақтардың барлығына толық жауап әлі жоқ, дегенмен осының  төңірегінде өрбіген мәселелер мен оның әдістемелік жолдарын зерттеу қазіргі заманғы «Жасанды Зерде» ғылымына қатысты  саланың негізін құрды. Зерделік жүйелердегі табиғи тілді түсіну жолдары мәселе  шешілетін аумақтағы білімдерге тікелей байланысты. Табиғи тілді түсінуді іске асыратын компьютер программалары тілдегі жинақталған білімдердің анықталған пайдалану құрылымдарын қажет етеді. Осындай құрылым түрлерін жасағанда білімдердің өзгешілігін білдіретін қасиеттерінмен бірге, адамдар арасында болатын күрделі қарым-қатынастар түрлерін, бір сөздің бірнеше мағынада айтылуы, үйрену әдістері, әр түрлі көзқарастар сияқты мәселелердің барлығын есепке алу қажет. Табиғи тілді түсіну мәселесін шешу үшін бірнеше сұрақтарға жауап табу керек.  Біріншіден адам білімінің үлкен ауқымды көлемі қажет. Сарапшы жүйедегi программалардың жасанды зерде тарауларындағы басқа бағыттардан ерекшелейтін қасиеттерiне мыналарды: бұл жүйедегi программалардың құрылымы қиын, iс жүзiнде маңызы бар, шешiм жолын табуы қиын есептердi шығаруға қолданылады, жүйе өзiнiң тапқан шешiмi туралы түсiнiгiн пайдаланушыға сапалы деңгейде түсiндiрiп бере алуы керек деген сияқты мәселелерді жатқызуға болады. Бұл оның сандармен жұмыс iстейтiн алгоритмдерден ерекшелiгi, табылған шешiм өзiнiн  сапасы мен тиiмдiлiгi жағынан адам тапқан шешiмнен кем болмауы керек, маманмен пiкiр алысуы арасында өзiндегi бар бiлiмдi үнемi толықтырып отыратын қасиетi болуы қажет. Осы қасиеттеріне байланысты сарапшы жүйе, өзiнiң құрамында бiрнеше бөлiктер болуын қамтамасыз етуі керек. Ол бөлiктердi атап айтсақ: бiлiм қоры, жұмысшы зердесi (мәлiметтер қоры), түсiндiрме - басқару құралы, пайдаланушыға түсiнiктi болуын қамтамасыз ету бөлiгi, бiлiмдi ала бiлу бөлiгi, түсiндiру бөлiгi. Осы бөліктердің ішіндегі соңғы үш бөлікті жүйе интерфейсіне, яғни, жүйе мен адам арасындағы байланысты орындаушы компоненталар деп қарауға болады [25]. Бұл қызмет табиғи тілді пайдаланумен тікелей байланысты. Дәстүрлі және ЖЗ программалары арасындағы ерекшеліктер келесі 4 кестеде көрсетілген.

 

4 кесте - ЖЗ программаларының салыстырмалы сипаты

Сипаты

Дәстүрлі программа

ЖЗ программасы

өңдеу түрі

цифрлық

таңбалық

әдіс

алгоритмдік

эвристикалық

қадамдар анықтамасы

дәл шешім

дәл емес

алынатын шешім

оңтайлы

қанағаттандырарлық

басқаруды бөлу

аралас

бөлек

өзгерту

жиі

сирек

 

 

Кестеде келтірілгендей, әдеттегі программалар программалаушы анықтайтын тұрақты қадамдар тізбегінен тұрады және сандық ақпаратты өңдеу арқылы оңтайлы шешімді табуға талпыныс жасайды. Ал ЖЗ программалары қажетті шешімді табу үшін адамға ұқсас іздеу мен қателесу арқылы болатын жолды таңдайды.  Осындай тәсілмен іздеу нәтижесінде білімдер қорындағы мәліметтерді өңдеу таңба арқылы орындалады. Аталған ерекшеліктер қатаң түрде анықталмаған, ол тек проргаммалардың осы түрлеріне бейім болады. Программалардың құрылымы мен өзгертуіндегі жиіліктер программалар түрлеріндегі өңдеу технологияларына өз әсерін тигізеді. ЖЗ программалыра арналған барлық ерекшеліктер сарапшы жүйе программаларына да тән. Зерде – бұл ақпаратты өңдейтін тәсіл. ЖЗ программаларының көпшілігі білімдерді белгілі бір қалыптағы тілдер арқылы бейнелейді, содан соң оны шешілетін алгоритмге сәйкес, деректер мен программа әрекеттерін бөлу арқылы, яғни  фон Нейман салып кеткен принцип бойынша өңдейді. Қалыптағы (формальная) логика ЖЗ зерттеулерін бейнелеуге арналған маңызды құрал есебінде пайда болған. Сондықтан оның пайда болуы мен дамуының тарихын білу қажет. Логиканың дамуын бейнелейтін тарих жолдары 5 кестеде келтірілген.

Зерденің биологиялық және әлеуметтік үлгілері. Зерделік жүйелерді құру есептерін шешудің  математикалық әдістерінен басқа зерденің үлгісін биологиялық тәсілдермен де құру жолдары бар. Биологияда әр түрлі тәршәләк иелерінің қоршаған ортаға бейімделу үдерістері өтеді. Зерденің нейрондық үлгілерінде  өз ортасында өмір сүретін мидың дүниеге бейімделуі ондағы жекеленген нейрондар арасындағы байланыстарға әуелді. Мұндай жүйелердегі білімдер анық емес қалыпта болады. Генетикалық алгоритмдерде биологиялық эволюция принциптері күрделі мәселелерді шешуге пайдаланылады. Зерделік жүйелердің тағы бір түріне әлеуметтік жүйелерді жатқызамыз. Ол адам баласының қоғамындағы оның мүшелерінің тәртіптеріне байланысты туындайтын мәселелеріне қатысты факторлары бар зерделік үлгілер болуы мүмкін.

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

 

 5 кесте - Логиканың дамуы

Қалыптасқан теориялар

Мақсат

Авторлар

Графтар теориясы

Есептің жасырын құрылымын үлгілеуге арналған

Лейбниц,1887,

Эйлер, 1735

Бэббидждың  айырма және аналитикалық машинасы

Ең бірінші механикалық және әмбебап программаланатын есептеу құрылғысы

Чарльз Бэббидж, математик 19 ғ., Ада Лавлейс, 1961ж.

Буль алгебрасы

Іргелі сана заңдарын зерттеу

Джордж Буль, 1847ж.

Предикаттарды есептеу

Математикалық ой тұжырымдарын, шындық теоремаларын жазуға арналған құрал

Готлоб Фреге, 1884ж.

Теоремаларды автоматты түрде дәлелдеу

Логикалық синтаксис және қалыптағы шығару ережелері

Рассел, Уатхейд, 1950ж.

Тьюринг тестісі

Машинаның саналық қабылетін адам қабылетімен салыстырады

Алан  Тьюриг, 1950ж.

Сілтеме теориялары

Дұрыс құрылған формулалар нақты дүние нысандарына сілтеме жасайды

Альфред Тарский, 1944ж.

 

Танымдағы заттандырудың алатын орны.  Осы заманғы компьютерлер сәулеті ЖЗ есептерін қазіргі кездегі енгізу-шығару құрылғылар әлемімен тығыз байланысқа шығуына кедергі келтіреді.  Ол оны тек шектейді. Машиналық сананы іске асыру осы заманғы компьютерлер ұсынып отырған инерфейстен бөлек әсерлесу түрін қажет етеді. Мәдениет және зерде.  Зерде теорясы үшін өзінің мағыздылығы бойынша білімнің әлеуметтік жағын және адамның іс-әрекетін түсінуді зертеу жекеленген сана-мидың үдерісін зерттеуден кем түспейді. Түсіндіру табиғаты. Бір сала аумағындағы мәселенің өзі оған қандай тұрғыдан мақсат қоюға байланысты әр түрлі түсіндірулерге ұшырай алады. Таңбалар мағынасы оны түсіндіру аумағында ғана  кеңінен талдануы мүмкін.  Қате есептеу үлгілерін құру қажеттігі. Жасалған үлгінің дұрыстығын дәлелдеуге көптеген тәжірибелер құрудың қажеті жоқ. Қате құрылған ұлгілер әдетте, одан ары қарайғы қажетті зерттеулерге түрткі болады. ЖЗ кейбір құрылымдар, мысалы, семантикалық желі үлгілерімен сипаттауға болатын кез-келген құбылысты үлгілеуге мүмкіндік бар.  Дәл емес (нечеткий) шығарулар.Дәл емес шығаруларды екі тұрғыда қарастырады: сенімділік факторы бойынша және Заде логикасы бойынша. Әдетте, сарапшы маман адамдар өз ережелерін қалыптастырғанда, олар оны әр ережеге сәйкес келетін фактормен немесе сенімділік коэффициенті (КУ) деп аталатын айнымалымен салыстырады. Мысалы,  продукциялық ережелер үлгісі үшін ол былайша өрнектеледі: CF(P1 and P2) = min(CF(P1),CF(P2)) және CF(P1 or P2) = max(CF(P1),CF(P2)). Мұндағы P1, P2  - продукциялық ережелердің алдыңғы шарттарын бейнелейді.  Лофти Заденің дәл емес жиындар теориясында  белгісіздікті бейнелеуге мүмкіндік теориясының факторлары ұсынылады. Ол кісі дәл еместікті сандар арқылы бейнелеуді ұсынған. Мысалы егер шын  = 1 және өтірік = 0 болса, онда қалған мүмкіндіктердің барлығы осы екі санның аралағында орналасады. 

 

6 Дәріс. Жасанды зерде есептеріне кіріспе.  Жасанды зерде есептерін жіктеу

 

Дәрістің мақсаты. Жасанды зерде есептерінің шешу жолдары бағыттары зерттеулерімен танысу.

Дәрістің мазмұны. Машиналық зерде. Жасанды сана. Машиналық көру және жоспарлау. Роботтарды басқару тілдері. Машиналық үйрену. Табиғи тілді түсіну. Жасанды нейрон желілері, эвристикалық программалау, сарапшы жүйелер.

 Жасанды зерде жүйелерін құруда екі түрлі  бағыт бар. Бірінші бағытта адам баласының  зерделік іс қимылының нәтижелері, оның құрылымдық түрлері қарастырылып, осыларды ЭЕМ құралдары көмегімен құруға әрекет жасалады. Бұл бағыт жетістігі ЭЕМ дамуы мен программалау өнерінің дамуына тікелей байланысты. Жасанды зерденің бұл бағыты «машиналық зерде» деген атауға ие болды. ЖЗ екінші бағыты адамның нейрофизиологиялық және психологиялық механизмдерін қамтитын зерделік іс қимылының нәтижелерін кеңірек  – адамның саналы тәртібі тұрғысынан қарастырады. Бұл бағыт жасанды сана деп аталады да,  оның дамуы  адамзат туралы ғылым жетістігіне әкеледі. Аталған екі бағыт та үлгілеумен байланысты. Бірінші жағдайда имитациялық үлгілеу, екіншісі  – құрылымдық үлгілеуге байланысты болады. Өз кезегінде бірінші бағыта мынандай кіші кластар бар: Робототехника, Машиналық үйрену, Ойындар, бейнені тану. Робототехника саласы мыналарға: Жоспарлау және Машиналық көз деп жіктеледі. Робототехниканың дамуында предикаттар логикасын құру сияқты бөлігі бар теремаларды автоматты түрде дәлелдеу теориясы мен техникасы зор рөл атқарды. Техникалық көру жүйелерінің (СТЗ) ақпараттық көздері ретінде әр түрлі оптикалық жүйелерді, бейнекамераларды атауға болады. СТЗ жүйелері: тексеру және ұқсастыру деген екі түрлі есептер класын шешеді. Көру ақпараттарынан басқа: тактильді (тигізу), проксимиттік (жақындау), позициялық (жағдайы бойынша), күштік және сәттік мағлұмат деген сияқты түрлері пайдаланылады.  ЖЗ зерттеулерінде «Сөздік қатынас» деген атаумен топталатын жұмыстар да бар. Оларға: автоматты түрде аудару, мәтіндерді рефераттау, анықтамалық және іздеу жүйелерін құру сияқты жұмыстар жатады. Роботтарға жататын есептер класының біріне роботтарды программалау деген есеп түрін де жатқызамыз. Бұл роботтарды басқаратын тілдер. Олардың құрылу принциптері әдеттегі программалау тілдеріндегідей болады, олар тек роботтарды басқару есептерінің арнайы ерекшеліктерін, олардың құрылымдық ерекшеліктерін есепке алады.

Ал енді машиналық үйретуде үйренетін жүйелер ақпаратты эвристикалық түрде өңдейді,  яғни олар болашақта пайдалы болады- ау деген мәліметтерді таңдай алу қабылетіне ие болуы керек. Таңдаудың мұндай белгісін индуктивті шек (табалдырық) деп атайды. Машиналық үйрету өз кезегінде таңбалық тәсіл, жасанды нейрон әдістерімен үйрену  және эволюциялық үйрену  деген бөліктерге бөлінеді.

Жасанды зерденің Биологиялық жүйелерді үлгілеу деп аталатын екінші бағыты: жасанды нейрон желілері (ИНС), эвристикалық программалау, сарапшы жүйелер деген есептер кластарына жіктеледі.  ИНС жүйесінде адам миындағы нейрон құрылымының қызметін қайталауға тырысатын үлгілер пайдаланылады. Нейрондық есептеу үлгілерінде әр элемент өз енулеріне қатысты белгілі бір функция мәнін есептейді және оның нәтижесін желі элементтеріне береді. Соңғы нәтижелер желідегі қатар және үлестіру есептеулері арқылы іске асады. Олар желідегі нейрон бірігулері мен олардың шектік мәндері нәтижесінде пайда болады. Ал енді эвристикалық программалау деңгейінде есептің шешімін беретін адам миының ойлау операцияларының тізбектері қарастырылады.  Ол үшін адамға белгілі бір есепті шешу барысында өз ойлау тұжырымдарын түсіндірме ретінде жазып отыру тапсырылады. Барлық ойлау тұжырымдары есепті шешу нәтижесін қалай алғанын білу мақсатында, өте мұқият түрде хаттамаланады. Алынған материалды компьютер программасын құрғанда пайдаланады. Бұл программа адамның ойлау қабылетінің үлгісін беруі қажет. Осылайша компьютер программасы хаттама үлгісін қайталайды. Енді, келесі кластар тобына сарпашы жүйелерді жатқызамыз. Бұндай жүйелердегі білімдерді үлгілеу белгілі бір топтарға жіктелген. Оларды атап айтсақ: логикалық үлгі, продукциялық жүйелер үлгісі,  фреймдік үлгі, семантикалық торлар үлгісі [13]. Жалпы жағдайда  ЖЗ есептерінде екі әрекет орындалады: деректі бейнелеу және іздеу әдістері. Бірақ әзірге ЖЗ зерттеулерінде есеппті толық әрі мағыналы түрде қоюға болатын әмбебап теориялық әдістер жоқтың қасы. Дегенмен, мәселені қоюға және шешімді іздеу жолдарына қатысты белгілі бір жолдар қалыптасқан. Жалпы ЖЗ проблемаларын оқып үйрену және түсіну  үшін ең алдымен дискретті математика, предикаттар теориясы және графтар теориясы сияқты курстардан дәріс алу қажет. Сонымен бірге деректердің белгілі бір құрылымдық түрлері жайында да теориялық білімдер болуы қажет. Атап айтсақ: ағаштар, графтар, тізімдер, векторлар, қатарлар, жиындар, массивтер, сияқты түрлерден басқа стек және кезек деп аталатын құрылымдардағы рекурсия түрінде іздеу тәсілдерін де білу керек. ЖЗ есептерін шеше алатын әр түрлі құралдар бар. Оларға: белгілі бір сала аумағына қатысты нысандардың қасиеттерін сипатайтын предикаттар теориясының тілін, іздеу амалдарын қамтамасыз ететін деректер құрылымы мен алгоритмдерді жатқызамыз. Іздеу алгоритмдерін құруға арналған көптеген архитектура-сәулеттер бар. Мысалы «класс тақтасы» және продукциялық жүйелер деп аталатын әдіснамаларды айтуға болады.  Есептерді шешу үшін пайдаланылатын білімдерді бейнелеудің әр түрлі тәсімдері де бар. Оларға: концептуалды графтар, фреймдер, семантикалық желілер, сценариийлер деп аталатын әр түрлі құрылымдарды жатқызуға болады.  ЖЗ есептерінде қолданылатын амалдарға  белгісіздік жағдайындағы тұжырым жасайтын үлгілерді  және сенімсіздігі әлсіз ақпаратты пайдаланатын әдістерді де жатқызамыз. Осындай құрылым түрлеріне: Байес үлгілері, сенімділік желілері, сенімділік факторын пайдаланып шешімді табатын үлгілерді жатқызуға болады.  Машиналық үйрену мәселелері де ЖЗ есептері аумағына кіреді. Онда: индукция, концептуалдық үйрену, версиялар кеңістігінде іздеу деген сияқты таңбалық үйрету алгоритмдері бар. Жасанды нейрон желілерін оқып үйрену бөлімі де ЖЗ мәселесі қатарына кіреді. Нейрондық желілерде ақпарат құрылымы анық түрде құрылмайды. Ондағы ақпарат салмақ коэффициенттерін есепке ала отырып, өзара байланысқан процессорлар арасында орналасады да, ал жүйенің үйрену үдерісі желі түйіндеріндегі салмақ мәндерінін өзгерту және өзара арластыру нәтижесінде өтеді.  Нейронға ұқсайтын сәулет түрлеріне: персептрон, қатенің тура және кері қатару әдістері,  Кохонен, Гроссберг және Хебб үлгілері жатады.  

Генетикалық алгоритмдер де ЖЗ зерттеу аумағына кіреді. Яғни, осындай генетикалық алгоритмдер  негізінде мәселенің бірнеше мысалын шығарса, онда осы тәсілден соң сол сала аумағына қатысты басқа одан да кеңірек ауқымды есепте шешу мүмкіндігі туады. Мысалы оған жіктеу жүйелері мен генетикалық программалауды жатқызамыз. ЖЗ аумағының ең көне тармақтарының біріне теоремаларды автоматты түрде дәлелдеу бөлігі жатады. Сонымен бірге табиғи тілді түсінудуді зерттеу мәселесі де ЖЗ есептеріне кіреді. Ол зерттеулерге: марк үлгілерін, өзара кластерлеу әдісі және табиғи тіл сөйлемдерін статика жағдайында грамматикалық талдау әдістерін жатқызамыз.  Ойын теориясындағы да зерттеулер ЖЗ аумағына кіреді. Әдетте, көптеген ойындар нақты анықталған белгілі бір ережелер жиындарынан тұрады. Кеңістіктегі күйі бойынша іздеу тәсілдері ойын программаларының көпшілігіне тән.  Көбінде ойындарда іздеу тәсілі ретінде эвристикалық әдістерге негізделген жолдар пайдаланылады. ЖЗ зерттеулеріне әрине сарапшы жүйелерді құру және зерттеу әдістері де жатады.   Олар қазіргі таңда ЖЗ мәселелерінің ең көп зерттелген бөлігіне енеді. Адам баласының зияткерлік қасиетін үлгілеу адам санасыны зерттеу теориясының ең қуатты құралдарына енді. Көптеген психологтар компьютерлік ғылымның тілі мен теориясын адам санасының үлгісін зерттеуге пайдаланып келеді [11]. Жасанды зерде зерттеулері компьютерлік технологияларда үнемі жаңа ой желілерінің алдыңғы қатарында келе жатыр. Уақытты бөліп есептеу, тізімдерді өңдеу, программаларды сұқбаттық режимде жөндеу, эвристикалық программалау, графикалық интерфейс, толық көлемдегі экран дисплейін пайдалану «маус» манипуляторын пайдалану деген сияқты көптеген жаңа ұсыныстар жасанды зерде еңбектерінен өз бастауларын алған. Зерделік жүйелердегі негізгі шешілуге тиісті есептің бірі сала аумағындағы деректерді кодалау және оны іске пайдалану сияқты мәселеде де жасанды зерде тәжірибесі бар. Әсіресе ол білімдерді пайдалану мен бейнелерді тану мәселесінде анық байқалады. Әдетте, бейнені тану үдерісі екі кезеңнен тұрады:  үйрену және танудың өзі. Оның бірінші кезеңі индуктивті, екіншісі – дедуктивті түрде болады. Бірінші кезеңде зерттелетін нысандар класына жататын байқауға түскен көптеген деректер жиыны өңделеді, соның нәтижесінде белгілі бір шешілетін ереже қалыптасады. Екінші кезеңде қабылданған ереже бізді қызықтырып отырған класс нысандарының басқа түріне қолданылады.  Үйрету кезеңінде зерттеліп отырылған класқа қатысты белгілі бір заңдылықтар анықталады. Содан соң осы заңдылықтар жиыны сала үлгісі болады. Осы қалыпқа келтірілген заңдылықтар жиыны құрылатын жүйенің білім қорының негізін жасайды. Құрылған үлгі нәтижесінде жиындағы басқа нысандар қасиеттері тексеріледі. Осы жерде сарапшы жүйе режимдерінің арасындағы байланыстар іске қосылады. Бұл байланыстар шешім табу мен үйрену үдерістерінің тығыз түрде астасып жатқанын білдіреді.  Осы сияқты бейнені тану тәсімдері сарапшы жүйелер шешетін басқа да көптеген есептерге тән.

Сонымен қысқаша қорытындыласақ, жасанды зерде зерттеулерін саналы тәртіпті автоматтандыруға арналған компьютер саласы деуге болады. Білімдерге негізделген жүйелердің басқару құрамдас бөлігін жобалағанда, еске сақтайтын маңызды мәселенің бірі – іздеу әдісін, яғни шығару стратегиясын таңдау.  Таңдап алынған іздеу әдіс түрі ережелерді іске қосу мен оның жұмыс атқаруына әсер етеді. Таңдау үрдісі іздеу бағытын таңдау мен оны іске асыру тәсіліне байланысты. Мәселені шешу стратегиясын таңдағанда мына сұрақтарға көңіл аудару қажет: кеңістіктегі қай күйді бастапқы деп қабылдаймыз және іздеуді қай бағытта жүргіземіз.  Білімдерге негізделген жүйелерде іздеуді іске асырудан бұрын бастапқы нүктені қалай қабылдаймыз және іздеуді тура немесе кері бағытта жүргіземіз бе? Және іздеу үдерісін оңтайландыру қай бағытта жүреді? Ол үшін талас-дау тудыратын мәселені шешетін эвристикалық шешім жолдарын алдын ала тауып отыру қажет. Талас-дау іздеу бірнеше жолмен, бірнеше бағытта өтетін жағдайларда туындайды. Сондықтан олардың алдын алатын белгілі бір белгілер мен жолдарды анықтап отыру қажеттігі бар.

 

7 Дәріс. Есептерді шешу әдістері. Кеңістіктегі күй әдістері

 

Дәрістің мақсаты. Есепті шешудің кеңістіктегі күйі әдістерінің әр түрлерін оқып үйрену.  

Дәрістің мазмұны. Есептерді шешу әдістерін таңдау. Есептің күйі, опреаторлары туралы қысқаша теориялық мәліметтер. Іздеудің әр түрлі тәсілдері. LIFO және  FIFO құрылымдары. Бектрекинг механизмі.

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

 

2 сурет - «8» және «15» ойындарының сандар массивімен берілген бастапқы және мақсатты күйлері

Мысалы «15» ойыны  үшін фишкаларды қозғайтын төрт оператор бар: бос клетканы солға, оңға, жоғары, төмен жылжыту. Кей кезде таңдап алынған оператор белгілі бір күйге қолданыла алмайтын жағдайда да болуы мүмкін. Күйлер мен операторлар тілінде белгілі бір проблеманы шешу деп бастапқы күйге оны мақсатты күйге түрлендіретін операторлар тізбегін қолдануды айтамыз. Мысалы «8» және «15» ойынын қарастырайық.  Бастапқы күйлер 3∙3 және 4∙4 массивтері есебінде беріліп, мақсатты күйде де осы қалыптар тек басқа деректермен беріледі. Бұл күйлер 2 а,б-суреттерінде көрсетілген. Бұл мысалдағы күйлерді сипаттайтын қалып есебінде сандар массивтері,  ал оператор есебінде бос клетканың - солға, жоғары, оңға, төмен жылжуы берілген. Көпшілікке таныс «Теңіз шабуылы» ойыны бар. Компьютер осы ойынын сапалы түрде орындауына арналған алгоритмді құру керек. Ойынның қосымша шарттары: әр жаңа ойын үшін компьютер жүрістері мен ойын күйлері әр түрлі болуы қажет.  Ойында үш түрлі күйді атап өтуге болады: Ойын алаңын кездейсоқ координаталар бойынша, кемелерге тигенге дейін ату, одан соң екінші күйге өту; Алаңдағы тиген ұяшық төңірегін (тік немесе жатық) ату, ол кеменің неше палубалы екенін анықтау үшін қажет, тиген соң, үшінші күйге өту; Табылған бағытта кемені оны толығынан жойғанша ату, содан соң бірінші күйге өту. Сонымен ойын үш негізгі іс-әрекетке байланысты өрбиді: тигенге дейін ату,  бағытты анықтау үшін ату, кеме толығынан жойылғанша ату.

 

    

 

а) бастапқы күй        б) мақсатты күй

 

3 сурет - «Теңіз шабуылы» ойынындағы тізіммен берілген күйлер

 

 Осы ойынға арналған күйлер қалыптарын қарайық.  Қалыптар тізімдер түрінде беріледі. Оның түрі 3 (а,б) суреттерінде келтірілген. Осы күйлер қалыптарының тізімін функционалдық программалаудың тілі ЛИСП кодасында былайша бейнелейміз:

(setq input_stream (open «d:field.txt»:direction:input)) ; мәтіндік файлды оқу,

(defun set_missing_comp(lst i j ip jp)) ; кемелерді тізім түрінде оқу.

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

Әдетте күйлер кеңістігін граф түрінде бейнелеу ыңғайлы. Граф төбелер жиынынан тұрады.  Графтағы кейбір төбелер жұбы доғалармен байланысқан және олар бір төбеден екіншісіне қарай бағытталған. Мұндай графтар бағытталған графтар деп аталады Әдетте күйлер кеңістігін граф түрінде бейнелеу ыңғайлы. Оның бастапқы төбесінде  әрине бастапқы күй болады да, төбелерді қосып тұрған сызықтар-доғалар қолданылатын операторға сәйкес келеді. Қолданылатын операторлар бір күйден екінші күйді тудырады. Сондықтан оларды күйлер жиындарында анықталған функциялар есебінде қарауға болады. Функциялар өз мәндерін осы жиыннан анықтап отырады. Біздің қарастырып отырған есебімізді шешудің процессі күйлер сипаттамасымен жұмыс істеуге негізделгендіктен, біз операторларды осы сипаттаулардың функциясы деп, ал олардың мәнін жаңа туындаған күйлер деп қабылдаймыз.  Жалпы жағдайда операторлар деп бір күйлерді екінші күйлерге түрлендіретін есептеулер деп қарастыруымызға да болады. Сонымен белгілі бір есепті күйлер кеңістігінде бейнелеу үшін мына ұғымдарды анықтап, белгілеу қажет:

а) күйлер сипатының қалыбын, әсіресе бастапқы күй қалыбын анықтау;

б) операторлар жиыны мен олардың күйлерге ететін әсерін анықтау;

в) мақсатты күй сипатының қасиетін анықтау.

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

Тереңнен іздеу (Depth-first search, DFS).  Бұл әдісте ең алдымен ең соңғы құрылған төбелер ашылады. Төбелерді ашу үдерісі дегеніміз осы төбеге операторлар жиынын қолдануды айтамыз. Таңдап алынатын төбелер тереңдігі былайша анықталады:  ағаш түбірінің тереңдігі  нөлге тең, ал келесі төбенің тереңдігі оның алдындағы төбе тереңдігіне бірді қосу арқылы анықталады. Сонымен іздеу ағашындағы ең терең төбе есебінде осы сәтте ашылуға тиісті төбе алынады. Бұл жол бітпейтін шексіздікке апаруы мүмкін болғандықтан қайтару жолдарын да анықтап отыру қажет. Ол үшін біз алдын ала белгіленген тереңдік мөлшерін береміз. Осы тереңдіктен кейін ашылатын төбелерде мақсатты күй болмаса, онда біз белгілі бір тәсілдерге сүйене отырып қаралмаған төбелерге қайтып келеміз.

Күйлер кеңістігі графында іздеу алгоритмдерінің біріне бектрекинг (backtrack) деп аталатын қайтаруы бар іздеу тәсілін атауға болады [12]. Бұл тәсіл есептің мүмкін болатын шешімдері көп болатын жағдайда қолданылады. Бектрекинг тәсілінің мәні мынада: есептің іздеуінде тармақталатын жолдарда, оның біреуімен кетіп, онда мақсатты күй болмаса, қалған жолдарға қайтып келу үшін осы тармақты еске сақтап қою.  Жалпы жағдайда мұндай қайту тармақтары көп болуы да мүмкін. Оларды бектрекинг нүктелері немесе тармақтар деп атайды. ПРОЛОГ тілінің кейбір версияларында [4] және ПЛЭНЕР тілінде осы бектрекинг тәсілін іске асыратын арнайы механизмдер бар. Ол деген бектрекинг нүктелерін еске сақтау мен осы нүктелерге қайтып келуді тілдің инерпретаторы автоматты түрде іске асырады деген сөз.  Программалаушы тек бектрекинг нүктелерін анықтау мен  қайту процессін басқаруды іске асыратын амалдарды орындауы  қажет.  Егер кейбір доға ni  төбесінен nj төбесіне қарай бағытталған болса, онда nj төбесі ni төбесі үшін балалық төбе, ал ni төбесі nj төбесі үшін аталық төбе деп аталады. Егер екі төбе бір-бірі үшін балалық төбелер болса, онда бағытталған доғалар жұбы граф қабырғасы деп аталады. Граф құрылымы кеңістіктегі күйлерге қолданылғанда оның төбелерінде күйлер, ал доғаларында операторлар сипатталды. 

 

8 Дәріс. Есептерді шешу әдістері. Эвристикалық және редукция әдістері

 

Дәрістің мақсаты. Есептер кеңістігіндегі редукция және күйлер кеңістіктіндегі эвристикалық  әдістерімен танысу.

Дәрістің мазмұны. Тең бағалар тәсілі – эвристикалық әдістің бірі. Редукция әдісі. Есептер кеңістігіндегі ЖӘНЕ/НЕМЕСЕ граф, шешуші граф, бастапқы және соңғы төбелер, қарапайым есептер ұғымдары.

Үлкен Есепті Кіші Есептерге Бөлшектеу немесе оның әдебиетте қалыптасқан басқаша атауы Редукция әдісі өз құрамында кеңістіктегі күйі бойынша іздеу жолдарын сақтап қолданады. Бұл әдісте мәселе шешілуге тиісті есепті Үлкен есеп деп қарап, оны көптеген кіші есептерге бөлшектеу арқылы тиімді шешім жолына жетуді  қарастырады. Әрбір кіші есеп алдыңғыға қарағанда, қарапайым болып келеді, оны белгілі бір әдістермен, мысалы жоғарыдағы соқыр әдістердің бірімен шешуге болады. Редукция әдісі есепті өз тәсілдерімен де шеше алады. Ол үшін есепті бөлшектеу процессін ары қарай жалғастырып, алынған кіші есептерден тағы одан кіші есептерді алып, ең соңында қарапайым есеп болғанға дейін бөле береміз. Ал қарпайым есеп дегеніміз шешімі белгілі есеп. Мәселені қоюдың мұндай жолын есепті кіші есептерге келтіру немесе есептің редукциясы деп атайды. Редукция мәнін толық түсіну үшін көпшілікке кеңінен таныс классикалық есеп болып кеткен «Ханой мұнарасы» немесе оны «пирамида жайындағы есеп» деп те атайды,  есебін қарастырайық [13]. Есеп шарты бойынша үш қазық берілген. Оны  A, B, C әріптерімен белгілейік. Сонымен бірге көптеген диаметрі әртүрлі ортасы тесік дискілер берілген. Бастапқы кезде барлық дискілер А қазығында орналасады, және есептің шарты бойынша кіші дискілер үлкендердің үстінде болады, керісінше орналасуына рұқсат жоқ. Есептің мақсаты барлық дискілерді С қазығына орналастыру қажет. Орындалуы тиісті ережелер: жылжытуды тек үстіңгі дискіден бастайды, кіші дискінің үстіне үлкен дискіні қоюға болмайды. Есептің ең қарапайым жағдайы үшін, яғни пирамидада тек бір диск болғанда, бір ғана амал орындалады  – дискіні i қазығынан  j қазығына қою, (бұл ауыстыруды былайша белгілейміз i -> j). Жалпы жағдайда саны n болатын дискілерді w қазығын қосымша ретінде пайдалана отырып, i қазығынан  j  қазығына қою қажет. Ең алдымен  n‑1 дискілерді i қазығынан  w қазығына қою керек, мұнда  j қазығын қосымша ретінде пайдаланып отырады. Содан соң бір дискіні i қазығынан j қазығына қою қажет,  соңынан  n‑1 дисклерін w қазығынан j қазығына i қазығын қосымша ретінде пайдаланып ауыстырамыз. Сонымен n дискілерді  ауыстыру есебі екі n‑1 дисклерін  ауыстыру есебі мен бір қарапайым есепке бөлінеді. Оны тізім ретінде былайша өрнектейміз: T (n, i, j, w) = T (n‑1, i, w, j), T (1, i, j, w), T (n‑1, w, j, i). Жалпы «Ханой мұнарасы» жайлы есепте tn (n, i, j, w) - ішкі  рекурсивті процедурасы пайдаланылады. Мұндағы саны n болатын дискілерді w қазығын қосымша ретінде пайдалана отырып, i қазығынан j қазығына қою қажеттігі тізім түрінде берілген. Осы процедураның tn=3 болғандағы күйі 4 суретте келтірілген.  

4 сурет  - Ханой мұнарасына арналған стек

 

Яғни  тізім түрі {i, j, w} = {1,3,2}. Әрдайым tn процедурасын шақырғанда n, i, j, w параметрлеріне арналып компьютер жадынан орын бөлінеді және процедурадан қайтатын орын реті еске сақталып тұрады. Содан соң tn процедурасынан қайта қайтқанда  n, i, j, w параметрлеріне одан бұрынғы шақыру кезіндегі бөлінген  жады орны босатылады да, басқару қайтару нүктесіне беріледі. Рекурсивті функцияларды басқаруға «стек» механизмін пайдаланады. Оны оны әдебиетте LIFO «last-in-first-out»  құрылымы деп атайды. Бұл механизмде күйлер тізімнің сол жағынан қосылып, сол жағынан өшіріледі. 

ЖӘНЕ/НЕМЕСЕ графы. Шешуші граф. Редукция есебінің кіші есептерге бөліну процесін әдетте, графқа ұқсас құрылымдармен өрнектейді. Олардың төбелерінде есептер мен кіші есептер, ал оларды байланыстырып тұратын доғалар редукцияланатын есеп пен одан туындайтын кіші есепті жұп төбелермен қосып тұрады. Доғалардың бағыты редукция бағытын білдіреді. Мұндай құрылымдар  ЖӘНЕ/НЕМЕСЕ  графтары деп аталады [12].

Эвристикалық әдіс. Бұл тәсілдер тобына алдыңғы дәрісте өткен толық қарап шығу және тереңнен іздеу деген екі тәсілден басқа жолдардың барлығы кіреді. Яғни кеңістіктегі күйлерін белгілі бір қалыптармен өрнектеп мақсатты күйді іздеуде қолданылатын кез келген алгоритм жолдарын осы топқа жатқызуға болады. Мысалы осындай тәсілдің бірі - Тең бағалар әдісі. Бұл тәсіл бойынша  бастапқы төбеден мақсатты төбеге дейін бағасы ең арзан болатын төбе арқылы өтетін жол таңдалып алынады. Бұл тәсіл бойынша  бастапқы төбеден мақсатты төбеге дейін бағасы ең арзан болатын төбе арқылы өтетін жол таңдалып алынады. Сонымен бірге жолдың өзінің ұзындығын да бағалап отыру тәсілі де бар. Тең бағалар әдісінде 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) – мақсатты күймен салыстырғанда өз орнында жатпаған фишкалар саны.  Ең соңында мақсатты күйге апаратын жолды көрсететін ең арзан төбе таңдалып алынады. Мысал үшін «8» ойынын қарастырайық. Осы ойынға эвристикалық іздеу әдісін қолданғанда әр қабырғаның ұзындығының бағасын бірге тең деп алуға болады. Бұл тәсілде мынандай бірлік функциясы таңдап алынған: f(n)=g(n)+w(n) – ол әр төбеге берілетін бағаны есептейді, мұндағы g(n) – жол ұзындығы, g(0) = 0 деп қабылданып алынады, ал g(n)= g(n-1)+1, сонда g(1)=0+1= 1 болады. Функциядағы w(n) – мақсатты күймен салыстырғанда өз орнында жатпаған фишкалар саны.  Іздеу кезінде ең арзан төбені таңдап, одан ары қарай іздеуді сол бағытта жүргіземіз. Мысалдағы бағалар  төбелер үшін мынандай болып келеді:  f(0)=4, f(1)=6, f(2)=6, f(3)=4, f(4)=5, …, f(12)= 5,  f(13)=7. Ең соңында мақсатты күйге апаратын жолды көрсететін ең арзан төбе таңдалады. Аталған ойынның күйлер графы біраз мөлшерде болады. Сондықтан оны шешуде эвристикалық тәсіл өте қажетті құралдардың біріне жатады. Ойын күйлері тізім болады. Ол келесі элементтерден тұрады: күйлер идентификаторы; күйлерді сипаттау;іздеу ағашындағы күйлер-төбелердің тереңдік саны; күйлерді бағалайтын эвристикалық сандық баға. Күйлер сипатына тізімнің бірінші элементі есебінде белгілі бір күйді тудыратын бос клетканы жылжыту операторын қабылдайды.  Бұл элемент төбелерді ашу кезінде туындайтын ұқсас күйлердің қайталануын болдырмау үшін қажет. ЛИСП тілінде бұл операторлар  мынандай right, left, up, down деген атом-атаулармен,  ал бос клетка  мына –  # таңбамен белгіленеді. Мысалы мына тізім  (S3 ('left  2 8 3 1 6 4 # 7 5) 1 6) S3 күйін сипаттайды. Ол бос клетканы солға жылжытудан алынған және оның эвристикалық бағасы  6 тең, осыған сәйкес іздеу ағашындағы төбе  1 тең тереңдікте орналасады. Тағы мына жағдайды атап өтуіміз керек. Эвристикалық баға шамасы тек эвристикалық алгоритмдерде қолданылса, ал төбе тереңдігінің шамасы эвристикалық алгоритмдермен қоса, шектелген тереңнен іздеу алгоритмдерінде пайдаланылады.

 

9 Дәріс. Есептерді шешу әдістері. Предикаттарды есептеу әдісі

 

Дәрістің мақсаты. Бірінші дәрежелі предикаттарды есептеу негіздермен танысу. Предикаттарды есептеу әдісі көмегімен есеп құру.

Дәрістің мазмұны. Бірінші дәрежелі предикаттарды есептеудің негізгі әліпбиі. Бірінші дәрежелі предикаттарды есептеудің синтаксисі және  семантикасы.  Термдер, атомдық формулалар, дұрыс құрылған формулалар ұғымдары. Жалпылық және бар болу кванторлары. Сөйлемдер, резольвенталар, резольвенция принципі ұғымдары.

Автоматты түрдегі  логикалық тұжырымдар жасау үшін белгілі түрдегі формальды тіл қажет. Ол тілде ережелер құрып, логикалық тұжырымдар жасауға болады. 1- дәрежедегі предикаттарды есептеу. Осы аталған логикадағы жүйенің бір бөлігі математикадан тұрса, бір бөлігі сөйлесу - табиғи тілден тұрады. Бұл тілді ой тұжырымдарын құру үшін компьютерде пайдалануға болады. Кез келген тілде оның синтаксисі мен семантикасы болады. Синтаксисті анықтау үшін, тілдегі таңбалар алфавиті және осы таңбалардың бір-бірімен байланысу ережелері бар [13].

  Синтаксис.  Алфавит мынадан тұрады:Пунктуация  белгілері: , . ( ) .; Логикалық таңбалар:  ~, => (~- белгісі «емес» деп; ал  => «өз соңынан» деп оқылады); n – орындық функционалдық әріптер:    ( )  Олар -константалы әріп деп аталды, және оларды а,в,с,  деп белгіленіп, ал  - f, g, h  - деп белгілейді; n – орындық предикаттық әріптер:    ()  ( - бас әріптер). Оларды   - оларды қарапайымдылық үшін P, Q, R –деп белгілеуді ұсынады. Бұл таңбалар көмегімен әртүрлі өрнектер құруға болады.

Өрнектер класында мына  терминдер анықталады:Термдер, Атомдық  формулалар, ППФ – Дұрыс құрылған Формула. Енді осы алфавитке мынаны қосайық: ٨ – «и» «және», V –«или» – «немесе».

Семантика.  ППФ-қа ішкі  «мазмұн»  беру үшін оны белгілі бір аумаққа қатысы бар тұжырым ретінде тарату керек.  Мысалы, «Серік Талғаттың әкесі» деген тұжырымдағы аумақ – адамдар жиыны, ал қарым-қатынас –  бинарлық «әкелік». Мысалы, плюс функциясы бүтін сан жұбын бүтін санға түрлендіреді. Мұнда қосу амалы орындалады. Берілген ППФ-те әр атомдық формулаға  T(true) немесе F(false)  мәні беріледі. Бұл мәндерді  беру өте қарапайым өтеді. Егер предикатты әріптің термі  D элементіне сәйкес келсе, онда T  немесе F болады.

Әдетте, кез келген аумақтағы элементтерге қатысы бар, белгілі бір тұжырымдар  жасау қажет жағдайда, осындай тұжырымды конъюнкция  түрінде жазуға болады.  Ол үлкен конъюнкцияларды көлемі үлкен өрнектерге қолданғанда, әрқайсысы үшін және барлығына деген сөздер қолданылады. Осы сөздерді математикалық логикада былай белгіленеді ( әр біреуі үшін). Мысалы, (x1 ٨x2 ٨...٨xn) орнына  (х) Р(х, ) – деп жазамыз.  - (кері түскен А әрпі )  символы таңбасы - жалпылық кванторы деп аталады. Ал бұл таңбадан соң  тұратын Х - айнымалы жалпылық кванторына қатысы бар айнымалы деп аталады. Осындай белгілеу  (x1 V x2 V... V xn) – дизъюнкциялар үшін де бар. Дизъюнкция орнына  (кері түскен Е әрпі ) таңбасы пайдаланылады. Бұл квантор өмір сүру, бар болу кванторы деп аталады. Мысалы мынандай тұжырым: «1 мен 100 арасындағы орналасқан кез келген бүтін жұп сандар үшін 1-ші сан екінші саннан үлкен» Бұл сөйлемді ППФ тілінде былай жазамыз: (х) (у) Р(х,у) ол ППФ  - F болады. Мысалы, «кез келген бүтін сан үшін одан үлкен бүтін сан болады» деген тұжырымды былай жазуға болады: .

Жалпылық және орындалу. Егер ППФ өзінің барлық интерпретациясында Т (true) мәніне ие болса, онда ол жалпылық қасиетке ие. Мысалы: P(a)=>(P(a)|P(b)) . Егер белгілі бір интерпретацияда ППФ-лар жиынындағы әр ППФ Т-мәніне  ие болса, онда бұл интерпретация осы жиынды қанағаттандырады деп есептелінеді, яғни егер S-ті қанағаттандырған әр инетпретация W-ны қанағаттандырса, онда ППФ-сы логикалық түрде S (ППФ) – тан шығады деп есептейміз. Бұл логикалық түрдегі шығару концепциясы, осы предикаттарды есептеуді дәлелдеу негізіне салынған. Предикаттарды есептеудегі шешілмеу фактісі деп мынаны айтамыз: Кез келген S-ППФ жиынында берілген W-ның S-тан логикалық түрде шығатынын көрсететін тиімді процедураның  болмауы. Егер белгілі бір ППФ-лар жиыны ешқандай интерпретацияда қанағаттанбаса, онда ол қанағаттанбаған (орындалмайтын) жиын деп аталады. Мысалы, W, S-те логикалық түрде шығарылса, онда SU {~W} қосылысы қанағаттанбайды және керісінше, егер  SU {~W} қанағаттанбаса, онда W – S-тен логикалық түрде шығарылады. Осы түйінделген нәтижені барлық дәлелдеуді қажет ететін есептерге біркелкі түр, форма беру үшін пайдалануға болады. Яғни, W-ның S-тан логикалық түрде шығатынын дәлелдеу үшін SU {~W} қанағаттанбайтынын жалпылық кванторының, бар болу кванторымен қатар орналасуға кез  келген Х – үшін У –тің бар екенін білдіреді.

Екі аталық сөйлемнен пайда болған сөйлемді - Резольвента  деп атаймыз. Сонымен қатар, бұл екі сөйлем белгілі бір жиынның интерпретациясына жатуы керек.  Мысалы:

 ~P(f(y))VQ(f(y))

~Q(f(y))

деген екі сөйлемнен,  мына сөйлемді ~P(f(y))  шығару мүмкіндігі бар.  Бұл шығарылған сөйлем аталған екі сөйлемнің  резольвентасы болады.

Резольвенция принципі дегеніміз - екі аталық сөйлемнен резольвентаның пайда болу үдерісін айтамыз. Резольвенцияны пайдаланатын терістеу үдерісі граф тәрізді құрылымдарда өтеді. Бұл құрылымдардың әр төбесінде бір сөйлем жазылады. Егер екі соңғы төбелердегі екі сөйлем өзара шешілсе, онда олардың резольвентасы  олардан кейінгі болатын төбеге жазылады. Бұл пайда болған төбе алдыңғыларымен қабырғалары арқылы байланыста болады.  Осылайша пайда болған терістеу графының түбірі, бос сөйлем болып табылады. Әдетте оны nil – таңбасымен белгілейді.

Мысал ретінде Жасанды зерде пәнінің классикалық есебі болып кеткен «Маймыл және банан» есебін қарастырайық.  Есеп қойылымы:  бөлмеде маймыл, жәшік және бір байлам банан бар. Байланған банан бумасы бөлме төбесіне ілінген және оның биіктігіне маймыл қанша секірсе де бойы жетпейді. Ол оған тек жәшік үстіне шықса ғана қолы жетеді. Маймылдың бананға қолы жететін іс-әрекеттер тізбегін құру қажет. Және есептің қойылымы бойынша маймыл бөлме ішінде ары бері жүре алады, жәшікті қозғалта алады, жәшік үстіне шыға алады, және оның үстінде тұрып бананға қол жеткізе алады. Енді есепке қатысты қалыптарды кеңістіктегі осы сипатталған күйлерге байланысты қалай құру қажет? Сипатта мына күйлердің болуы міндетті: маймылдың бөлмедегі  координаталары (тігінен, жатығынан), жәшіктің бөлмедегі  координаталары (тігінен, жатығынан), және маймылда бананның болуы не болмауы. Қарастырылған мысал, есепті тиімді түрде шешу үшін таңдалып алынған күйлер түрінің қаншалықты маңызды екенін көрсетеді. Мысалдағы көрсетілген күйлер кеңістігі маймыл, жәшік және банандардың ең алғашқы орналасқан үш нүктесінен туындайды да, басқа нүктелер есепке алынбайды. Күйлер кеңістігіндегі іздеуді қысқарту үшін көптеген алгоритмдер пайдаланылады. Осындай алгоритмдер түрлеріне күйлер схемасы және операторлар схемасы деп аталатын қуатты тәсілдерді атауға болады. Оларда күйлер мен операторларды сипаттауға айнымалылар пайдаланылады. Күйлер схемасында күйлердің жиындары сипатталса, ал операторлар схемасында белгілі бір типтегі іс-әрекеттердің жиыны көрсетілген. Біз қарастырған мысалда операторлар схемасы тәсілі пайдаланылған. Жоғарыда аталған екі тәсілдің осы есепке қатысты бейнеленуі  келесі әдебиет көзінде кеңінен түсіндірілген [12,13,15].

 

 

10 Дәріс. Сарапшы жүйелер. Білімдерді пайдалану үлгілері

 

Дәрістің мақсаты. Сарапшы жүйелер құрылымымен, білімдердің негізгі  үлгілерімен танысу.  

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

Сарапшы жүйе дегенiмiз - белгiлi бiр сала мәселелерiн  шешуде сарапшы-маман адамды ауыстыра алатын жасанды жүйе. Бұл жүйе жөнiндегi зерттеулердiң мақсаты, құрылымы қиын есептердi шығарғанда сапасы мен тиiмдiлiгi жағынан адам тапқан шешiмнен кем түспейтiн нәтижеге жететiн компьютерлiк программалар жасау. Яғни, әңгiме сарапшы-адамның зияткерлік еңбегiн автоматтандыру жайында болмақ [25]. Сарапшы жүйедегi программалардың жасанды зерде тарауларындағы басқа бағыттардан ерекшелейтін белгілерге: бұл жүйедегi программалардың құрылымы қиын, iс жүзiнде маңызы бар, шешiм жолын табуы қиын есептердi шығаруға қолданылады; жүйе өзiнiң тапқан шешiмi туралы түсiнiгiн пайдаланушыға сапалы деңгейде түсiндiрiп бере алуы керек, бұл оның сандармен жұмыс iстейтiн алгоритмдерден ерекшелiгi; табылған шешiм өзiнiн  сапасы мен тиiмдiлiгi жағынан адам тапқан шешiмнен кем болмауы керек; маманмен пiкiр алысуы арасында өзiндегi бар бiлiмдi үнемi толықтырып отыратын қасиетi болуы керек сияқты қасиеттерiн жатқызамыз. Осы теориялық қағидаларға байланысты әдеттегi сарапшы жүйе, өзiнiң құрамында бiрнеше бөлiктер болуын қамтамасыз етуі керек. Ол бөлiктердi атап айтсақ: бiлiм қоры, жұмысшы зердесi, түсiндiрме-басқару құралы, пайдаланушыға түсiнiктi болуын қамтамасыз ету бөлiгi, бiлiмдi ала бiлу бөлiгi, түсiндiру бөлiгi. Бұл бөлiктер 5-суретте көрсетiлген. Суретте келтiрiлген бөлiктердiң бәрiнiң бiрдей сарапшы жүйе құрамында болуы мiндеттi емес, дегенмен де кейбiр бөлiктер жүйенiң негiзiн құрады. Мiндеттi түрде болатын бөлiктерге 1, 2, 3-нi жатқызуға болады. Жұмыс iстеуге қабілетi бар жүйе: ондағы мәлiметтер мен бiлiмдердi ұсына алатын әдiс болуы қажет; пайдаланатын мағлұматтар құрамы анықталған болуы керек; басқару құралы - интерпретатордың жұмыс iстеу тәсiлiнің анық сияқты сипатта болады.

 Сарапшы жүйенi құрудағы негiзгi мақсаттар қатарына: бiр саладағы сарапшы-маман адамның құрылым жағынан қиындық келтiретiн бiлiмдерiн жүйелеуге мүмкiндiк беруi; адам-сарапшы қабылдайтын шешiмнiң сапасын арттыру; пайдаланушы адамды есептеудi көп қажет ететiн қиын жұмыстардан босатуы сияқты мақсат - талаптар жатады. Аталған мақсаттарға жету үшiн сарапшы жүйе жұмысының екi түрлi тәртiпте орындалуы керек: бiлiмдi  ала білу және есепті шығару тәртібі [23].

 

 

 

 

 

 

 

 

 

С

Са

Бiлiмнiң деректерден өзгешелiгiн бiлдiретiн бес ерекшелiгi бар: Жiктелуi. Бұл ерекшеліктер  көз алдымызда бейнелеу үшiн мынандай мысал келтiрелік. Бiзге бiр мекемеде жұмыс iстейтiн адамдар туралы мағлұматтар  кесте түрiнде берiлдi. Егер осы кестенiң iшiндегi қос сызықпен қоршалған кiшкене кестедегi мәлiметтердi машина кодымен белгiлеп, машина жадына салып қойсақ, онда бұл кестедегi сандар деректер жиыны болып табылады. Ал  бiзге «№ 26 іс қағазындағы бүкiл мағлұмат керек»  деген өтiнiш түссе, онда осыған байланысты басқа мәлiметтердiң сақталу адресiн анық бiлген соң ғана керектi программаны жаза аламыз. Егер машина жадында кiшкене кестедегi жиынан басқа, оның сыртындағы мағлұматтарды сақтасақ онда  осы кестедегi тiк жол мен ұзын жолдар арасындағы  байланыстар түрiн анықтап, оны да машина жадында сақтай бiлсек, онда кестеге қатысты көптеген сұрақтарға жауапты, машинадан алған болар едiк. Топтау қасиетi. Мәлiметтермен жұмыс iстегенде, олардың бiр жиынға кiру қасиетiн анықтайтын  байланыстар көрсетiлмейдi. Бұл бiр түрдегi хабарларды бiрнеше қайтара жазып, еске сақтауды қажет етедi, осы элементтердiң барлығына қатысты iс-әрекеттi бiрнеше рет қолдануға мәжбүрлейді. Бiлiмдермен жұмыс iстегенде, бұл қиындықты жеңуге болады. Ол үшiн бiлiм элементтерi арасындағы қарым-қатынас түрлерiн анықтап, оны машинада сақтап отыру қажет. Ситуативтiк қасиетi. Байланыстың бұл түрi машина жадындағы бiлiмдердiң бiр-бiрiмен бiрге бола алу-алмау қасиетiн бiлдiредi. Бұл қасиеттердiң - құрылымдық, функционалдық, каузальдық, семантикалық деп аталатын түрлерi бар. Құрылымдық қарым-қатынастар, элементтер арасындағы бiрiнiң iшiне бiрi кiру қасиетiн бiлдiредi. Функционалдық байланыстар, элементтердiң бiреуiн екiншiсi арқылы есептеп табуға мүмкiндiк бередi. Каузальдық деп аталатын байланыстың түрi, себеп-салдар бойынша анықталады, ал семантикалық түрге - аталған үшеуiнен басқа дүниедегi бүкіл  байланыстар бәрi кiредi. Бiлiмдердiң бұл ерекшелiгi, бiр-бiрiмен қарама-қайшылықтағы  бiлiмдердi iздеп табатын iс-әрекеттер құру мүмкiндiгiн бередi. Семантикалық өлшемде болу қасиетi. Хабарлар жинақталған жиындарда құрылымдардың бiр-бiрiне жағдай бойынша жақындығын бiлдiретiн байланыстар бар. Бұлар - бiлiмдердi жағдайлар бiрлiгi бойынша топтауға және машинаға жаңа ұғым кiргiзiлгенде, оны өз тобына орналастыру мүмкiндiгiн бередi.  Белсендiлiк қасиетi. ЭЕМ пайда болғаннан бастап ондағы хабарлар - деректер, командалар деп екiге бөлiніп деректер үнемі белсенді емес жағдайында, ал командалар белсенді болып келген. Машинада жүрiп жатқан жұмыс барысының барлығы дерлiк командалар әмiрiмен жүргiзiледi  де, мәлiметтер керек уақытында ғана iске қосылады. Ал бiлiмдермен жұмыс iстейтiн жүйелер үшiн iс-әрекеттiң белсендiлiгi, сол жүйедегi бар сапалық ережелерге тiкелей байланысты. Яғни  программаның орындалу – орындалмауы, бiлiм қорының сол мезеттегi күйiне байланысты. Бiлiмдердiң осы аталған бес қасиетi, оның мәлiметтерден ерекшелiгiн сипаттайды. Бұл ерекшелiктердi шекара есебiнде белгiлесек, одан өткен мәлiметтер бiлiм болып саналады да, ал деректер қоры - бiлiм қорына ұласады.

 

6 кесте - СЖ қолдану белгілері

қолданылады

қолданылмайды

Қатаң алгоритмдер немесе процедуралар құру қиын, дегенмен шешімді табатын эвристикалық тәсілдер бар

Тиімді алгоритмдік әдістер бар

Есепті шеше алатын адам мамандар бар

Адам маман аз не  олар жоқ

Сипаты бойынша есеп диагностика, талдау немесе болжау саласына жатады

Мәселе сипаты есептік

Қатынауға мүмкін деректер «шуланған»

Бар фактілер анық және процедуралар қатаң анықталған

Есептер қалыпты тұжырымдау әдісімен шешіледі

Есептер ұқсастық немесе түйсіну көмегімен, процедура  әдісімен шешіледі

Білімдер статикалық (өзгермейтін)

Білімдер динамикалық (уақыт өткенде өзгеріп тұрады)

 

Ұқсастыру немесе дерексіздік негізіндегі үлгілермен шешілетін мәселелерге білімдерге негізделген жүйелерді қолдану мүмкіндігі әзірге болмай тұр. Ал процедуралық талдауды қолданатын есептерді шешуде әдеттегі компьютерлік программалар білімге негізделген жүйелерден артық екенін көрсетті.  Білімдерге негізделген жүйелер қалыпты тұжырымдалары көп есептерді шешуде ыңғайлы. Жоғарыдағы 6 кестеде сарапшы жүйелерді қолдануға ыңғайлы белгі түрлері келтірілген. СЖ тәсілдерін мынандай: әдеттегі процедуралық талдау мен қалыпты түрлендірулермен шешілетін математикалық есептерге, жалпы жағдайда сандық әдістермен шешілетін таңбаны тану, шешу тәсілдері мүлде жоқ (білім қорын құра алмаймыз) сияқты есептер түрлеріне қолдануға келмейді. ЖЗ ертеректегі зерттеулерінде жеткен жетістіктерінің біріне сала есебіне қатысты білімдердің (domain-specific) маңызды екенін  саналы түрде білу мәселесі жатады. Мысалы, дәрігер аурудың түрін дөп басып айтуда осы есепті шешуде табиғи дарыны болмаса да, медицинада жинақтаған білімдерін қолданады. Осы сияқты геолог маман адам да кен орнын табуда геологиядан алған терең теориялық білімін тәжірибеден жинақтаған білімдеріне қосып, күрделі есепті шеше алады.

Әрбiр салаға қатысы бар кез келген бiлiмдер екi түрде болады: жалпы және жеке. Жалпы бiлiмдер - арнаулы әдебиеттер  мен кiтаптарда жазылып жинақталған, осы салаға байланысты, анықтамалар, фактiлер, iлiмдер. Ал саладағы мамандардың осы мәселеге қатысты өздерiнiң жеке бiлiмдерi де болады. Олар көбiне әдебиеттерде жазылмаған, жүйеленбеген. Сарапшы жүйенi құрудағы негiзгi мақсат, осы маманның жеке бiлiмiн тауып, жинақтау. Көбiнде бұл жеке бiлiмдер, эмпирикалық ережелерден тұрады. Оларды әдетте эвристикалық депте атайды. «Эвристика» (грек сөзi,  heuriska  - табамын) дегенiмiз – мәселенiң көп шешiмдерi iшiнен бiр шешiмдi таңдап алуға кететiн уақытты қысқартатын тәсiлдi табатын, сол шешiмдi iздеу, табу iсi барысындағы заңдылықтар мен тәсiлдерiн зерттейтiн ғылым. Эвристикалар мамандарға мәселенi шешуде ақылға қонымды ұсыныстар жасап, болашақта мәнi белгiсiз мәлiметтермен жұмыс жасауға мүмкiндiк бередi [24].

Сарапшы жүйе құрамы. Әдеттегі сарапшы жүйе өзінің құрамында әртүрлі бөліктерді жинақтайды. Төменде осы бөліктердің атқаратын қызметіне шолу жасайық. Білімдер қоры - сарапшы жүйенің ең маңызды бөлігі. Жүйенің қуаттылығы, осы білім қуаттылығына тікелей байланысты. Білімдерді жинақтайтын қорды құру аса көп еңбекті қажет етеді. Бұл қиындық, қордағы білімдерді белгілі тәртіппен өзара орналастыру қажеттілігімен тікелей байланысты. Ал өзара орналастыру дәрежесі осы саладағы шығарылатын есептердің типі не түріне, үлгісіне тікелей байланысты. Орналастыру тәртібі қордан керекті мағлұматты тезінен таба  білу үшін де үлкен рөл атқарады. Тезінен таба қою өнері іздеу стратегиясына байланысты. Жүйе дұрыс жұмыс істеу үшін қордағы білімдер, мағлұматтар дұрыс екшеленіп, сұрыпталуы қажет. Сұрыптау ісі былайша өтеді: шешілетін саладағы ақиқат, белгілі нәрселерді мәселені шешу әдістерінен бөліп қарау қажет. Сонда фактілер – декларативтік,  ал шешу әдістері - процедуралық деп аталады. Процедуралық мағлұматтарға, өңделген білімдер  мен логикалық қорытындылау әдістері кіреді. Бұлар жасалатын іс-әрекеттің түпкілікті мақсатының жүйелілігін бейнелеп түсіндіруі қажет. Мағлұмдамалық білімдер сол саладағы  фактілер мен аксиомалар жинағы. Білім қорының тағы бір ерекшелігі - оның «сауаттылық» көрсеткішінің болуы.  Бұл көрсеткіштің белгісі -  керек болған кезде,  қажет білімдерді  іске қоса алу мүмкіндігі.  Білімдерді осыған орай ұйымдастыру үшін,  деректердің бір-бірімен қалай байланысуы, білімдерді іздеудегі құралдар,  салыстыру  әдістері жөніндегі сұрақтарға жауап табу қажет.  Деректер арасындағы байланыстарды екі түрге бөлуге болады: ішкі, сыртқы. Ішкі байланыстар, ұғымдарды бір бөлікке топтап,  олардың құрылымдық ерекшелігін береді. Сыртқы байланыстар - осы топтардың арасындағы қарым-қатынасты білдіреді. Оның өзі логикалық, ассоциативттік түрлер деп бөлінеді. Біріншісі - элементтер арасындағы байланысты білдірсе, екіншісі - оларды іздеуге арналған қарым-қатынас түрін береді.  Осылардың бәрі, қорда білімді пайдалану үлгілері арқылы сақталады.  Білімді іздеудегі құралдың негізгі міндеті - жұмысшы зердесіндегі ұғымды тауып, оны қордағы мәліметпен салыстыру кезеңіне әкелу. Салыстырудың төрт түрі бар: синтаксисттік, параметрлік, семантикалық, міндеттелген. Синтаксисттік салыстыруда үлгілер бір-бірімен салыстырылады не мүлде салыстырылмайды. Параметрлік түрде - салыстыру дәрежесін анықтайтын көрсеткіш енгізіледі, ал семантикалық түрде - үлгінің өзі емес, олардың атқарылатын қызметі салыстырылады. Ал міндеттелген түрде салыстыруға түсетін үлгі, басқа ұғым тұрғысынан қаралады. Қорды білімдермен толықтыру үшін білімді пайдалану үлгілерін білу қажет. Білім қорының тағы бір тамаша қасиеттерінің қатарына оның өзіндегі білімдерді толықтырып отыру мүмкіндігі жатады.  Ондай мүмкіндік жүйенің білім алу бөлігінде қаралады.  Сонымен білім қоры – бір саладағы маманның сұрыпталған, екшелген, белгілі бір тәртіппен ұйымдастырылған, жинақталған білімдер жиыны.  Қордың көлемі, қуаты, ондағы білімді пайдалану үлгісі түріне байланысты. Қордың маңызды көрсеткіштерінің қатарына оның: «сауаттылық» көрсеткішін, білімдерді жаңалап толықтыруын, «түсініктілік» көрсеткішін  жатқызуға болады. Деректер қоры. Бұл қорды белгілі бір тәртіпппен жинақталған, көп адамдарға  пайдалануға ыңғайлы хабарлар жиынтығы ретінде қарауға болады.  Қордың негізгі міндеті - мәселеге қатысы бар мәліметтерді бір жерде сақтай білуі және қажет болған уақытта, оларды пайдалану мүмкіндігін қамтамасыз ету. Бұл қорды кейде жұмысшы зердесі деп те атайды.  Қорды толықтыру үшін мәліметтердің құрылымдық түрін анықтайтын жобалар қажет. Жобалауды іске асыратын мәліметтер дегеніміз - мәліметтердің құрылымдық түрін анықтайтын ережелер жиыны. Үлгілерді құрмас бұрын,  мәліметтер табиғаты жайында бір - екі ауыз айта кету керек.  Мәліметтер  қарапайым не құрылымы қиын түрінде кездеседі. Егер  мәліметті бір  ұғым ретінде қарайтын болсақ, онда оның ішкі қасиеттерін білдіретін көрсеткіштері бар. Егер ұғымның өзін, оның қасиетін,  қасиетінің сипатын бір жерге жинақтасақ, онда осы ұғым туралы мағлұмат біраз жинауға болады. Қазіргі уақытта осындай: релятивтік, иерархиялық, торлық деген үлгінің үш түрі кездеседі.  Релятивтік түрдегі үлгілерде ұғымдар арасындағы қарым-қатынастар кесте түрінде беріледі. Кестенің тік жолына ұғымдардың қасиетін білдіретін - атрибут  деген көрсеткіш жазылады да, кестенің ұзын жолына олардың  қабылдайтын мәні жазылады. Қабылдайтын мәндердің орналасу тәртібі аса ұқыптылықты қажет етеді, яғни жолдарын бір-бірімен ауыстыруға болмайды. Оларды әртүрлі кестелерде берілген ұғымдар арасындағы  қарым-қатынасты  «кілттер» деп аталатын байланыс береді. Бұл байланыс түрі, релятивтік  үлгінің ерекшелігінің біріне жатады. Торлық үлгілердің негізінде тор ұғымы жатыр. Тордың төбесі ұғымдарды, ал оларды біріктіретін жолдар  -ұғымдар арасындағы байланысты білдіреді. Иерархиялық үлгідегі мәліметтер  қатаң тәртіппен орналасып, оның құрылымдық түрі ағаш бұтақтарындағыдай болып келеді. Интерпретатор- басқару құралы. Әдеттегі программалау әдістеріне жасалған прорграммалар, оған берілген ат бойынша іске қосылады. Сондықтан, программалаушы адам мәселені шешудегі түрлі жолдарды ескеріп, оны басқару құралына кіргізе білуі қажет. Яғни, программаның бір бөлігі өз жұмысын аяқтағанда, келесі кезекте қандай программа, қандай мәліметтермен жұмыс істейді, соның бәрін анық көрсетуі керек. Басқарудың мұндай түрі,  құрылымдық жағынан қиын есептерді шығаруға жарамайды. Пайдаланушыға түсініктілікті қамтамасыз ететін бөлік. Адам мен жүйенің арасындағы қатынас екі түрде: диалог, сезімталдық терминал мониторы арқылы болады. Біріншісінде - табиғи тілдің жүйеге салынған сөз қоры арқылы орындалса, екіншісі програмалаудан мүлде хабары жоқ адамдарға арналып жасалады. Бұл жағдайда пайдаланушы адам,  саусағының ұшын  экранның белгілі бір жеріне тигізсе жеткілікті. Сонымен пайдаланушы адамға түсініктілікті қамтамасыз ететін бөліктің негізгі міндеті: есепті шығару барысында «адам-жүйе»  арасындағы сөйлесу қызметін қамтамасыз ету,  оның нәтижесінде жүйеге түскен табиғи тілдегі сөз формаларын машинаға түсінікті түрге  аудару.  Білімді алу білу бөлігі. Сарапшы жүйе құру ісі барысында білімді ала білу өнері аса қажет, маңызды істің бірі.  Өйткені жүйенің негізгі мәйегі болып табылатын білім қорының сапасы, осы білім алу ісіне байланысты. Жүйені  құруда  бұл бөлік, өте қиын сатыға жатады. Бұл іс барысында мынандай қадамдардан өту қажет: қолдағы бар білімді толықтыру қажеттілігі анықталады; білімді алу барысы; жаңа білім жүйесіне «түсінікті» түрге енуі керек; жүйедегі білімдер өзгеріске ұшырайды да, кезек 1-ші қадамға беріледі. Осы айтылған қадамдарды адам не жүйе орындауына байланысты білімді ала білудің әртүрлі үлгілері бар. Түсіндіру бөлігі. Түсіндіру қажеттілігінің себебі: сарапшы жүйедегі программалар,  құрылымдық түрі айқын емес есептерді шығаруға арналған. Яғни, есептің шешімін табатын жолдарды анық көрсететін алгоритмдік әдіс, жоққа тән. Сондықтан есеп шешімінің қалай табылғанын көрсете алатын құралдың болуы өте қажет. Түсіндіру қасиеті бар программалар: алдан ала дайындалып қойылған түсіндірмелер, релятивтік түсіндірмелер, арнайы түсіндіруші программалар деген сияқты түрлерге бөлінеді. Бірінші түсіндіру түрінде, табиғи тілде қойылған сұрақтарға жауап беру кезіндегі программаның іс-әрекетін есте сақтап қалуы. Бұл әдісті қойылатын бүкіл сұрақтарды қамтуға қолданады. Бұл кезде пайдаланушы түсіндірмені, компьютерде қалай жазылса, сол күйінде алады. Релятивтік түсіндірмелерде программаның әр бөлігі өзінің іс-әрекеті жөнінде түсіндірмемен қамтамасыз етіледі. Арнайы түсіндіруші программалар, жүйенің не істегінін бақылап және керек болған уақытта пайдаланушы адамға түсініктеме береді.

 

 

 

11 Дәріс. Сарапшы жүйелер. Продукциялық жүйелер

 

Дәрістің мақсаты.  Продукциялық жүйе ұғымымен, үлгісімен, қолдану аумағымен және деректер және мақсат негізінде шығару түрлерімен танысу.  

Дәрістің мазмұны. Продукциялық үлгідегі фактілер мен ережелер. Продукциялық үлгінің құрамдас бөлшектері. Шығару механизмдері. Деректерге және мақсатқа негізінделген іздеу түрлері. Продукциялық үлгідегі сұқбат, түсіндіру толықтыру құрамдас бөлшектері.  

Білімдерді ұсыну немесе пайдалануда кеңінен тараған тәсілдің біріне ондағы мағлмұттарды нақты  фактілер мен ережелер түрінде бейнелеу болып табылады.  Әдетте фактілер мынандай үштік түрінде:   (АТРИБУТ  ОБЪЕКТ  МӘНІ) сипатталады. Бұл берілген нысан өзінің қасиетімен, өзіне қатысты оның белгілі бір мәнімен сипатталды дегенді білдіреді.   Мысалы мына үштік (ТЕМПЕРАТУРА  ПАЦИЕНТ1  37.5) мына фактіні сипаттайды: «ПАЦИЕНТ1 деп аталған адамның температурасы, 37.5 деген мәнге тең». Кейбір қарапайым жағдайларда фактілер белгілі бір мәні бар атрибут арқылы емес, қарапайым тұжырыммен де сипаттала алады.  Ол тұжырым «шын» немесе «өтірік» мәнін қабылдауы мүмкін. Мысалы:  «Аспанда бұлттар көп». Мұндай жағдайларда фактіні бір қарапайым атаумен (мысалы БҰЛТТАР) белгілеуге немесе осы тұжырымдағы мәтіннің өзін де алуға болады. Продукциялық үлгінің Білім қорындағы ережелердің түрі: «ЕГЕР А  ОНДА  S», деген түрде болады мұндағы  А- шарт; S- әрекет. Бұл ережеде егер  А шын болса, онда S әрекеті орындалады. Әдетте S әрекеті, берілген шарт сияқты тұжырым, ондай тұжырымды, егер жүйеге ереженің  А шарты шын болған жағдайда жүйе шығарып бере алады.   Білім қорындағы  ережелер маман адамның қызмет ету нәтижесінде алған тәжірибесінен туындаған эвристикалық білімдерін, яғни маманның әлі қалыпты түрге келе қоймаған ойлау тұжырымдарын білдіреді.    Осыған байланысты қарапайым өмірдегі бір мысалды қарастырайық. Мысалы мынандай тұжырым бар делік: «ЕГЕР аспанды бұлт жауып тұрса,ОНДА жақында жаңбыр жауады». Бұл жерде A шарты есебінде бір факт  немесе «және» логикалық операциясымен біріккен бірнеше  A1,...,AN, фактілер: A1 және A2 және ... және AN жүруі мүмкін. Математикалық логикада мұндай өрнек коньюнкция деп аталады. Оның нәтижесі «шын» мәнін егер оның құрамындағы барлық компоненталары да «шын» мәнін қабылдаса ғана болады. Мысалы жоғарыда аталған тұжырымның сәл күрделі түрін қарастырайық: «ЕГЕР аспанды бұлт жауып тұрса және барометр тілі төмен түссе ОНДА жақында жаңбыр жауады». Ережелер құрамына кіретін әрекеттердің өзінде жаңа фактілер болуы мүмкін. Ондай ережелерді іске қосқанда ондағы фактілер жүйеге белгілі. Ол  фактілер жиынына қосылады, бұндай жиынды жұмысшы жиыны деп атайды.  Мысалы «аспанды бұлт жауып тұрса» және  «барометр тілі төмен түссе» деген фактілер жұмысшы жиынында болса, онда аталған ереже іске қосылғанда бұл жиынға  «жақында жаңбыр жауады» фактісі де қосылады.

Білімді пайдаланудың продукциялық үлгісі.  Мұндай үлгі түрінде білімдер келесі түрдегі ережелер жиындарынан тұрады:  «ЕГЕР – ОНДА». Осындай үлгі түріне негізделген жүйелерді продукциялық жүйелер деп атайды.  Бұндай жүйелерде шешімді шығару механизмі екі түрлі тәсілмен жұмыс істейді. Ол тәсілдерге: тура және кері шығару деп аталатын тәсілдер жатады. Кері шығару механизмі бар продукциялық жүйелерде ережелер көмегімен  фактілер мен қорытындыларды бір бүтін есебінде жинақтайтын ЖӘНЕ/НЕМЕСЕ ағашы құрылады. Деректер қорындағы фактілер негізінде осы ағаш жапырақтарын бағалау нәтижесінде логикалық қорытынды шығарылады. Логикалық қорытындылар тура, кері және екі бағытты болып келеді. Тура шығару жолында іздеу нүктесі деректерден басталады да, бағалау процесі терістеуі бар түйіндерде тоқтауы мүмкін.  Бұл жағдайда қажетті қорытынды есебінде ағаштың ең жоғарғы деңгейіне (түбірі) сәйкес келетін гипотеза ұсынылады. Дегенмен мұндай шығару механизмі үшін деректердің өте көп мөлшерімен бірге ағаш жапырақтарын бағалау белгілері де қажет, ол кей кезде тіпті қажет болмаған жағдайда да іздеуді талап етеді.   Кері шығару тәсілінің ерекшелігі қажетті қорытындыға қатынасы бар ағаш бөлігі ғана бағаланады. Бірақ бұл жолдың да өзіндік емістігі бар: егер терістеулер мен тұжырымдар мүмкін болмаған жағдайда ағаш бұтақтарын одар ары қарай туындату мүмкіндігі болмайды. Екі бағыттық шығару тәсілінде алдымен деректердің аз ғана көлемі бағаланады, содан соң гипотеза таңдалады, содан кейін осы гипотезаны қабылдау үшін қажетті деректердің басқа бөлігі сұратылады.  Бұл шығару механизмінде күші қуатты және икемделгіш қасиеті бар жүйені алуға болады. Тура шығару тәсілін пайдаланатын жүйелер білімдерді пайдаланатын жүйелер ішіндегі ең алғашқы қолданылған жол болғандықтан,  бұл тәсілді әдетте негізгі тәсіл деп қабылдайды. Бұндай алғашқы жүйелерде үш түрлі компоненталар болған: продукция жиынынан тұратын ережелер қоры, көптеген фактілерден тұратын деректер қоры және осы білімдерге негіздеп логикалық қорытынды шығаратын интерпретатор. Ережелер қоры мен деректер қоры білімдер қорын құрады да, ал интерпретатор  логикалық шығару механизмін құрады. Сарапшы жүйенің логикалық қорытынды шығару компонентасы білім қоры мен жұмысшы жадысындағы мағлұматтармен жұмыс істеп, сондағы тұжырымдардың дұрыс бұрыстығын тексеретін құрал. Ол қарапайым жүйелерде екі түрлі қызмет атқарады: жұмысшы зердесіндегі фактілер мен білім қорындағы ережелерді қарастырып, олардың «шын» не «өтірік» екенін көрсету үдерісін басқарады. Екінші атқаратын қызметі: ережелерді қарастырып, олардың іске қосылу айрықшылығын тексеріп, олардың қолдану мүмкіндігін қарастырады. Сонымен бірге жүйенің бұл құрамдас бөлігі жүйе орындайтын барлық: кеңес беру, анықтама қызметі,  пайдаланушыға арналған сеанс ақпаратын сақтау, онымен келіссөз жүргізу сияқты көптеген үдерістердін басқару қызметіне қатысады. Шығару әдетте «түсіну – орындау» циклы түрінде орындалады және әр циклда таңдап алынған ержелер деректер қорын түзетіп отырады. Соның нәтижесінде деректер қорының мазмұны бастапқы күйден мақсатты күйге қарай жылжиды, яғни мақсатты жүйе деректер қорында қалыптасады. Басқаша айтқанда, продукциялар жүйесі үшін қарапайым таңдау циклы мен ережелерді орындау циклы жұмыс істейді. Дегенмен жұмыс істеу барысында жүйедегі ережелер қорындағы ережелермен үнемі салыстыру болып отырғандықтан, егер ережелер саны көбейіп отырса, шығару жылдамдығы азаяды.  Енді осы продукциялық үлгіні қолданатын жүйелердің күшті және әлсіз жақтарын атап өтейік. Күшті жағы: Жеке ережелерді құру және түсіну өте қарапайым әрі ыңғайлы; Осындай ережелерді толықтыру, жөндеу, алып тастау, қосу мүмкіндіктері де қарапайым; Логикалық қорытынды шығару механизмі де түсінікті әрі қарапайым. Әлсіз жағы: ережелердің өзара байланысын орнату қиын; білім бейнесінің толық мүмкіндігін бағалау қиындығы; өңдеу деңгейінің өте төмендігі; адам білімінің құрылымынан өзгешелігі; логикалық қорытынды шығарудың икемсіздігі.

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

(k); P; Q: Ai => Bj ; N;

Мұндағы k - ереже нөмірі, P- ереже приоритеті, Q- ережелерді қолдану аумағы  Ai => Bj  –  продукция ядросы, i, j – тұжырымның  => (секвенция) белгісінің қай жағынан алатынын көрсететін параметрлер. Әдетте  i  - Дерекқор,Білім Қоры, Сұхбат,  О (түсіндіру-объяснение блогы) сияқты бөліктерден, ал  j – оның алынатын жақтары да сондай, содан басқа оған толықтыру блогы (блок приобретения знаний) енуі мүмкін, N - продукцияларға арналған түсіндірмелер.  Мысалы мынандай болып келуі мүмкін: АБД => ВБД  немесе  АБД => ВБЗ немесе АД => ВБЗ. Мысал қарастырайық. «Консалтингтік қызмет көрсету» деп аталатын Сарапшы жүйені құру кезінде продукциялық үлгіні пайдаланамыз.  Жүйенің Білім қорындағы бір ережені қарастырайық. Оның сөйлеммен берілген сипаты: «ЕГЕР  процессор аты = «Celeron» ЖӘНЕ  жады көлемі=256 болса, ОНДА осы параметрлері бар барлық компьютерлердің деректерін бер». Ереженің SQL сұрату тіліндегі  сипаты келесі түрде өрнектеледі: «SELECT * FROM basic WHERE proc like 'Celeron%' and memory='256' ORDER BY  art». Ереженің продукция ядросының түрі мынандай болады: А1БД  ЖӘНЕ  А2БД Þ ВБЗбұл жердегі А1БД  = процессор аты = «Celeron» фактісі де, А2БД  = жады көлемі = 256 фактісі болады, ал ВБЗ = осы параметрлері бар барлық компьютерлердің деректерін бер фактісі секвенция белгісінің сол жағында орналасады. Яғни секвенция (Þ) белгісінің сол жағындағы фактілер жұмысшы жиынынан, ал оң жағындағы білім қорынан алынады.  Мұнда жұмысшы жиыны есебінде кәдімгі реляциялық Дерекқорды алуға болады. Ал SQL  сұратуын орындағанда фактілер былайша қалыптасады:  А1БД  = proc like 'Celeron%' және (and) А2БД  = memory='256'  болып, ал шығару бөлігінде  ВБЗ =* FROM basic түрінде болады.

Жалпы жағдайда сарапшы жүйеде пайдаланушының екі категориясы бар. Олардың жүйеден талап ететін мақсаттары әртүрлі болғандықтан пайдаланушылар мынандай екі түрге бөлінеді: 1)әдеттегі пайдаланушы, оған Сарапшы жүйеден кеңес қажет,  сондықтан ол жүйемен адамша сөйлесіп, өзіне қажетті мағлұматты алады; 2) білім инженериясына жататын топ, оларға саладағы маман адам және білім инженері,  оның қажетін Сарапшы жүйенің білімді толықтыру бөлігі деп аталатын компонентасы орындайды және ол сұқбат жүргізу нәтижесінде білімдіерді толықтырып, жөндейді, өзгертеді.                                                                                                             

 Продукцияның негізгі элементі - оның ядросын атқару қызметіне байланысты бірнеше топтарға бөлінеді. Ол топтар 7 кестеде келтірілген.

 

 

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

X/Y

О

Д

З

Л

О

 

+

 

+

Д

+

+

+

+

З

+

 

+

+

Л

+

 

+

+

 

О, Д, Л, З – белгілер программаның әр түрлі мәліметтер, хабарлар, білімдер жиынын сақтап құрайтын бөліктері. Мұндағы О – интерфейс бөлігі, Д – дерекқор, Л – Интерпретатор, З – білім қоры. Продукцияның ядросындағы А мен В-ның осы бөліктердің қайсысынан өзіне арналған мәліметтер мен хабарларды алуына байланысты. Продукциялық ядро бөліктері мен интеллектуальдық программаның әр түрлі бөліктерінің қарым-қатынасын х және у арқылы О, Д, Л, З бөліктеріндегі кез келген хабарды белгілесек, онда продукция ядросының Ах =>Ву - деген түрі А –үшін хабар х - бөлігінен алынады дегенді білдіреді. Мысалы Аз, Вз ядроның екі жағындағы да мәліметтер білімдер қорынан алынады дегенді білдіреді. Ад, Вз А -дағы хабар мәліметтер қорынан, ал В-дағы білім қорынан алынады дегенді білдіреді. Кестедегі «+» белгісімен осы ядроның жиі кездесетін түрлері белгіленген. Мысалы Аз, Вз ядроның екі жағындағы да мәліметтер білімдер қорынан алынады дегенді білдіреді. Ад, Вз А -дағы хабар мәліметтер қорынан  ал В-дағы білім қорынан алынады дегенді білдіреді.

Бұл үлгілердің кеңінен етек жайып, көп қолданыс табуына ерекше әсер ететін бірнеше қасиеттері бар. Оларды атап өтсек: жалпы адамдағы білімдердің көбі топ-топқа бөліп продукция түрінде қарауға лайықталынған деуге болады. Кей продукцияны алып тастағаннан, не жаңаны қосқаннан олардың басқа топтарға әсері жоқ; егер қажет болған жағдайда мұнда кез келген алгоритм бойынша құрылған программаларды іске асыруға болады. Яғни, ЭЕМ лайықталған білімдердің кез келген түрін продукцияларға сақтап, іске кірістіруге болады, онда кез келген саладағы білімдер жиының құрылымдық түрін сақтауға болады, ал оған қолданылатын іс-әрекеттер басқа жерде сақталуы мүмкін. 

Продукциялар үлгісін қолдануға арналған қатаң түрде жіктелген ілім саласы әлі жоқ. Мұнда көбінде эвристикалық ойлау белең алған. Мұндай ілім саласын құру қиындығы, продукция ұғымының солқылдақтығында жатыр.  Яғни, продукция ядросының өзін, әр саладағы мәселе ерекшелігіне байланысты қалай бұрсаң, солай соған жетектеледі, әрі продукцияларды іске қосу барысының өзі де, сала мәселесінің ерекшелігі жетегінде жүре береді. Продукциялық үлгідегі білімдерді іс жүзінде қолданудың тағы бір пайдасы – ол саладағы мәселенің статикалық жағдайынан, динамика түріне өтуін қамтамасыз етеді. Динамикалық жағдайға өтуге продукциялар тобында үнемі өзгеріс жасап тұру және кез келген уақытта іске қосылуға тиісті продукцияны динамикалық түрде бақылау мүмкіндігі, оның тез әрі сапалы орындалуына тікелей байланысты. Продукциялар тез орындалуы үшін, осы сала мәселесінің ерекшелігін ескеретін өте икемді басқару стратегиясын таңдай білу, продукция үлгісін қолдану аясын одан сайын кеңейтеді [22].

Продукциялық ережелер түрінде жазылған жүйеге мысал ретінде әдетте MYCIN программасын келтіріледі. Оның жұмыс істейтін саласы – медицина. Бұл жүйе жобаланып құрыларда оған  бірнеше талап қойылған. Олар: маманның білімін бір жерге жинақтау қажеттігі, ескірген білімдерді алып тастап, оның орнына жаңа білімдерді жинақтайтын қабілетінің қажеттілігі, ұсынған емі жайында түсіндірме бере алу  қасиеті болуы. Осы аталған талап-тілектер жүйенің құрылымына, оған қолданған продукциялар әдісінің өте ыңғайлылығы, азғана уақытта білімдер қорын құрып, ұйымдастыруға мүмкіндік берді. Жүйеде мөлшермен 400-ге жуық ережелер бар, басқару стратегиясы әрекеттерге бойлау әдісімен жүргізіледі [23].  

 

12 Дәріс. Сарапшы жүйелер. Фреймдік, семантикалық желі  үлгілері

 

Дәрістің мақсаты. Білімдерді пайдаланудың фреймдік, семантикалық желілер түрімен, танысу. Осы үлгілердегі шығару тәсілдері.

Дәрістің мазмұны. Фрейм, слот ұғымдары. Фрейм құрылымы. Слоттар мәндерін алу тәсілдері. Фрейм типтері. Фреймдерді жіктеу. Білімдерді семантикалық желі түрінде бейнелеу. Куиллиан үлгісі.

Бұл терминді алғаш рет 1972 жылы М.Минский кіргізген. Фрейм деп - кез келген ұғымның, объектінің, нәрсенің қасиетін сипаттайтын көрсеткіштер жиынын атаймыз. Егер бұл жиыннан олардың бірін алып тастасақ, онда осы нәрсе туралы ұғым тудыра алмайды. Фрейм біздің көріп, естіп жүрген заттарымыздың түсінетін ұғымдарға қатысты психологиялық зерттеулерді бойына жинақтаған теория. Соның негізінде қабылдап алу тәсілдері бір көзқарас тұрғысынан түсіндіріліп, соның негізінде концептуалдық үлгілеу іске асады. Яғни, адамның жадында әр концептуалды нысан үшін белгілі бір қалып  шептер анықталған.  Фрейм теориясының негізгі ой арқауы мынада: адам жаңа жағдайға душар болғанда, өз жадынан, осы жағдайға қатысты белгілі бір құрылымды алып шығады. Әр фрейм әр түрлі ақпаратпен толықтырылып тұруы мүмкін. Фрейм ұғымы  - адам зейіні қабылдайтын түсініктердің жадыда қалыптасатын абстракты бейнесі.  Әр фреймнің өзіндік атауы және өз слоттармен олардың мәндерін қамтитын тізімдері болады. Слот терминал немесе төменгі деңгейдегі фрейм болуы да мүмкін. Фрейм мәндері ретінде деректердің кез келген түрлері мен басқа фрейм атаулары да бола алады. Осылайша фреймдер өзара желілер құра да алады.  Сонымен бірге, фреймдер арасында АКО (a kind of), типіндегі байланыс түрлері бар [20].  Аталған байланыс фреймнің одан да жоғарғы деңгейдегі байланыс түрі бар екенін көрсетеді. Бұл жоғарғы деңгейдегі фреймде слоттар мәні мен тізімдер орналасады.  Бұл үдерісті – мұрагерлік деп атайды. Егер мұрагерлік бірнеше прототиптерден таралса, онда оның жиындық мұрагерлік түрі бар.  Фреймдік үлгі адам жадысы мен оның есі-санасының жүйеленген психологиялық үлгісі ретінде ұсынылған. Әрбір фреймде көптеген кез келген мөлшердегі слоттар бар, оның кейбіреулерін арнайы функцияларды орындау үшін жүйенің өзі тағайындаса, қалғанын пайдаланушы анықтай алады. Фреймдер әдетте, стандартты ситуацияларды бейнелеуге арналған білімдер фрагментін сипаттайды [24]. Кез келген фреймді былайша құруға болады: 

 

 

(ФРЕЙМ АТЫ:

(1-ші слот аты: 1- ші слот мәні),

(2- ші слот аты: 2- ші слот мәні),

…………….

(N- ші слот аты: N- ші слот мәні))

 

Осы жағдайлардың белгілі бір құрылымдық бөліктерін слоттар деп атаған. Слоттар басқа фреймді де бейнелеуі мүмкін, мұндай жағдайда екі фрейм арасында белгілі бір байланыс туындайды. Әрбір фрейм құрылым есебінде сала мәселесіне қатысты білімдерді сақтайды. Оны фрейм-прототип деп атайды.  Ал фрейм слоттары нақты мәндермен толықтырылғанда олар белгілі бір уақиғаны немесе процессті суреттейтін нақты фреймге айналады. Фреймнің басқа құрылымдардан ерекшелігі ол оған мүмкін болатын және туындауы мүмкін жағдайларды үлгілеуге болатындығы.  Ол слоттарға үнсіз келісім бойынша стандартты ситуацияларды тағайындап қоюға байланысты болады.  Іздеу процесі кезінде бұл мәндер одан да нақтырақ мағыналарымен толықтырулары мүмкін. Кейбір айнымалыларды жүйе бөлектеп қарайды. Өйткені оның мәндері жөніндегі мағлұматты  жүйе пайдаланушыдан сұрау арқылы алады. Кейбір айнымалылар кіріктірілген процедуралар көмегімен анықталады. Оларды кейде ішкі процедуралар деп атайды. Айнымалыларға нақты мәндер беру арқасында басқа да процедуралар шақырылып тұрады. Айнымалылар типтерін бұлайша бейнелеу декларативті және процедуралық білімдерді араластырып пайдалануға мүмкіндік береді. Көптеген әртүрлі сала аумақтарының есептері үшін фреймдік үлгі білімдерді қалыптастырудың негізгі жолы болып тұр. Жалпы фреймнің өзі белгілі бір жүйені береді. Яғни фреймдік жүйе – иерархиялық құрылым. Оның түйіндерінде басқа фреймдер орналасуы мүмкін. Енді осы фреймге кіретін деректердің құрылымдық сипатын қарастырайық (6 суретті қара). Осы суретте бейнелеген әр элементтің қысқаша сипатын анықтайық. Фрейм аты. Бұл фреймге берілетін идентификатор, ол әр фреймге беріледі, ол осы фрейм жүйесіндегі осы фрейм үшін ерекше, басқаға ұқсамайтын атау. Әр фреймде көптеген кез келген мөлшердегі слоттар болады, оның кейбіреулерін арнайы функцияларды орындау үшін жүйенің өзі тағайындаса,қалғанын пайдаланушы анықтай алады. Осындай слоттардың біріне  IS-А жатады, ол осы фреймнің ата-фреймін көрсетеді, ал оның слоты өз бойында балалық фреймдер нұсқағыштарын ұстайды. Слоттағы бұл нұсқағыштар фреймдер нұсқағыштарының тізімдері болып табылады, мысалы пайдаланушы атын енгізу слоты, фреймді анықтау мерзімінің слоты, өзгерті мерзімінің слоты, комментарий мәтінінің слоты сияқты слоттарды атауға болады.  Әрбір слот өз кезегінде тағы да деректердің белгілі бір құрылымымен сиптталады. Слот аты. Бұл слотқа берілетін идентификатор, слоттың өзі де фрейм сияқты ерекше, басқаға ұқсамайтын атауға ие болуы қажет.  Әдетте слот атауында ешқандай мағына болмайды, ол осы слоттың идентификаторы. Дегенмен кейбір жағдайларда оның арнайы мағынасы болуы да мүмкін.  Слоттың мәнін алу тәсілі слотқа қандай нақты мән беріледі соны анықтайды. Осындай тәсілдердің бірнешеуі бар және ол деректердің қасиетіне байланысты [20].

 

 

Фрейм құрамы

 

            Фрейм                 Мұрагер         Демон

аты      нұсқағышы

 


Слот 1

 

 

 

 

Слот 2

 

 

 

 

 

 

 

 

Слот n

 

 

 

Слот          слот                  слот

аты             нұсқағышы         мәні

 

6 сурет -  Фрейм деректерінің құрылымы

 

Слоттар мәндерін алу тәсілдері. Үнсіз келісім бойынша прототиптен (атадан) алу. Слотқа  фрейм-прототипінде үнсіз келісім бойынша анықталған мән беріледі, ол мән стандартты болуы да мүмкін. Мұрагерлік арқылы.  Бірінші тәсілден ерекшелігі мән ағымдағы AKO байланысымен қосақталған  аталық фреймнің арнайы слотында беріледі. Формула бойынша. Слотқа белгілі бір формула тағайындалып, сол бойынша есептелеген нәтиже слот мәні болады [17,18]. Қосақталған процедура бойынша. Слотқа белгілі бір процедура тағайындалып, сол бойынша слот мәні алгоритм арқылы алынады. Деректердің сыртқы көздерінен. Зерделік жүйелердегі үлгілерді пайдаланғанда слоттар мәні болып табылатын деректер әртүрлі көздерден, смысалы дерекқордан, датчик жүйелерінен, пайдаланушыдан түсуі мүмкін. Фреймдер теориясында слоттарға әр түрлі арнайы процедуралардың қосақталуы мүмкін болатын жағдай. Ол үшін демон деп аталатын құрылымдар пайдаланылады.  Демон деп белгілі бір шарт орындалғанда соған сәйкес автоматты түрде іске қосылатын процедураны айтамыз.  Демондардың бірнеше түрлері бар. Осындай қосақталған процедуралар механизмдері жағынан реляциялық дерекқорлардағы триггерлер процедураларына ұқсас болып келеді. Мұрагерлік нұсқағыштары. Бұл нұсқағыштар иерархиялық типтегі фреймдік жүйелерде болады. Бұл жүйелерде «абстракты - нақты» байланыстары сипатталады,  олар  төменгі деңгейдегі фреймдердегі слоттар мәні осы аттас жоғарғы деңгейдегі фреймнің слоттарының атрибуттары қандай мағлұматтарды қамтиды, сол жайындағы ақпаратты өз бойында сақтайды. Деректер типтерін көрсету. Слот сандық мәні барекені көрсетіледі немесе слот басқа фреймнің нұсқағышы есебінде жүре алады. Слот мәні. Бұл слот мәнін енгізу пунтісі. Слот мәні осы слоттағы көрсетілген деректер типтерімен сәйкес келуімен қатар мұрагерлік шартының да орындалуы қажет.  Қосақталған процедура. Слот мәні есебінде процедуралық типтегі программаны да пайдалануға болады. Жалпы жағдайда қосақталған процедура басқа фреймнен келіп түскен хабардан кейін іске қосылады. Егер біз білімдерді пайдаланудың фреймдік үлгілерінде процедуралық және декларативтік білімдер қосылады десек, онда жоғарыда аталған демондар мен қосақталған процедураларды процедуралық білімдер дер қарастырамыз. Тағы бір айта кететін жайт, фреймдік үлгілерде шығаруды басқарудың арнайы механизмдері жоқ, сондықтан пайдаланушы бұл олқылықты осы қосақталған процедура арқылы толтыра алады. Сонымен қоса бұл қосақталу процедурасының әмбебаптық қасиеті бар, сондықтан оның фреймдік үлгідегі білімдерді пайдаланудағы иерархиялық және желілік көрсетімдерінен де басқа түрлерін сипаттауға қуаты жетеді. Яғни қосақталған процедуралар көмегімен кез келген программаны жазуға болады. Бірақ ол пайдаланушы үшін қосымша жүктеме. Жасанды Зерде бағытындағы күрделі қолданба есептерін шешетін мамандар үшін таптырмайтын құралдардың бір түрі деуге болады [25].

Фреймдер типтері. Фреймдер мынандай типтерге бөлінеді: фрейм-экземпляр – сала мәселесінің ағымдағы күйін сипаттайтын фреймнің нақты іске қосылған түрі; фрейм-образец – сала мәселесіндегі мүмкін болатын ситуациялар мен объектілерін сипаттайтын шаблон; фрейм-класс – фрейм-образецтердің жиынын сипаттауға арналған жоғарғы деңгейдегі фрейм. Әр фреймдік үлгідегі фреймдер мен слоттардың саны да, құрамы да әртүрлі болуы мүмкін. Дегенмен егер бір фреймдік жүйе құратын болсақ олардың біркелкі болуы үлгіні құруды жеңілдетеді. Ал «Әлем әркелкілігі» концепциясына сәйкес әр түрлі нысандарды біріктіру үшін белгілі бір келісім болуы қажет. Мысалы, жылқы–ат біздің нақты әлемімізде қанаты жоқ жануарлар түріне кірсе, ал аңыз әлемінде оның қанаты бар, мысалы «Ертөстік» ертегісіндегі Шалқұйрық жылқысы. Егер бізге жылқының осы атауларын фрейм түрінде сипаттау қажеттігі болса, онда біз екі түрлі әлемді міндетті түрде қарастырар едік. Жалпы жағдайда фреймдік үлгі  мағлұмдамалық және процедуралық білімдерінің барлық қасиеттерін сипаттауға күші жетеді. Слоттардың фреймдердегі бір біріне ену деңгейлері сала аумағының қасиеттері мен үлгіні іске асыруға болатын тіл мүмкіндігіне байланысты болады. Фрейм-прототиптер сала аумағындағы абстракты ұғымдардың білімін бейнелейді, олар нақты нысандардың кластары. Мысалы:  «адам», «автокөлік» деген сияқты.  Фрейм-экземплярлар сала аумағындағы нақты ұғымдардың білімін бейнелейді, яғни ол саладағы фактілерді сипаттайды. Мысалы «Талқанбаев Кайрат», оның «Мерседес» маркалы автокөлігі бар. Атқаратын қызметіне байланысты фреймдер мына түрлерге бөлінеді: Фреймдер-құрылымдар (нысандар) бұлар сала аумағына қатысты абстракты және нақты заттар мен ұғымдарды мағлұмдалық түрде сипаттайды, яғни нысанды немесе ұғымды сипаттайтын қасиеттер жиынын білдіреді. Мысалы: қарыз, вексель, адам, дәріс деген ұғымдар. Фреймдер-операциялар сала аумағына қатысты әр түрлі түрлендіру үдерістерін бейнелейді, яғни оны сипаттайтын қасиеттер жиынын білдіреді.  Мысалы қарызды алу үдерісі, вексельді толтыру, адамды үйрету, дәрісті оқу деген сияқты. Фреймдер-Ситуациялар сала аумағына қатысты типтік ситуацияларды прагматикалық түрде бейнелейді. Бұндай ситуацияға  фреймдер нысандар және фреймдер рольдер жатады, олар ситуацияны білдіретін сипаттарды өз бойында ұстайды.  Мысалы: апат, қорқыныш, құрылғының жұмыс режимі деген сияқты. Фреймдер-Сценарийлер олар технологиялық сипатта болады да,  белгілі бір іс әрекетті, ұғымды, уақиғаны бейнелейтін типтік жағдайды сипаттайды, белгілі бір әрекеттердің өзгеріп тұруын сипаттайды, яғни жүйенің белгілі бір сценарий бойынша жылжуын бейнелуі мүмкін. Мысалы: туған күнді тойлау, емтиханды тапсыру деген сияқты. Фреймдер-рольдер ол қызмет атқаратын түрде болып келеді де, фрейм-нысанның белгілі бір жағдайда орындайтын типті ролін бейнелейді. Мысалы:менеджер, кассир, клиент, студент, оқытушы. Білімдерді фреймдер арқылы пайдалануды және оны басқару тәсілдерін зерттеу үшін білімдерді көрсетудің келесі талаптарға сәйкес тілін құру: фрейм бірліктерінде білімдерді көрсету; абстракция дәрежесіне негізделген фреймдердің иерархиялық құрылымын енгізу; мағлұмдамалық және процедуралық білімдердің араласқан көрсетімін беру мүмкіндігі деген сияқты талаптар орындалуы қажет [20].

Фреймдерді жіктегенде олардың қасиеттерін есепке алады. Олардың бірнеше негізгі қасиеттері бар. Базалық тип. Фреймнің әр түрлі позициядағы мәліметтерін еске сақтау үшін көп жад көлемі қажет. Бұл жағдайда  әр фрейм өз құрамында барлық фреймдерге ортақ бөліктерді пайдалануға мүмкіндік беретін нұсқағыштары  бар слоттарды ұстап тұрады. Сәйкестендіру үдерісі. Бұл үдеріс нәтижесінде Фрейм дұрыс таңдалып алына ма, сол тексеріледі.  Ол үшін ең алдымен базалық фрейм таңдап алынады. Егер сәйкес келсе, салыстыру үдерісі аяқталады. Егер аталған фреймде, қатесі бар слот анықталса, онда қосымша мәлімет қажет. Иерархиялық құрылым. Мұндай құрылымдардың ерекшелігі мынада: ең жоғарғы деңгейдегі фреймге қатысты атрибуттардағы ақпаратты осы фреймге кіретін төменгі деңгейдегі басқа фреймдердің бәрі пайдалана алады. Фреймаралық желілер. Егер концептуалды нысандарды іздегенде іздеу үдерісі сәтсіз аяқталса, онда осыған ұқсас тағы басқа фреймді іздеу қажеттігі туады. Олар бір-бірінен бөлектегіш нұсқағыштары арқылы байланысқан фреймдер желісін құра алады. «Үнсіз келісім бойынша мәні болу». Фреймнің бұл қасиетіне қатысты бір мысал қарастырайық: «Айгүл Ержанның туған күніне шақырылды. Айгүл Ержанның шахмат ұнататынын біледі. Айгүл бөлмесіне кіріп кішкене темір сандықшасын сілкіледі. Сандықшадан ешқанда дыбыс шықпады».  Бұл мәтіннен әрине Ержанға сыйлық беру мәселесі айтылғаны анық. Енді бұл сөйлемді ЕЭМ-түсіну үшін мынандай Фрейм құрамыз:

 

 Туған күн à сыйлық à шахматтар à шахмат жоқ à сатып алу à ақша  à сандықша à   сілкілеу à дыбыс жоқ àақша жоқ àатасынан сұрау

 

Бұл фреймдегі курсивпен белгіленген ұғымдарды фрейм есебінде компьютер жадында сақтау қажет, яғни бұл фреймдер үнсіз келісім бойынша  фрейм мәні бола алады. «Абстракты- нақты», «Бүтін-бөлігі» қатынастары. Бұл қатынастар иерархиялық құрылымдарда жиі кездеседі. Әдетте, бұл қатынас түрін  IS-A  түріндегі байланыс дейді. Екінші қатынас түрінде төменгі деңгейдегі ұғым жоғарғы деңгейдің бір бөлігі болып табылады. Оны PART-OF деп белгілейді [17,18].

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

 

 

 

 

 

 

 

 

13 Дәріс. Сарапшы жүйелер. Сарапшы жүйелерді жобалау ерекшеліктері

 

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

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

Жалпы жағдайда программалау тәсілін екі түрге бөліп қарауға болады. Әдеттегі процедуралық программалау және Жасанды зерде әдістерімен программалау.  Процедуралық програмалау  тәсілінде компьютерге өте мұқият түрде есептің шешімін талдап, түсіндіріп беру қажет. Яғни, бұл тәсілмен  Бейсик, Фортран, Паскаль, және т.б программалау тілдерінде программа жазылады [22].  Жасанды зерде әдістерімен программалау, өзінің құрамында  сарапшы жүйе тәсілінде программалауды ұстайды (7 суретті қараңыз).  Программалаудың бұл стилінде беріліп, жинақталған алгоритмдік шешімі жоқ мәселелер қарастырылып,  олар таңбалы механизм  арқылы іске асатын шешу жолын пайдаланады. Ал ЖЗ программалары әдетте ЛИСП, ПРОЛОГ сияқты таңбалы программалар тілдерінде жазылады. Мұндай программалар айнымалылары стек жадында орналасады, яғни компьютер жадының белгілі бір жерінде емес.

 

 

 

 

 

 

 

 

 

 


7 сурет- Программалаудың үш түрі

 

Программалаудың бұл тәсілінде деректерді басқару үдерісі компьютердегі бар үлгілермен  салыстыру және тізімдер құру арқылы іске асады. Тізімдерді құру технологиясы қарапайым, оның негізінде кез келген деректер құрылымын құруға болады [23]. ЖЗ программаларының әдеттегі программалаудан тағы бір ерекшелігі, ол оператордың мынадай жиынын пайдаланады:

Процедураны шақыру;

Бірінен соң бірін орындау;

Рекурсия.

Процедуралық программалардағы деректермен жұмыс істегенде «=» немесе « :- »  операторлары  (мәнді беру) пайдаланылады.  Мысалы:

if-then-else - өту;

Do- while – процедураны шақыру;

repeat-until – кезегімен орындау.

Ал ЖЗ программалары әдетте ЛИСП, ПРОЛОГ сияқты таңбалы программалар тілдерінде жазылады. Программалаудың бұл стилінде деректерді басқару үдерісі жадыдағы бар үлгілермен  салыстыру және тізімдер механизмі арқылы  іске асады. Жасанды зерде тілдері мен процедуралық программалау тілдері арасындағы айырмашылықты мынадан көріп білуге болады: егер программа Фортран  және Паскаль тілінде оңай жазылса, онда оны   ЛИСП мен ПРОЛОГ-та жазу қиын. Және керісінше, егер программаны ЛИСП пен ПРОЛОГ-та жазу оңай болса, оны Фортран мен Паскальда жазу қиын [14,17]. Енді ЖЗ мен СЖ программаларының арасындағы  айырмашылықты анық сезіне білу үшін, төменде көпшіліккке кеңінен таныс ЖЗ программаларының тізімі келтірілген. Бұл программалар СЖ программасына жатпайды. Ол тізімге мыналар кіреді: кішкене (3 жасар ) баланың айтқан әңгімесін қарап шығып, оны қайтадан әңгімелеп бере алатын программа, ол белгілі бір дәрежеде табиғи тілде «түсініп», оның себеп-салдарлық байланыстарын  анықтай білуі керек; адам дауысынан принтерге басып шығару, пайдаланушы  адам микрофонға сөйлейді, ал программа принтерге мәтінді басып шығарады; адам зердесінің жұмысын үлгілі көрсете алатын программа, мысалы, геометриялқ фигуралардағы ұқсастықты табу есептері,  әдетте мұндай есептер – инттелектуалдық тестер деп аталатын топқа жатады; математикалық теоремаларды автоматты түрде дәлелдейтін немесе сол арқылы жаңа теорема  аша алатын программалар; теледидар  камерасы түсірген бейнелерге талдау жасай алатын программалар.

         Ал СЖ программаларын жобалағанда оның негізі мақсаты мен құруын ерекшелеп, түсіне білу керек. СЖ құрудың негізгі мақсаты мәселені адам – мамандай шеше алатын компьютерлік программа құру, яғни зерделік түрдегі программалар құру [25].  СЖ программаларын бағалау белгілеріне мыналарды жатқызуға болады:

-                   программаның негізгі қызмет істеу әрекетін қайталай алатындығы;

-                   программа өзінің тапқан шешімін адамға түсінікті тілмен түсіндіріп бере алатынындығы;

-                   программа пайдаланушы адаммен табиғи тілде Сұқбат (пікір алысу) жүргізе алатындығы.

         Сарапшы жүйе программалары жасанды зерде тәсілінде программалардың барлық жолдарын, әдістерін пайдалана алады. Мысалы, компьютермен шахмат ойнау программасын алайық. Бұл программалардың көпшілігінің негізінде «Дөрекі күш» деп аталын тәсіл салынған, яғни ойын каталогында бүкіл мүмкін болатын ойын жолдарымен қатар қарсы жақтың  контр жолдары да салынады. Мұндай үлгіде бірнеше ойнау деңгейлері қарастырылады. Бірақ барлық мүмкін болатын варианттардың өзара құрастыру саны өте үлкен болғандықтан, компьютер белгілі бір деңгейде ойынды тоқтатуға мәжбүр болады. Дегенмен мұндай түрдегі программаны сарапшы жүйедегі программа деуге болмайды. Өйткені оның ішкі мазмұны зерделік емес, механикалық түрде. Егер программа адамға тән белгілі бір эвристикалық іздеуді жасап, өз әрекетін адам тілінде түсіндіре алса, онда оны сарапшы жүйе программасына жатқызуға болар еді.

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

-         білімдерді ерекшелеу және басқару;

-         іздеу тәсілдері;

-         эвристика тәсілдері;

-         ережелерге негізделген автоматты түрдегі тадқылау;

-         табиғи тілді пайдалану.

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

Іздеу тәсілдері. Жасанды зерде программаларын бастапқы күй, соңғы мақсатты күй сипаты болады, оны іздеу тәсілдері көрсетіледі. Жасанды зерде проблемалары әдетте кеңістіктегі күйі бойын іздеу әдістерімен тікелей байланысты. Іздеу әдістері есептің мақсатын бір күйден екінші күйге өту арқылы іске асырады. Әрбір келесі қадамды жасау үшін, қарапайым механикалық стратегия  пайдаланылады. Мұндай стратегия екі түрде болады: тереңге іздеу,  жайылып іздеу. Егер таңдау механизмінде белгілі бір адамға тән тәсіл салынса, онда ол эвристикалық іздеуге жатады.

 

 

 

 

 

 

 

 

 

 

 


8 сурет - Сарапшы жүйе архитектурасының негізі элементтері

 

Эвристикалар. Егер  шешім іздегенде белгілі бір формула немесе алгоритм болмаса, онда бір ережеге сүйеніп шешім ізделеді де, осы ережені - эвристика деп атайды. Мұндай эвристиканы пайдаланатын программаны жазу үшін адам-маманның ойлау механизмін зерттеу қажет. Ол үшін оны бақылау, интьервью жазу, статистикалық деректер жинау сияқты тәсілдерін пайдаланып зерттеу жүргізу қажет. Көптеген эвристикалық программалар сол салаға қатысты адам-маман  сарапшы ой тұжырымдарымен шешуге жетудегі тиімді жолдарды іске асырады. Мұндай эвристиканы жүйелеп, белгі бір қалыпқа келтіру үшін, сарапшы адамның іс-әрекетін зерттеу керек, яғни адамның ойлау психологиясын зерттеп, оның ойлау деңгейіне белгілі бір түрде тәжірибелер жасау қажет.

Автоматты түрдегі талқылау. Сарапшы жүйедегі шешімді іздеудегі қолданылатын тәсілдер  әдетте ережелермен жұмыс істейді. Мысалы егер А шын болса, онда В-ны орында деген қарапайым продукцияның орындалуы арқылы іске асады. Бұл кез келген сала мәселесін осындай ережелер тізбегіне сыйдыра алсақ, онда автоматты түрде талқылау, орындау үдерісін іске асырған боламыз. Бұл үдерістегі негізгі ұғым - логикалық шығару. Ол екі аспектіде орындалады. Біріншісінде: бар фактілер мен ережелерді белгілі бір жорамалды тексеріп, шын екенін дәлдеуге пайдаланады. Оны - тұжырымдаудың тура  тізбекті әдісі деп атайды. Екіншісінде: жасалған тұжырымнан, шын мәніндегі фактілерінің ережелерге шығу. Оны - тұжырымдаудың кері тізбекті әдісі деп атайды.

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

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

 

14 Дәріс. Сарапшы жүйелер. Сарапшы жүйелерді құрудың кезеңдері мен құралдары

 

Дәрістің мақсаты. Сарапшы жүйелерді қолдану аумағы, құру кезеңдері және құралдарымен танысу.

Дәрістің мазмұны. Сарапшы жүйелерді құрудың кезеңдері. Сарапшы жүйелерді құрудың кезеңдерінің қызметтері.  Білм қорын дамытудың факторлары. Сарапшы жүйелерді жасаудың аспабтық құралдары және олардың жіктелуі.

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

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

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

Ал  орындау кезеңінде маман адам жүйенің білім қорын білімдермен толтырады. Білімді ала білу үдерісі маманнан білімді алу, жүйенің тиімді жұмыс істеуін қамтамасыз ететін түрде және СЖ түсінікті болатын түрде білімдерді ұйымдастыру. Білімдердің  эвристикалық сипаты  оларды ала білу үдерісін қиындатады.

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

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

Сарапшы жүйелерде кез келген уақыт сәттерінде білімнің үш түрлі типтері болуы мүмкін. Оларға мыналарды жатқызамыз: құрылымдық, динамикалық, жұмысшы. Құрылымдық білімдер -  сала аумағына қатысты статикалық (тұрақты, өзгермейтін) білімдер.  Бұл білмдер анықталғаннан кейін өзгермейді. Құрылымдық динамикалық білімдер -  сала аумағына қатысты өзгеріп тұратын білімдер. Олар жаңа мағлұматтар түскен сайын жаңарып, өзгеріп тұрады.  Жұмысшы білімдер – сала аумағындағы нақты бір есепті шешуге арналған немесе кеңес беруге бағытталған білімдер жиынтығы.

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

Программалаудың таңбалық тілдері.  Бұл тілдер сарапшы жүйелердi құру барысын тездетуге арналған. Бұл тiлдер қатарына: таңбалы хабарларды жөндеуге арналған тіл – ЛИСП жатады. Бұл тiлдерде жасалған құралдардың жақсы, жаман жақтары дабар. Программалаудың iс-әрекет тiлдерi таңбалы хабар, мәлiметтермен жұмыс iстеуге өте ыңғайлы болғанымен, программалау тiлдерiнiң төменгi дәрежесiне жатады. Ол программалаушы адамға бiрталай қиындық келтiредi.

Білім инженериясы тілдері.  Бұл топқа программалаудың қисынды жүйедегi тiлi - ПРОЛОГ және продукциялық түрдегі жүйелерді құруға арналған OPS-5 құралы  жатады. ПРОЛОГ тiлi сарапшы жүйелердi құруда едәуiр табыстарға жеткiзедi, дегенмен бұл тiлдегi басқару әдiсi, тiлдiң құрамына кiргендiктен, жүйе бөлiктерiнiң  бiр-бiрiмен қарым-қатынаста болуын біршама қиындатады. Жоғарғы дәрежедегi тiлдер, жүйелер құруда ең жақсы құрал болғанымен, оның уақытын өте ұзартып жiбередi. Сарапшы жүйе - программалау бағытындағы кеңінен қолданылатын тілдер қатарына ПРОЛОГ тілін жатқызуға болады. Бұл басқалармен салыстырғанда жас тіл, оның негізінде математикалық қисын әдістері жатыр. Бұл дербес компьютерлерге арналған сарапшы жүйелер, білім қоры, табиғи тілмен жұмыс істейтін жүйелер сияқты программалар құруға мүмкіндік береді. ПРОЛОГ тілі - жоғарғы деңгей тіліне жатады. Қазіргі кезде ПРОЛОГ тілі де, оның негізіндегі теориялық концепцияларда көптеген салаларда кеңінен тарап, етек жайды. Ондай сала қатарына: есептеу жүйелері архитектурасы, программалау тілдері семантикасының формальды сипаты, дедуктивтік мүмкіндігі бар дерекқорлар  сарапшы жүйелерді құру, лингвистика сияқты сала мәселелері жатады.

Сарапшы жүйелерді жобалауды автоматтандыру жүйелері. Мұндай жүйелер, жобаның өзін автоматтандыруға арналған құрал түріне жатады. Осындай құралдың мысалы ретінде TEIRESIAS жүйесін  атауға болады. TEIRESIAS жүйесі білім қорындағы ережелерге сай белгілі бір шешім қабылдап, сол алған шешімді маманға сынауға ұсынады. Адам-маман жүйемен сұхбат нәтижесінде жаңа ережелерді тұжырымдап, ескі ережелерге өзгертулер енгізуі керек. Жүйенің осындай жұмыстарды жүргізіп отыруы, «Ережелер үлгісі» деп аталатын құрылымдар көмегімен іске асады. Мұндай үлгілерді мета-ережелер деп атайды.

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

1)     білімдерді пайдалану үлгілері,

2)         интерпретатор – бұл білімдерді пайдалану үлгілерін белсенді түрге келтіруді басқаратын құрал сияқты екі түрі бар.

 Білімдерді пайдалану үлгілерінің жинағы - сарапшы жүйенің білім қорын береді де, ал интерпретатор құралы – қисынды шығару машинасы (МЛВ) деп аталады. Осындай құрылымдарды базалық компоненті есебінде пайдалану, СЖ-нің қабығы деп аталатын құралдарды жасауға негіз болды. Қазіргі кезде классикалық деп атауға болатын сондай қабықтардың бірі – EMYCIN. Бұл құралды басқа сала есептеріне де қолдануға болады, өйткені оның білім қорын салаға байланысты білімдер жиынымен толтыру жеткілікті. MYCIN жүйесіне пайдаланушы адаммен пікір алысу, ағылшын тілінде жүргізіледі. Ол үшін оның  «Лингвистический процессор»  деген программасында мәселеге қатысы бар көптеген ағылшын сөзінің қоры бар. Жүйенің тағы бір қасиеті: өзінің келген шешімін түсіндіріп бере алуы. Бұл жүйенің атының өзі айтып тұрғандай, Empty MYCIN - бос MYCIN, 1981 жылы MYCIN жүйесі негізінде құрылған. Бұл қабық MYCIN жүйесінің барлық функционалдық мүмкіндіктерін сақтап отырады. Соның нәтижесінде, оны басқа сала мәселелерге қатысты білімдермен де толықтыруға болады. Қабықты одан әрі толықтырып, жұмыс істеу нәтижесінде, бұрынғы прототипке бірталай өзгерістер мен толықтырулар енгізілуі арқасында,  жобалар жұмысын автоматтандыруға мүмкіндігі бар TEIRESIAS  жүйесі дүниеге келді. Программа құрамында “Білім редакторы” деп аталатын бөлігі бар. Ол үнемі ережелерді өңдеп, түзетіп отырады. Белгілі бір сала мәселесі бойынша үлкен білім қорын пайдалана отырып, жүйе осы білім қорын басқару процесін де қатар жүргізіп отырады. EMYCIN жүйесі көптеген сала есептерін шешуге мүмкіндік беретін консультациялық программаларды құруға арналған “қаңқа” (скелет) қызметін атқара алатындықтан EMYCIN қабығын дедуктивті түрде шешілетін есептерге қолдануға болады. Маманнан одан  ары қарай да білімді ала біліп, білім қорын толықтыру үшін TEIRESIAS деп аталатын программалық құрал жасалған. Онда жүйедегі білімдердің өзі туралы мағлұматтар жинақталған. Оларды - мета-білімдер деп атайды, яғни білімдер жайындағы мағлұматтар дегенді білдіреді. Бұл құралда мета-білімдер, мета-ережелер, шаблондар сияқты мағлұматтар іріктеліп, жинақталған және олар керек кезінде іске қосылып тұрады [24].  

OPS-5 жүйесі. Бұл жүйе - продукциялық үлгідегі жүйелерді құруға лайықталған құрал түріне жатады. Ол АҚШ-тың Карнеги-Меллона университетінде жасалған.  Бұл құралды білімдерді пайдалануға негізделген жүйелерді жасауға арналған  арнайы программалық тіл деп те қарауға болады. OPS-5 жұмысшы зердесі WME деп аталатын элементтерден тұрады [25]. Ол элементтер мына түрде беріледі: <объект-типі, 1- атрибут-аты, 1- атрибут мәні, 2- атрибут-аты ... > яғни, WME-элементін «объект-атрибут-мәні» үштігі түрінде қарауға болады. Мысалы <адам, Талғат, бойы 180см.> деген үштік, бойы 180 см Талғат есімді адам бар екенін көрсетеді. Бұл элементке сілтеме жасайтын ереже түрі мынадай болады: (Р- продукция аты; (WMEс немесе - WMEс /теріс мәнде/) =>( WMEА құру)). Бұл продукцияның сол жағы – анецедент, ал оң жағы – консеквент деп аталады. Бұл ереженің орындалу мақсаты мынадай: Егер WMEс- барлық қатары жұмысшы зердесінде болса, онда ол WMEА- элементімен толықтырылады. Мысалы, сөйлеммен берілген мынадай ереже бар делік: «Егер жоба құрудың негізгі мақсаты - сарапшы жүйе құру болса және оны құру құралына супер-мини компьютердің ақпараттық құралдары мен программалық қамтамасына OPS-5 жатса, онда оны жасау құралы ретінде OPS-5 жүйесін алуға болады». Жалпы OPS-5 арнайы жүйе. Ондағы шешімдерді табу үшін RETE деп аталатын алгоритм қолданылған. Бұл алгоритм өзара дау тудыратын ережелерді бір жерге жинақтап, оны шешуге тырысады. Оны шешуге арналған тәсілдердің ішінен OPS-5 жүйесі, LEX- деп аталатын тәсіл түрін пайдаланады. Бұл тәсілде ең соңғы қалыптасқан WME элементі бар ережелерге бірінші мән беріледі. Осындай ережелердің бірнешеуі жинақталса, онда оның ішіндегі сол жағында шарттар саны ең көп ереже бірінші орындалады. Сонымен OPS-5 жүйесін сарапшы жүйені құруға арналған білім инженериясы тілдері қатарына жатқызады.

 

15 Дәріс. Сарапшы жүйелер.  Іс жүзіндегі сарапшы жүйелер. Сарапшы жүйелерді жіктеу

 

Дәрістің мақсаты. Сарапшы жүйелердің даму тарихымен танысу. Сарапшы жүйелердің белгілері, іске асырылған сарапшы жүйелермен танысу.

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

Әдебиеттегі шолулар көрсеткендей, сарапшы жүйедегі программалардың жасанды зерде тарауларынан ерекшелейтін басты қасиеттерінің бірі - оның білімдер қоры болып табылады. Қазіргі уақытта үлгілердің үш  түрі бар: продукциялық, семантикалық желілер, фреймдер. Продукциялық ережелер түрінде жазылған жүйеге мысал ретінде MYCIN программасын келтіруге болады. Оның жұмыс істейтін саласы – медицина. Осы жүйеде қолданылған әдістер мен тәсілдерді пайдалана отырып,  EMYGIN деп аталатын программа жасалынды.

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

а) денсаулық диагностикасы. Диагностикалық жүйелер организм қызметіндегі  бұзылған байланыстарды және олардың себептерін анықтауға арналған. Ең кеңінен танымал денсаулық диагностикасы жүйесінің мысалы ретінде MYCIN жүйесін атауға болады,  ол менингитпен және бактериялық инфекциямен ауырған адамның ауруын анықтап, оны бақылауға арналған; 

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

в)жоспарлау. Жоспарлау жүйелері көптеген айнымалылары бар есептерді шешкенде нақты мақсаттарға жетуге арналған. «Informat» деген Дамшық фирмасы сауда саласында бірінші рет сатып алушыларға өз офисінде орнатылған 13 жұмысшы станцияларын ұсынған. Олар сатып алушылар қажетіне және қаражатына мүмкін келетін компьютерлер сатып алу жөнінде 15-минуттық тегін кеңестер бере алады;

г) тарату. Тарату жүйелері байқау нәтижесінде белгілі бір қорытынды жасау қабілетіне ие. Мысалы осындай жүйеге PROSPECTOR жатады. Ол өз құрамында тоғыз маман адамдар білімдерін жинақтайды. Осы тоғыз түрлі сараптау әдістерін пайдалану арқылы жүйе құны миллион доллар болатын  кен орнын анықтады. Және де ол жерде ондай кен болатынын аталған мамандардың бірде біреуі болжаған жоқ еді. Тағы бір осындай жүйеге HASP/SIAP жатады. Ол акустикалық із кесу жүйелері көмегімен Тынық мұхиттағы кемелердің орналасу орны мен типтерін анықтайды;

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

е) механикалық және электрлік құрылғылардағы ақаулардың диагностикасы.  Білімге негізделген бұл саладағы білімдер механикалық және электрлік машиналарды (автомобильдер, дизель локомотивтері т.б.) жөндеуде және компьютерлердің аппараттық және программалық қамтамаларының қателерін жөндеуде  қолданылады;

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

Табиғи тілде сұхбат жүргізу әдістері. Табиғи тілде сұхбат жүргізуді мына кезеңдерге бөлуге болады:

1)      грамматикалық талдау;

2)      түсіну;

3)      қорытынды жасау;

4)      синтез.

Грамматикалық талдау мен синтез тілдер аумағындағы, ал түсіну мен қорытынды жасау – ұғымдар аумағындағы білімдер көмегімен іске асады. Тіл аумағындағы сөйлем мағынасын түсіну былайша өтеді: сөйлемді грамматикалық талдау сәтті аяқталса, бірақ кейбір таңбалар тізбегін оқып-түсіну сәтсіз болса, онда «Қайталап анықтау» деп аталатын модуль іске қосылады. Сұхбат жүргізу нәтижесінде анық емес сөздер, сөйлемдер кездесуі мүмкін [21].  

Іс жүзіндегі сарапшы жүйелер. 60-70-ші жылдары құрылып,  кеңінен тараған сарапшы жүйелер қазір классикалық жүйелер қатарына кірді. Шығу тегі, қолдану аумағы, қолданылған идеялары және пайдаланылған аспаптық программалық құралдары бойынша оларды бірнеше топтарға бөліп қарастыруға болады:

1)     MYCIN-EMYCIN-TEIREIAS-PUFF-NEOMYCIN. Бұл медицинаға қатысты СЖ тобы және соларды құруға арналған сервистік программалық құралдар тобы;

2)     PROSPECTOR-KAS. PROSPECTOR - ол геологиялық талдауларға негізделіп, кен орнын іздеуге және болжауға арналған. Оның KAS- жүйесі PROSPECTOR сарапшы жүйесі үшін білімді ала білуге және оны толықтыруға қызмет етеді;

3)     CASNET-EXPERT. Бұл CASNET жүйесі – денсаулық сарапшы жүйесі, ол көз ауруларының диагностикасы мен емдеуіне арналған.  Оның негізінде EXPERT деген білім инженерия тілі құрылған, бұл тіл көмегімен бірнеше денсаулық диагностика жүйелері құрылған;

4)     HEARSAY-HEARSAY-2-HEARSAY-3-AGE. Алдыңғы екі жүйе адам сөйлеуін тани білетін зерделік жүйелер,  ондағы сөздер берілген сөздіктен алынады. Бұл жүйелер айрықша құрылымда жасалған. Онда жарнама тақтасы  -  ауқымды деректер қоры пайдаланылады,  онда ағымдағы жүйе нәтижелері сақталады. Осының негізінде сарапшы жүйені құруға арналған HEARSAY-3 және AGE (Attempt to Generalize – қатынас құру) деп аталатын аспаптық құралдар жасалды;

5)     Ал AM (Artifical Mathematician- жасанды математик) және EURISCO жүйелері Станфорд университетінде құрылды. Оны докторД. Ленат зерттеу және оқыту мақсатында құрған. Ленат кез келген сарапшы жүйенің тиімділігі оған салынған білімдерге байланысты деп есептейді. Оның пікірі бойынша жүйенің үйренуге деген қабілеті болуы үшін оған жалпы сипаттағы миллионға жуық мағлұматтар салынуы қажет.

   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16.        Язык программирования Хаскелл http://haskell.org/, http://www.haskell.ru/

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

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

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

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

21.   Попов Э.В. Экспертные системы: Решение неформализованных задач в диалоге с ЭВМ.- Наука, 1987. - 288 с.

22.   Алексеева Е.Ф., Стефанюк В.Л., Экспертные системы – состояние и перспективы. //Изв.АН СССР Техн. кибернетика. 1984. N5. С.153-167.

23.   Построение экспертных систем. Под.редакцией Ф.Хейес Рот, Д.Уотерман, Д.Ленат – М.:Мир, 1987. - 441 с.

24.   Базы знаний и интеллектуальные системы /Т.А.Гаврилова, В.Ф.Хорошевский – СПб.:Питер, 2000. – 384 с.

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

 

Мазмұны

Кіріспе

3

1 Дәріс. Жасанды зерде тілдері. Логикалық программалау негіздері

4

2 Дәріс. Жасанды зерде тілдері. ПРОЛОГ-та жұмыс істеу

8

3 Дәріс. Жасанды зерде тілдері. Функционалдық программалау негіздері

12

4. Дәріс. Жасанды зерде тілдері. ЛИСП және Хаскелл тілдерінің мүмкіндіктері

17

5 Дәріс. Жасанды зерде есептеріне кіріспе. ЖЗ негізгі ұғымдары

23

6 Дәріс. Жасанды зерде есептеріне кіріспе. ЖЗ есептерін жіктеу

27

7 Дәріс. Есептерді шешу әдістері.Кеңістіктегі күй әдістері

31

8 Дәріс. Есептерді шешу әдістері.Эвристикалық және редукция әдістері

34

9 Дәріс. Есептерді шешу әдістері.Предикаттарды есептеу әдісі

37

10 Дәріс. Сарапшы жүйелер.Білімдерді пайдалану үлгілері

40

11 Дәріс. Сарапшы жүйелер. Продукциялық үлгілер

46

12 Дәріс.Сарапшы жүйелер.Фреймдік және семантикалық желі  үлгілері

50

13 Дәріс. Сарапшы жүйелер. СЖ жобалау ерекшеліктері

56

14 Дәріс. Сарапшы жүйелер.СЖ құрудың кезеңдері мен құралдары

59

15 Дәріс. Сарапшы жүйелер. Іс жүзіндегі СЖ-лер. СЖ жіктеу

63

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

67

2012 ж. жинаќ.жоспар 356 реті