Контрольная работа: Понятие лингвистической переменной. Язык программирования Prolog
Контрольная работа: Понятие лингвистической переменной. Язык программирования Prolog
Содержание
1. Нечеткая лингвистическая переменная
2. Пролог - язык программирования ЭС
Используемая литература
Вопрос 24. Нечеткая лингвистическая переменная
Понятие лингвистической переменной
Лингвистическая переменная отличается от числовой переменной тем, что ее значениями являются не числа, а слова или предложения в естественном или формальном языке. Поскольку слова, в общем, менее точны, чем числа, понятие лингвистической переменной дает возможность приближенно описывать явления, которые настолько сложны, что не поддаются описанию в общепринятых количественных терминах. В частности, нечеткое множество, которое представляет собой ограничение, связанное со значениями лингвистической переменной, можно рассматривать как совокупную характеристику различных подклассов элементов универсального множества. В этом смысле роль нечетких множеств аналогична той роли, которую играют слова и предложения в естественном языке. Например, прилагательное "КРАСИВЫЙ" отражает комплекс характеристик внешности индивидуума. Это прилагательное можно также рассматривать как название нечеткого множества, которое является ограничением, обусловленным нечеткой переменной "КРАСИВЫЙ". С этой точки зрения термины "ОЧЕНЬ КРАСИВЫЙ", "НЕКРАСИВЫЙ", "ЧЕРЕЗВЫЧАЙНО КРАСИВЫЙ", "ВПОЛНЕ КРАСИВЫЙ" и т.п. — названия нечетких множеств, образованных путем действия модификаторов "ОЧЕНЬ, НЕ, ЧЕРЕЗВЫЧАЙНО, ВПОЛНЕ" и т.п. на нечеткое множество "КРАСИВЫЙ". В сущности, эти нечеткие множества вместе с нечетким множеством "КРАСИВЫЙ" играют роль значений лингвистической переменной "ВНЕШНОСТЬ".
Важный аспект понятия лингвистической переменной состоит в том, что эта переменная более высокого порядка, чем нечеткая переменная, в том смысле, что значениями лингвистической переменной являются нечеткие переменные. Например, значениями лингвистической переменной "ВОЗРАСТ" могут быть: "МОЛОДОЙ, НЕМОЛОДОЙ, СТАРЫЙ, ОЧЕНЬ СТАРЫЙ, НЕ МОЛОДОЙ И НЕ СТАРЫЙ" и т.п. Каждое из этих значений является названием нечеткой переменной. Если — название нечеткой переменной, то ограничение, обусловленное этим названием, можно интерпретировать как смысл нечеткой переменной .
Другой важный аспект понятия лингвистической переменной состоит в том, что лингвистической переменной присущи два правила:
1. Cинтаксическое, которое может быть задано в форме грамматики, порождающей название значений переменной;
2. Cемантическое, которое определяет алгоритмическую процедуру для вычисления смысла каждого значения.
3. Лингвистическая переменная характеризуется набором свойств , в котором:
4. — название переменной;
5. обозначает терм-множество переменной , т.е. множество названий лингвистических значений переменной , причем каждое из таких значений является нечеткой переменной со значениями из универсального множества с базовой переменной ;
6. — синтаксическое правило, порождающее названия значений переменной ;
7. — семантическое правило, которое ставит в соответствие каждой нечеткой переменной ее смысл , т.е. нечеткое подмножество универсального множества .
8. Конкретное название , порожденное синтаксическим правилом , называется термом. Терм, который состоит из одного слова или из нескольких слов, всегда фигурирующих вместе друг с другом, называется атомарным термом. Терм, который состоит из более чем одного атомарного терма, называется составным термом.
К примеру, зададим лингвистическую переменную W = «Возраст работника». Определим синтаксическое правило G как определение «оптимальный», налагаемое на переменную W. Тогда полное терм-множество значений T = { T1 = Оптимальный возраст работника, T2 = Неоптимальный возраст работника }. Носителем U выступает отрезок [20, 70], измеряемый в годах человеческой жизни. И на этом носителе определены две функции принадлежности: для значения T1 - mT1(u), она изображена на рис. 2.2, для T1 - mT2(u), причем первая из них отвечает нечеткому подмножеству M1, а вторая – M2. Таким образом, конструктивное описание лингвистической переменной завершено.
prolog программирование язык лингвистический переменный
Вопрос 54. Пролог - язык программирования ЭС
Prolog (от “PROgramming in LOGic”) — декларативный язык программирования общего назначения. Prolog был создан в 1972 с целью сочетать использование логики с представлением знаний. С тех пор у него появился ряд диалектов, расширяющих основу языка различными возможностями. Стандарт языка дан в ISO/IEC 13211-1 (1995 год).
Prolog — один из старейших и все еще один из наиболее популярных языков логического программирования, хотя он значительно менее популярен, чем основные императивные языки. Он используется в системах обработки естественных языков, исследованиях искусственного интеллекта, экспертных системах, онтологиях и других предметных областях, для которых естественно использование логической парадигмы.
Prolog был создан под влиянием более раннего языка Planner и позаимствовал из него следующие идеи:
· обратный логический вывод (вызов процедур по шаблону, исходя из целей);
· построение структура управляющей логики в виде вычислений с откатами;
· принцип “отрицание как неудача”;
· использование разных имен для разных сущностей и т.д.
Главной парадигмой, реализованной в языке Prolog, является логическое программирование. Как и для большинства старых языков, более поздние реализации, например, Visual Prolog, добавляют в язык более поздние парадигмы, например, объектно-ориентированное или управляемое событиями программирование, иногда даже с элементами императивного стиля.
Prolog использует один тип данных, терм, который бывает нескольких типов:
· атом — имя без особого смысла, используемое для построения составных термов;
· числа и строки такие же, как и в других языках;
· переменная обозначается именем, начинающимся с прописной буквы, и используется как символ-заполнитель для любого другого терма;
· составной терм состоит из атома-функтора, за которым следует несколько аргументов, каждый из которых в свою очередь является атомом.
Программы, написанные на чистом Prolog, описывают отношения между обрабатываемыми сущностями при помощи клауз Хорна. Клауза — это формула вида Голова :- Тело., которая читается как “чтобы доказать/решить Голову, следует доказать/решить Тело”. Тело клаузы состоит из нескольких предикатов (целей клаузы), скомбинированных с помощью конъюнкции и дизъюнкции. Клаузы с пустым телом называются фактами и эквивалентны клаузам вида Голова :- true. (true — не атом, как в других языках, а встроенный предикат).
Другой важной частью Prolog являются предикаты. Унарные предикаты выражают свойства их аргументов, тогда как предикаты с несколькими аргументами выражают отношения между ними. Ряд встроенных предикатов языка выполняют ту же роль, что и функции в других языках, например, …. Предикаты с несколькими аргументами могут действовать в нескольких направлениях в зависимости от того, какие из аргументов уже связаны, а какие — нет. Наконец, для того, чтобы быть языком общего назначения, Prolog должен предоставлять ряд сервисных функций, например, процедур ввода/вывода. Они реализованы как предикаты без специального логического смысла, которые всегда оцениваются как истинные и выполняют свои сервисные функции как побочный эффект оценивания.
Целью выполнения программы на Prolog является оценивание одного целевого предиката. Имея этот предикат и набор правил и фактов, заданных в программе, Prolog пытается найти привязки (значения) переменных, при которых целевой предикат принимает значение истинности.
Структура программы на Прологе отличается от структуры программы, написанной на процедурном языке. Пролог-программа является собранием правил и фактов. Решение задачи достигается интерпретацией этих правил и фактов. При этом пользователю не требуется обеспечивать детальную последовательность инструкций, чтобы указать, каким образом осуществляется управление ходом вычислений на пути к результату. Вместо этого он только определяет возможные решения задачи и обеспечивает программу фактами и правилами, которые позволяют ей отыскать требуемое решение.
Во всех других отношениях Пролог не отличается от традиционных языков программирования. Как и в случае программы написанной на любом другом языке, Пролог-программа предназначена для решения отдельной задачи.
Пролог (Prolog) — язык логического программирования, основанный на логике дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. Начало истории языка относится к 70-м годам XX века. Будучи декларативным языком программирования, Пролог воспринимает в качестве программы некоторое описание задачи, и сам производит поиск решения, пользуясь механизмом бэктрекинга и унификацией.
Пролог относится к так называемым декларативным языкам, требующим от автора умения составить формальное описание ситуации. Поэтому программа на Прологе не является таковой в традиционном понимании, так как не содержит управляющих конструкций типа if … then, while … do; нет даже оператора присваивания. В Прологе задействованы другие механизмы. Задача описывается в терминах фактов и правил, а поиск решения Пролог берет на себя посредством встроенного механизма логического вывода.
Перечень возможных синтаксических конструкций Пролога невелик, и в этом смысле язык прост для изучения. С другой стороны, декларативный стиль программирования оказывается столь непривычным и новым для опытных программистов, что вызывает шок и в ряде случаев оказывается тормозом.
Пролог реализован практически для всех известных операционных систем и платформ. В число операционных систем входят OS для мэйнфреймов, всё семейство Unix, Windows, OS для мобильных платформ. Многие современные реализации языка имеют внутреннее расширение за счет ООП-архитектуры. Кроме проприетарных решений, существуют свободные реализации Пролог. Пролог критикуется в первую очередь за свою недостаточную гибкость, отчего решения на обычных языках программирования (типа C++, Java) в сочетании с базами данных оказываются более технологичными, чем аналогичные решения на Прологе. Негибкость заключается в трудности изучения языка, более высоких требованиях к квалификации программиста на Прологе, трудности отладки программы, неразвитости технологии программирования, плохой контролируемости промежуточных результатов.
Основные вехи развития языка Prolog
Prolog стал воплощением идеи использования логики в качестве языка программирования, которая зародилась в начале 1970-х годов, и само его название является сокращением от слов “programming in logic” (программирование в терминах логики). Первыми исследователями, которые занялись разработкой этой идеи, были Роберт Ковальски (Robert Kowalski) из Эдинбурга (теоретические основы), Маартен ван Эмден (Maarten van Emden) из Эдинбурга (экспериментальная демонстрационная система) и Ален Колмероэ (Alain Colmerauer) из Марселя (реализация). Популяризации языка Prolog во многом способствовала эффективная реализация этого языка в середине 1970-х годов Дэвидом Д. Г. Уорреном (David D.H. Warren) из Эдинбурга. К числу новейших достижений в этой области относятся средства программирования на основе логики ограничений (Constraint Logic Programming — CLP), которые обычно реализуются в составе системы Prolog. Средства CLP показали себя на практике как исключительно гибкий инструмент для решения задач составления расписаний и планирования материально-технического снабжения. А в 1996 году был опубликован официальный стандарт ISO языка Prolog.
Наиболее заметные тенденции в истории развития языка Prolog
В развитии языка Prolog наблюдаются очень интересные тенденции. Этот язык быстро приобрел популярность в Европе как инструмент практического программирования. В Японии вокруг языка Prolog были сосредоточены все разработки компьютеров пятого поколения. С другой стороны, в США этот язык в целом был принят с небольшим опозданием в связи с некоторыми историческими причинами. Одна из них состояла в том, что Соединенные Штаты вначале познакомились с языком Microplanner, который также был близок к идее логического программирования, но неэффективно реализован. Определенная доля низкой популярности Prolog в этой стране объясняется также реакцией на существовавшую вначале “ортодоксальную школу” логического программирования, представители которой настаивали на использовании чистой логики и требовали, чтобы логический подход не был “запятнан” практическими средствами, не относящимися к логике. В прошлом это привело к широкому распространению неверных взглядов на язык Prolog. Например, некоторые считали, что на этом языке можно программировать только рассуждения с выводом от целей к фактам. Но истина заключается в том, что Prolog — универсальный язык программирования и на нем может быть реализован любой алгоритм. Далекая от реальности позиция “ортодоксальной школы” была преодолена практиками языка Prolog, которые приняли более прагматический подход, воспользовавшись плодотворным объединением нового, декларативного подхода с традиционным, процедурным.
Элементы синтаксиса:
Комментарий до конца строки | % |
Регистрозависимость | да |
Регулярное выражение идентификатора переменной | [_A-Z][_a-zA-Z0-9]* |
Регулярное выражение идентификатора функции | [_a-z][_a-zA-Z0-9]* |
Группировка выражений | ( ... ) |
Список используемой литературы
1. http://sedok.narod.ru/fuzzy.html - Ключевые понятия теории нечетких множеств.
2. http://ru.wikipedia.org/wiki/Лингвистическая_переменная
3. http://www.intuit.ru/department/ds/fuzzysets/9/
4. http://progopedia.ru/language/prolog/