Содержание
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, является логическое программирование.Как и для большинства старых языков, более поздние реализации, например, VisualProlog, добавляют в язык более поздние парадигмы, например,объектно-ориентированное или управляемое событиями программирование, иногдадаже с элементами императивного стиля.
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/