Читайте также:
|
|
Основні поняття і класифікація мовно-програмних інтелектуальних систем (ІС)
Мовно-програмні інструментальні засоби(ІЗ) ІС, які принципово прискорюють створення інтелектуального й програмного забезпечення ІС у харчовій технології, реалізують процедури придбання й переробки знань, а також підтримують експлуатацію ІС, будемо підрозділяти на три основних типи мови інтелектуального програмування (МІП); універсальні програмні засоби, кістякові (порожні) програмні засоби або «оболонки» ІС. Мовно-програмні інструментальні засоби ІС дозволяють практично реалізувати нову інформаційну технологію.
У наведеній класифікації, що у цей час, однак, не є загальноприйнятою й повністю сталою, мовно-програмні ІЗ перераховані в порядку вибування працезатрат, необхідних на створення з їхньою допомогою інтелектуального й програмного забезпечення конкретної ІС. Дійсно, при використанні ІЗ першого типу класу МІП в завдання розроблювача входить програмування всіх компонентів ІС мовою щодо низького рівня. Використання ІЗ першого типу у вигляді МПЗ дозволяє значно підвищити рівень мови, що, як правило, спричиняє зниження ефективності.
ІЗ у вигляді універсальних програмних засобів (ІЗ другого типу) дозволяють розроблювачеві ІС не програмувати деякі або всі компоненти ІС, а вибирати їх із заздалегідь складеного набору. При застосуванні ІЗ типу «оболонки» ІС розроблювач ІС повністю звільняється від робіт зі створення програм, тому що він бере готову «порожню» систему. Однак при використанні ІЗ другого й особливо третього типів можуть виникнути наступні проблеми: 1) керуючі стратегії, вкладені в процедури висновку ІЗ, можуть не відповідати методам рішення, які використає експерт, взаємодіючий з даної ІС, що може привести до неефективних, а можливо, і неправильних рішень; 2) МПЗ, прийнятий в ІЗ, може не підходити для даної предметної галузі.
Мови інтелектуального програмування. До них відносяться мови програмування (МПП); мови інженерії знань, або мови подання знань (МПЗ).
Мови програмування. До мов програмування відносяться мови функціонального (або символьного) програмування (МФП); мови логічного програмування (МЛП); мови об’єктно- орієнтованого програмування (МООП).
Мова функціонального (символьного) програмування (МФП) — це декларативна мова програмування (МП), заснована на понятті функції, що представляє собою опис залежності результату від аргументів за допомогою інших функцій й елементарних операцій. Функції в МФП тільки задають залежність і не визначають порядок обчислень. У МФП немає понять змінної й присвоювання, тому значення функції залежить тільки від її аргументів і не залежить від порядку обчислень. Найбільш широко використованими МФП є: ЛІСП (LISP), РЕФАЛ, FPS (Function programming System), АСПФ, УТОПІСТ та інші.
Мова логічного програмування (МЛП) — це мова інтелектуального програмування, заснована на обчисленні предикатів, у якому всі декларативні й процедурні знання відображуються у вигляді синтаксичних ППФ. Достоїнством МЛП є наявність формальних процедур, що дозволяють виконувати висновок й аналіз таких характеристик записів у вигляді тверджень і правил, представлених ППФ, як еквівалентність, несуперечність й ін. Недоліком МЛП є погана наочність для користувачі інформаційних одиниць, записаних у вигляді ППФ. Найпоширенішими МЛП є: ПРОЛОГ (PROLOG), APES, APLICOT, DUCK й ін.
Мова об’єктно- орієнтованого програмування (МОБОП) — це МП, на якому програма задається описом поводження сукупності взаємозалежних об’єктів. Об’єкти між собою обмінюються запитами. Реагуючи на отриманий запит, об’єкт посилає запити іншим об’єктам, одержує відповіді, змінює значення своїх внутрішніх змінних і видає відповідь на отриманий запит. Механізм запитів у МОБОП відрізняється від механізму процедур у процедурних мовах тим, що при виконанні запиту об’єктом безпосередньо можуть бути тільки змінені значення його змінних. Прикладами МОБОП є: SMALLTALK, KBS, LOOPS, ROSS й ін.
При розробці ІС досить часто використовують мови процедурного програмування, які можна розглядати як МПП нижнього рівня. Мова процедурного програмування (МПП) - це імперативна МП, заснована на поняттях процедури й змінної. Процедура виконує деяку дію з використанням й змінюванням значень змінних, які є параметрами цієї процедури, а також глобальних і локальних змінних. Дія процедури описується послідовністю більше простих дій, виконуваних звертаннями до інших процедур і базових операторів МПП. До мов процедурного програмування відносяться: С (Сі), ПАСКАЛЬ, й ін.
Мова С (Сі) - це один з найпоширеніших ефективних щодо низького рівня МПП, що використовують для створення операційних систем і називають мовою системного програмування. Операційна система UNIX написана майже повністю на Сі. Мова Сі працює безпосередньо із символами, числами й адресами пам’яті, а не з рядками символів, наборами даних, списками або масивами на відміну від МП високого рівня. Вона пропонує не тільки пряму перевірку, цикли й підпрограми, але й більш складні схеми керування, типу паралельних операцій або підпрограм. СІ розроблений для використання з операційною системою UNIX і працює на різноманітних ЕОМ і ПЕОМ (наприклад, DECVAX, IBM РС й ін.). Слід зазначити, що в ряді випадків мова ЛІСП також відносять до МПП.
Мови інженерних знань. Мовами інженерних знань, або МІЗ, є: фреймові МІЗ; мови продукційно- орієнтованого програмування (МПОП); мови граматико - семантичної обробки знань (МСГО).
До фреймових МПЗ відносяться|: KRL, (Knowledge Representation Language), FRL (Frame Representation Language), КЕЕ (Knowledge Engineering Environment), SRL (Schema Representation Language).
Мова продукційно - орієнтованого програмування (МПОП) (або МПЗ, заснований на правилах, або продукційних МПЗ) - це МПЗ, у якому непроцедурний опис програми задається сукупністю продукційних правил без явної вказівки послідовності їхнього застосування. На кожному кроці виконання програми вибирається одне або декілька ПП, умови яких відомі, і виконуються відповідні дії цих ПП. До класу МПОП належать: ARS (Antecedent Reasoning System); 0РS, ЕХРЕRТ, ЕХРRS (EXPert Prolog System). Серед класу МСГО найпоширенішою є мова ATNL (Augmented Transition Network Language).
Універсальний програмний засіб. Це програмний ІЗ, що програмно реалізує різні МПЗ, структури інформаційних одиниць і можливості, що дозволяють розробляти прикладні ІС для рішення НФЗ у різноманітні предметних галузях. До універсальних програмних засобів (УПЗ) відносяться: ОРS, АGE, КЕЕ, ROSIE й ін.
|
|
KAS (Knowledge Acquisition System).
На рис. 9.1 показана наближена ієрархія ефективності деяких МІП для побудови ЕС залежно від їхньої складності й ступеня невизначеності НФЗ. Таким чином, при виборі типу й класу МІП для побудови ІС виникає альтернатива між зручністю й адекватністю опису НФЗ й ускладненням, а отже, зниженням ефективності ІС при використанні мов програмування високого рівня.
Загальна характеристика мов функціонального програмування
Мова ЛІСП (LISP — LIST Processing). Це один з найпоширеніших мов функціонального (символьного) програмування, заснований на понятті списків або символів, у якості яких розглядаються всі об'єкти МП (програми й дані). Основні властивості ЛІСПа: легка й гнучка обробка символів, автоматичне керування пам’яттю, розвинені процедури редагування й засоби налагодження, єдиний спосіб подання програм і даних, що дозволяє програмі модифікувати свій власний код так само просто, як і дані. Остання властивість сприятлива для написання програм, які можуть уводити нові правила або модифікувати існуючі в БЗ правила. Теоретичною основою мови ЛІСП є метод обчислення, запропонований в 1930-і роки А. Черчем у якості строгої математичної моделі для обчислення функцій.
Коротко розглянемо типи даних, форму програм, основні операції над списками, операції присвоєння значень атомам-змінним, операції визначення складених функцій й ג- виразів у мові ЛІСП.
Типи даних. У мові ЛІСП є два типи даних - атоми й списки. Атом — це довільна послідовність літер з деякого алфавіту, у який входять букви, цифри й знаки арифметичних операцій. Атом, що складається із цифр, яким може передувати знак + або -, звичайно трактується як ціле число. Список - це кінцева послідовність елементів, укладених у круглі дужки. Елементами списку є атоми або інші списки. Для поділу елементів списку використають один або кілька пробілів. Приклади списків: (А) — список з одного елемента; (В1 У2 ВЗ) — список із трьох елементів В1, В2 і ВЗ; ((Р Q) (Т R P) + 12) -список, що містить інші списки; () — порожній список, тобто список, що не містить жодного елемента.
В програмі мовою ЛІСП атом позначає або літерал (певну константу), або змінну, що має значення. Значенням атом-змінної є інший атом або список. Деякі атоми - літерали мають фіксований сенс. Так, наприклад, атом «7» позначає «ІСТИНА», а атом NIL -«НЕПРАВДА», тобто порожній список, і т.п.
Програма мовою ЛІСП являє собою суперпозицію примітивних і складених функцій. Примітивні функції, CAR, CDP й CONR убудовані в інтерпретатор мови ЛІСП. Визначення складених функцій задаються ОПР. Ці визначення вводяться за допомогою примітивної функції DEFINE, що буде розглянута нижче.
Обчислення значення суперпозиції функції в мові ЛІСП звичайно здійснюється «зсередини назовні», як і прийнято в математиці. У той же час серед примітивних функцій є так звані спеціальні, при обчисленні яких це правило не виконується. Правила обчислення кожної спеціальної функції наведені нижче при їхньому описі. Результат виконання програми можна розглядати як її значення. Це значення являє собою атом або список.
Синтаксично виклик функції, а, отже, і програма, оформлена у вигляді списку. Перший елемент цього списку задає ім'я функції, а всі наступні елементи (якщо вони є) являють собою аргументи функції.
Допустимо, є примітивна функція PLUS виконуюче додавання двох чисел. Щоб скласти числа 2 й 3, напишемо мовою ЛІСП наступну програму: (PLUS 2 3). Ця програма відрізняється від загальноприйнятої математичної нотації лише тим, що ім'я функції перебуває усередині дужок..
Розглянений приклад показує, що найбільш просто ім'я функції задається безпосередньо за допомогою атома - літерала. Поряд із цим мова ЛІСП забезпечує й обчислення імені функції. Покажемо цю можливість на прикладі. Нехай результатом виконання функції F1 від аргументу 1 є атом F2, який є ім'я функції, що залежить від двох аргументів. Тоді програми F2 5 6) і F1 1)5 6) еквівалентні.
Основні операції над списками. Для роботи зі списками в мові ЛІСП служать насамперед примітивні функції САR, СDR і СОNS, які реалізують основні операції по обробці й створенню списків. Використовуючи ці функції, можна розбити довільний список на складові його елементи й побудувати нові списки, що включають у себе як ці, так й інші елементи.
Логічні функції й предикати. Функція АТОМ забезпечує можливість відрізняти атоми від списків. Ця функція має один аргумент, яким може бути як атом, так і список. У першому випадку значенням функції АТОМ буде атом Т, а в другому — атом NIL. Функцію АТОМ часто застосовують у ході аналізу структури довільного списку, наприклад при аналізі в глиб деревоподібної структури вкладених списків.
Функція Е Q дозволяє зрівняти_два атома або атом зі списком. Ця функція має два аргументи, один із яких обов'язково повинен бути атомом. У противному випадку значення функції Е Q не визначене й приводить до помилки в програмі. Функція Е Q приймає значення Т, якщо значеннями її аргументів є однакові атоми. Якщо ж значеннями її аргументів виявляються різні атоми або значенням одного з аргументів є список, то значенням функції Е Q буде атом NIL.
Функція COND аналогічна по своєму призначенню умовному операторові 1F. C OND — спеціальна функція: число її аргументів довільно, і їхні значення не обчислюються перед виконанням функції COND, а беруться в тім виді, у якому вони написані. Кожен аргумент цієї функції являє собою список із двох елементів. Перший елемент такого списку-аргументу трактується як логічне вираження. Під таким вираженням будемо розуміти атом або програму, значенням якої є атоми NIL, або Т. Другий елемент списку являє собою довільне вираження, тобто деякий атом або програму. Значення цього елемента, можливо, і буде значенням функції C OND.
Функції QUOTE й ЕVAL. Функція QUOTE має єдиний аргумент, що представляє собою атом або список. Значенням функції QUOTE є її аргумент безпосередньо у вигляді, у якому він записаний. Так, значення вираження (QUOTE X) являє собою атом X, а значенням виразу (QUOTE (А В С)) є список (А В С). По суті справи, функція QUOTE вказує, що її аргумент-список варто розглядати не як програму, а як дані. Ця функція є спеціальною, так як вона обчислюється з порушенням загального правила інтерпретації функціональних програм.
Результатом виконання програми (САR (QUOTE (А В С))) є атом А.
Функція ЕVАL, обчислює значення довільного вираження. Фактично вона є зворотної функції QUOTE й дозволяє трактувати дані як програму.
Присвоєння значень атомам-змінним. Для присвоєння атому X деякого значення використають функцію CSET(Q), що має два аргументи. Перший аргумент-атом, якому привласнюється значення, а другий — довільне вираження. Так, у результаті виконання програми ( CSETQ А (QUOTE (Р R Q))) значенням атома А буде список (Р R Q ). Аналогічно, після виконання програми ( CSETQ А (QUOTE В)) значенням атома А буде атом В.
Визначення складених функцій й ג- виразів. Для визначення нової складеної функції використають спеціальну функцію DEFINE, що має два аргументи: перший - ім’я обумовленої функції, а другий — так званий визначальний вираз, що являє собою ג -вираз, оформлений відповідно до синтаксису мови ЛІСП, і виглядає як звертання до спеціальної функції LАМВDА. Функція LАМВDА має два аргументи: перший відповідає списку формальних параметрів з А-виразу, а другий — визначальному правилу. Так, наприклад, А-вираз виду ג (х) PLUS (x,1) засобами мови ЛІСП записується у вигляді (LАМВDА (X) (PLUS X 1)). Визначення складеної функції Р1(Х), що збільшує значення свого аргументу на 1, у ЛІСПі має вигляд: (DEFINE Р1 (1АМВ0А LАМВDА (X) (PLUS X 1)). Відзначимо, що функція LАМВDА може використатися й самостійно для реалізації А-виражень.
Арифметичні операції оформлені у вигляді функцій від двох аргументів |72|. Так, значенням функції PLUS є сума її аргументів. Аналогічно, значення функції TIMES — добуток її аргументів. Результатом виконання функції DIGERENCE буде різниця першого й другого аргументів. Функція QUOTIENТ видає цілу частину від розподілу свого першого аргументу на другий, а функція REMAINDER - залишок від такого розподілу.
У цей час розроблено безліч різних діалектів мови ЛІСП: СОММОN LISP, INTER LISP, ZETA LISP, МАС LISP, кожному з яких властиві свої можливості й характеристики. Мова «ЛІСП», розроблений наприкінці 1950-х років у Масачусетському технологічному інституті (МIТ) США, став найбільше широко використовуваним МІП для різних додатків теорії ІС.
Мова РЕФАЛ. Це досить широко розповсюджений МІП, що орієнтований на опис завдань перетворення символьної інформації. Запис алгоритму на РЕФАЛі представляється у вигляді сукупності деякого числа рекурсивних функцій на множині рядків символів. Рекурсія — це спосіб визначення функції, при якому її значення в кожній точці визначається через значення в попередній точці.
Програми на Рефалі являють собою набори визначень функцій, які здійснюють необхідні підстановки, причому на текстах може бути визначена деревоподібна структура, відображувана за допомогою структурних дужок.
Мова FPS (Functional Programming System). Це система функціонального програмування, запропонована в 1978 р. Дж. Бекусом, відрізняється від мов ЛІСП і РЕФАЛ використанням одноаргументних функцій і широким застосуванням функціональних форм, що дозволяє при записі функціональних програм повністю відмовитися від змінних. FPS повністю визначається завданням об'єктів, функцій, функціональних форм і визначень складених функцій.
Множина об'єктів О включає два типи елементів - атоми й послідовності. Атом х являє собою довільну послідовність літер, якими є букви, цифри й т.п. Виділяється спеціальний атом ┴, що має зміст коду помилки. Послідовність y складається з кінцевого числа елементів <у1 ..., уn >. Кожний з уi у свою чергу, є або атомом, або послідовністю. Послідовність виду y=<у1,..., ┴,..., у n > по визначенню еквівалентна атому 1. Крім атома ┴ фіксований зміст мають також атоми Ø, Т й F. Атом Ø - це порожня послідовність, а атоми «Т» й «F» — «ІСТИНА» й «НЕПРАВДА» відповідно.
Множина функцій Ф утворює функції ∫кЄ Фоб’єкти, що відображають, в об'єкти, тобто ∫к ->(). При цьому об’єкт, що виходить у результаті застосування функції ∫к до об’єкта х, позначається як ∫к: х По визначенню ∫к: ┴ дорівнює ┴ для всіх ∫ ЄФ.
Як й в інших мовах функціонального програмування, функція ∫ ЄФ може бути примітивною або складовою. Крім того, у FPS для визначення функцій широко застосовують функціональні форми: композицію, редукцію, застосувати до усім, умовну функціональну форму.
Мові FPSвластиві деякі недоліки: неможливість створення додаткових примітивних функцій і функціональних форм, перетворення програм в об'єкти й об'єктів у програми, а також обчислень імені функції. Останні два недоліки усунуті практично у всіх реалізаціях мов ЛІСП і РЕФАЛ.
У розглянутих МФП - ЛІСПі й Рефалі жорстко фіксуються основні структури даних (список у ЛІСПі, ланцюжок у Рефалі) і погоджені із цими структурами базові операції - примітивні функції. Це обставина сильно утрудняє застосування існуючих МФП у ПО, у які обрані структури даних і примітивні функції малопридатні. Реалізований же в деяких версіях цих мов апарат підключення додаткових примітивів розвинений недостатньо.
Система АСФП. Для повного використання переваг МФП створена адаптуєма система функціонального програмування (АСФП), орієнтована на роботу з об’єктами довільної структури, обумовленої користувачем. У системі АСФП забезпечена реалізація таких основних понять функціонального програмування, як суперпозиція, рекурсія, відкладені обчислення, а також створений гнучкий механізм підключення примітивних функцій. Ця система базується на формальній моделі рекурсивних схем програм, доповненої механізмом затримки обчислень.
Мова УТОПІСТ. До мов функціонального програмування можна віднести мова УТОПІСТ, називана також мовою концептуального програмування. Мова УТОПІСТ призначена в основному для рішення обчислювальних завдань, які можуть бути сформульовані в такий спосіб. При заданому описі умов завдання А/ за значеннями змінних х1, х2...,хт, задовольняючих Л/, обчислити значення змінних у1, у2...,ут, також задовольняючих М/.
Основу концептуального програмування становить метод структурного синтезу програм, що використовує дві еквівалентні форми подання знань про завдання: формальне подання; графове подання у вигляді функціонально-інформаційних мереж. При формальному поданні основними етапами формування програми рішення шуканого завдання є: 1) формалізація постановки розв’язуваного завдання; 2) побудова конструктивного доказу існування рішення завдання в деякій формальній дедуктивній системі; 3) витяг програми з отриманого доказу.
Мови логічного програмування
Пролог. Програми на Пролозі оперують даними двох основних типів: числами й символами. Атом — це рядок символів, що позначає деякий абстрактний об’єкт. Атом вважається неподільним елементом програми, у зв’язку із чим й обране його назва. Атом починається з малої літери й складається з букв, цифр і символу підкреслення. Якщо атом повинен містити інші спеціальні знаки або починатися із прописної букви, то він береться в апострофи. Іноді використають висновок атомів у лапках для виділення їх з навколишнього тексту. Приклади атомів: реакція к1, п-й порядок.
Числа й атоми можуть поєднуватися в конгломерати, названі структурами й списками. Структура — це конструкція, що складається з імені структури й списку її елементів, розділених комами і включених у дужки. Елементами структур можуть бути числа: атоми, змінні, інші структури й списки. Кількість елементів структури фіксована й не може змінюватися при виконанні програми. Структури являють собою щось середнє між масивами й записами процедурних мов, тому що типи елементів структури можуть бути різними, як у записів, а ідентифікація їх виробляється по номерах, як у масивів. Приклади структур: str(a,b, c, d)\ має (реакція R1, n- ий порядок).
Списки являють собою об’єднання елементів довільних видів, розділених комами й ув'язнених у квадратні дужки. Списки відрізняються від структур тим, що не мають імен, і тим, що кількість їхніх елементів може змінюватися при виконанні програми. Приклади списків: [I, 3, 5, 7); [десорбція, абсорбція, ректифікація).
Елементами структур і списків можуть бути так званими змінними, позначуваними іменами, що починаються із прописної букви. Приклади змінних: Х,В, 2.
Основна операція, виконувана над даними в Пролозі,— це операція зіставлення (звана часто операцією уніфікації, або узгодження). Звичайно, у мові є й найпростіші арифметичні операції й операції порівняння, подібні до аналогічних операцій процедурних мов, але операція зіставлення несе набагато більше змістовного навантаження і є одним з основних понять Прологу.
Операція зіставлення, або ототожнення, здійснюється в такий спосіб: число зіставляється тільки з рівним йому числом; атом зіставляється тільки з рівним йому атомом; змінна зіставляється із чим завгодно, при цьому вона одержує як значення те, із чим вона зіставляється; структура зпівставляється з іншою структурою, якщо вони мають однакові імена й кількості аргументів,, за умови, що всі їхні елементи попарно порівнянні. Операція зіставлення може закінчитися невдало. У цьому випадку будемо говорити, що її операнти не порівняно.
Приклади:
«7» зіставляється з «7»;
«реакція» зіставляється з «реакція»;
«реакція» не зіставляється з «абсорбція»;
«має (реакція 1-й порядок)» не зіставляється з «має (реакція тепловий ефект)»;
«має (реакція, 1-й порядок)» зіставляється з «має (реакція, Х)».
В останньому випадку змінна X одержує як значення атом «1-й порядок».
Програма на Пролозі складається із двох основних конструкцій: фактів і правил. Факт— це структура, що завершується символом «крапка». Факти являють собою ті дані, з якими оперує програма. Сукупність фактів, що ставляться до деякого завдання Прологу, називається базою даних Прологу. За допомогою фактів описуються властивості об’єктів і відносини між ними. Факт, що складається зі структури з одним елементом, звичайно описує деяку властивість, наприклад факт «трубопровід (Р)» визначає, що об’єкт «Р» має властивість «бути трубопроводом». Цей факт можна інтерпретувати природною мовою так: «Р є трубопровід», або більш строго так: «Висловлення «Р є трубопровід» істинно». Факти з більш ніж одним елементом описують взаємозв’язки об’єктів (відносини між ними).
Розглянемо приклад складного предикатного виразу:
стан (вентиль 4, відкритий).
трубопровід (трубопровід 5).
джерело (вх_потік, вентиль 4, він є 3).
температура (вх_потік, вентиль 4, нормальний).
Вираз перед круглими дужками - предикат, усередині аргумент. Переклад з ОЕМ на ПРОЛОГ і навпаки, зрозуміло, довільний. Наприклад, запис:
стан (вентиль 4, відкритий), рівносильна запису:
стан (вентиль 4 (відкритий)).
У Пролозі часто використається потрійна конструкція «об’єкт-атрибут-значення» у вигляді:
об'єкт (атрибут, значення).
Це читається в такий спосіб: «атрибут об’єкта є значення» («стан вентиля 4 -відкрито»).
У мові ПРОЛОГ також досить просто представляються більше складні конструкції:
повідомлення (від (оператор 5), до (інженер 7),
стан (вентиль 4, відкритий)).
ПРОЛОГ відповідає на питання ОПР (зіставленням) питання з фактами, представленими в БЗ. Наприклад, питання:
?- стан (вентиль 4, X). погоджується із пропозицією:
стан (вентиль 4, відкритий),
і результуюча відповідь: •
X - відкритий. /
Слова, що починаються із заголовної букви, є змінними й можуть відповідати якому-небудь виразу.
Іншою складовою частиною програм мовою ПРОЛОГ є правила. Правило — це диз’юнкт Хорна, тобто конструкція вигляду:
A:-B, C, D,
де A, B, C, D, - структури;:- означає «якщо»; «,» означає «І». Структура А називається заголовком правила, а B, C, D — підцілями. Правило визначає істинність деякого висловлення. Формальний запис правила інтерпретується так: «Висловлення А істинно, якщо одночасно вірні висловлення В, С і D». Приклад правила, записаного на Пролозі:
витрата (вих_потік, вентиль,):
вентиль (вентиль),
стан (вентиль, закритий).
Це правило з мови ПРОЛОГ можна перевести на природню мову в такий спосіб: Витрата потоку на виході деякого об’єкта «вентиль» дорівнює 0, якщо «вентиль» є вентиль і його положення - закритий.
Виконання програми мовою ПРОЛОГ по суті являє собою доказ істинності деякого логічного твердження в рамках даної сукупності фактів і правил. Алгоритм цього доказу, називаний алгоритмом логічного виведення, повністю визначає принципи виконання програм мовою ПРОЛОГ і являє собою друге основне поняття Прологу.
Виконання Прологу-програми завжди починається з уведення так званого запиту, що являє собою конструкцію вигляду?— А, В, С.
Для виконання деякої сукупності підцілей, будь то запит, або підціль, що входять у правило, ПРОЛОГ бере першу підціль і намагається довести істинність цього твердження (або, як ми будемо говорити, виконати підціль). Для цього проглядаються всі факти й правила, складові програми, і шукається факт, порівнянний з підціллю, або правило, заголовок якого зіставляється з нею. Якщо такий факт знайдений, то істинність твердження вважається доведеної й береться наступна підціль. Якщо знайдено правило, то ПРОЛОГ намагається по тим же правилам довести істинність всіх підцілей даного правила.
Якщо при пошуку виявлено, що є кілька варіантів доказу істиності підцілі (тобто є кілька фактів або правил, порівнянних з нею), то ПРОЛОГ автоматично відзначає так звану точку повернення, тобто запам’ятовує альтернативні варіанти рішення. Якщо в якийсь момент виконання програми чергова підціль не може бути виконана, автоматично виробляється повернення до останньої відзначеної крапки повернення й ПРОЛОГ намагається знайти інший варіант доказу (або, що то ж саме, інший шлях виконання програми). Автоматичний перебір всіх можливих варіантів рішення є фундаментальною властивістю мови ПРОЛОГ, що часто виявляється вкрай корисним і значно скорочує об’єм тексту програми. Крім фактів і правил, обумовлених програмістом, у програмі можна використати так звані вбудовані предикати, що виконують усілякі дії — обчислення, порівняння величин, ввід-вивід й ін. Як бачимо, замість десятків різноманітних операторів, з яких конструюється програма в процедурних мовах, у мові ПРОЛОГ є всього один вид оператора -правило, що й визначає лаконічність мови.
ПРОЛОГ реалізує зворотний ланцюжок міркувань. Так, наприклад, якщо користувач поставив запитання:
?— витрата (вих__потік, вентиль 4, X,.
то інтерпретатор Прологу зіставить, або ототожнить, це питання з попереднім правилом, відзначивши, що для вдалого зіставлення «вентиль» повинен бути тим же, що й «вентиль 4», а X— «НУЛЬ» («НЕПРАВДА»), потім інтерпретатор спробує перевірити передумови правила, спочатку здійснивши пошук висловлення виду:
вентиль (вентиль 4).
або, у випадку відсутності такого висловлення, здійснити пошук деякого правила, що включає вентиль (вентиль 4) або вентиль (4), а потім інтерпретатор спробує знайти висловлення виду:
стан (вентиль 4, закритий).
Якщо обоє висловлення знайдені, то повідомляється:
вентиль = вентиль 4
Х = 0
Якщо зазначені висловлення не знайдені, то інтерпретатор здійснює пошук інших фактів, що погодяться з питанням. Якщо такі не знайдені, невдала спроба завершується повідомленням: немає.
Відзначимо, що факти в дійсності є тривіальними випадками правил: вони являють собою правила, у яких відсутня передумова, тому результат завжди є істина. Правила також можуть бути більше складними й включати більше змінних. Температура потоку, що входить в апарат у деякій його крапці, може бути знайдена шляхом відшукання джерела цього вхідного потоку й визначенням температури потоку, що виходить із джерела:
температура (вх_потік, апарат, значення):-
джерело (вх_потік, апарат, джерело),
температура (вих_потік, джерело, значення).
Мова ПРОЛОГ може так само, як і мова ЛІСП, працювати зі списками (. Списки, якщо їх можливо організувати, навіть більше важливі для ІС, чим вектори й матриці для звичайного чисельного програмування. Списки зручні тим, що немає необхідності вказувати, як багато елементів вони включають, і, що більше важливо, зручні для використання в рекурсивних операціях. Щось є істиною для кожного елемента списку, якщо воно є істиною для першого елемента в списку і якщо воно є істиною для кожного елемента в списку, отриманого видаленням першого елемента. Зазначене визначення можна використати багаторазово доти, поки всі елементи списку не будуть досліджені. Аналогічно, щось є істиною, принаймні, для одного елемента списку, якщо воно є істиною для першого елемента або якщо воно є істиною, принаймні, для одного елемента в списку, що залишився.
Список представляється множиною елементів у квадратних дужках:
[елемент 1, елемент 2, елемент 3].
Часто корисно посилатися на перший елемент списку або залишок списку. Такий розподіл елементів відбиває вертикальна риса у квадратних дужках:
[перший_елемент | залишок__списку].
Потім можна, наприклад, визначити належність елемента списку. X є членом списку, якщо він є елементом списку або якщо він є елементом залишку списку.
член (Х, \Х якийсь_залишок|).
член (X, [якийсь_перший | Y]):-член (X, Y).
Відзначимо, що це рекурсивне визначення можна розглядати як логічне визначення належності елемента списку, а також як висловлення про те, як перевірити, чи є щось елементом списку.
Яким чином для цього використається предикат «член», добре видно на наступному прикладі. Необхідно визначити, чи є «b» членом списку «[a,b,c]». У прикладі простежується результат звертання до цього предиката:
ціль член (b), (]a, b, c]), зіставити із другою пропозицією:
X = b, якийсь_перший = a, Y = [b, с), потім робиться спроба довести наступну мету:
ціль член (b, [b, c]), зіставити з першою пропозицією:
X = b), деякий_залишок = с
доведено член (b, |b,c|)
доведено член (b, |(a,b,c|)
таким чином, вихідний запит був істинним.
так.
Бази даних, програмне забезпечення яких має здатність виводити нові дані з наявних, називаються дедуктивними базами даних. Як бачимо, ПРОЛОГ також має таку властивість. У теоретичних роботах було показано, що можливості Пролога як мову запитів до бази даних не уступають можливостям відомих спеціалізованих мов запитів реляційних баз. Причому, якщо останні ставляться до спеціалізованих мов, не придатних більше ні на що, крім свого прямого призначення, то ПРОЛОГ реалізує ці можливості разом з можливістю використати його як досить універсальну МІП. Важливо те, що засобу роботи із БД у Пролозі є не якою-небудь «надбудовою» над мовою програмування, а невід’ємною частиною базового механізму роботи ПРОЛОГа.
Для ілюстрації можливостей мови ПРОЛОГ розглянемо його застосування для розв’язання двох простих НФЗ 1) складання концептуальної моделі функціонування хімічного реактора; 2) планування гнучкої структури системи технологічних трубопроводів (СТТ).
с (b, a).
Таким чином, замість c (із, через) потрібно записати (с (із, через); з (через, із)), де «;» означає «АБО».
Повна програма мовою ПРОЛОГ для розглянутої НФЗ розробки структури СТТ має вигляд:
с(a,h)
с(h,i).
с(h,j).
с(i,d).
с(i,l).
с(l,e).
с(j,k).
с(b,j).
с(k,l).
с(k,m).
с(c,m).
с(m,n).
с(n,f).
с(n,g).
go(From, From, Avoid List).
go(From, To, Avoid List):-(c (From, Via); c (Via, From))
not (member (Via, Avoid List)),
go (Via, To |Via| Avoid List).
Дата добавления: 2015-07-20; просмотров: 132 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Тема 8. Організація спілкування інтелектуальних систем із персоналом | | | Member (X. | | _|). |