Контрольная работа : Понятие лингвистической переменной. Язык программирования Prolog 


Полнотекстовый поиск по базе:

Главная >> Контрольная работа >> Информатика, программирование


Понятие лингвистической переменной. Язык программирования Prolog




Содержание

  1. Нечеткая лингвистическая переменная

  2. Пролог - язык программирования ЭС

Используемая литература



Вопрос 24. Нечеткая лингвистическая переменная

Понятие лингвистической переменной

Лингвистическая переменная отличается от числовой переменной тем, что ее значениями являются не числа, а слова или предложения в естественном или формальном языке. Поскольку слова, в общем, менее точны, чем числа, понятие лингвистической переменной дает возможность приближенно описывать явления, которые настолько сложны, что не поддаются описанию в общепринятых количественных терминах. В частности, нечеткое множество, которое представляет собой ограничение, связанное со значениями лингвистической переменной, можно рассматривать как совокупную характеристику различных подклассов элементов универсального множества. В этом смысле роль нечетких множеств аналогична той роли, которую играют слова и предложения в естественном языке. Например, прилагательное "КРАСИВЫЙ" отражает комплекс характеристик внешности индивидуума. Это прилагательное можно также рассматривать как название нечеткого множества, которое является ограничением, обусловленным нечеткой переменной "КРАСИВЫЙ". С этой точки зрения термины "ОЧЕНЬ КРАСИВЫЙ", "НЕКРАСИВЫЙ", "ЧЕРЕЗВЫЧАЙНО КРАСИВЫЙ", "ВПОЛНЕ КРАСИВЫЙ" и т.п. — названия нечетких множеств, образованных путем действия модификаторов "ОЧЕНЬ, НЕ, ЧЕРЕЗВЫЧАЙНО, ВПОЛНЕ" и т.п. на нечеткое множество "КРАСИВЫЙ". В сущности, эти нечеткие множества вместе с нечетким множеством "КРАСИВЫЙ" играют роль значений лингвистической переменной "ВНЕШНОСТЬ".

Важный аспект понятия лингвистической переменной состоит в том, что эта переменная более высокого порядка, чем нечеткая переменная, в том смысле, что значениями лингвистической переменной являются нечеткие переменные. Например, значениями лингвистической переменной "ВОЗРАСТ" могут быть: "МОЛОДОЙ, НЕМОЛОДОЙ, СТАРЫЙ, ОЧЕНЬ СТАРЫЙ, НЕ МОЛОДОЙ И НЕ СТАРЫЙ" и т.п. Каждое из этих значений является названием нечеткой переменной. Если — название нечеткой переменной, то ограничение, обусловленное этим названием, можно интерпретировать как смысл нечеткой переменной .

Другой важный аспект понятия лингвистической переменной состоит в том, что лингвистической переменной присущи два правила:

  1. Cинтаксическое, которое может быть задано в форме грамматики, порождающей название значений переменной;

  2. Cемантическое, которое определяет алгоритмическую процедуру для вычисления смысла каждого значения.

  3. Лингвистическая переменная характеризуется набором свойств , в котором:

  4. — название переменной;

  5. обозначает терм-множество переменной , т.е. множество названий лингвистических значений переменной , причем каждое из таких значений является нечеткой переменной со значениями из универсального множества с базовой переменной ;

  6. — синтаксическое правило, порождающее названия значений переменной ;

  7. — семантическое правило, которое ставит в соответствие каждой нечеткой переменной ее смысл , т.е. нечеткое подмножество универсального множества .

  8. Конкретное название , порожденное синтаксическим правилом , называется термом. Терм, который состоит из одного слова или из нескольких слов, всегда фигурирующих вместе друг с другом, называется атомарным термом. Терм, который состоит из более чем одного атомарного терма, называется составным термом.

К примеру, зададим лингвистическую переменную  = «Возраст работника». Определим синтаксическое правило G как определение «оптимальный», налагаемое на переменную . Тогда полное терм-множество значений T = { T1 = Оптимальный возраст работника, T2 = Неоптимальный возраст работника }. Носителем U выступает отрезок [20, 70], измеряемый в годах человеческой жизни. И на этом носителе определены две функции принадлежности: для значения T1 - T1(u), она изображена на рис. 2.2, для T1 - T2(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/

Похожие работы:

  • Языки, которые мы потеряли

    Статья >> Информатика, программирование
    ... лингвистических решений. Назад возврата нет. А все потому, что... Язык ... переменных). А сейчас? Возьмем две переменные ... R# (языки программирования для ... языков, в частности логические языки (ярким примером которых является Prolog ... концептуальным понятиям — ...
  • Искусственный интеллект

    Дипломная работа >> Языкознание, филология
    ... практической работы лингвистов на языке программирования PROLOG. ГРАММАТИКА, ПОСТРОЕННАЯ ... рост заинтересованности в области выражения лингвистических понятий в логике (qv) и ... сравнение вопроса с переменной со следствием с переменными. Вторичные запросы ...
  • Логическая грамматика

    Реферат >> Языкознание, филология
    ... работы лингвистов на языке программирования PROLOG. ГРАММАТИКА, ПОСТРОЕННАЯ ... рост заинтересованности в области выражения лингвистических понятий в логике (qv) ... описываются логическими переменными в рамках параметров (или независимых переменных) грамматических ...
  • Теория искусственного интеллекта

    Учебное пособие >> Информатика, программирование
    ... организуется пользователем с привлечением языка программирования (например LISP). 2) ... всего, введем понятие «лингвистической переменной» и «функции принадлежности». Лингвистические переменные В нечеткой ... за 3-4 месяца на языках LISP, PROLOG и др.; - ...
  • Экспертная система прогнозирования успеваемости студентов в ВУЗах

    Дипломная работа >> Информатика, программирование
    ... конкретному языку программирования, наибольшую популярность этот фреймворк получил именно с Prolog. ... лингвистических переменных. Основные понятия систем управления – входные и выходные переменные, именно их рассматривают как лингвистические переменные ...
  • Стандатризация программных средств

    Учебное пособие >> Информатика, программирование
    ... жизни - источники перемен в тра­диционном политическом ... собственно понятию сертификация и понятию сертификат ... строгости языка программирования и читабельности естественного языка и ... иных БД; лингвистическая совместимость определяется степенью ... LISP 64 Prolog 64 ...
  • Ответы на билеты по экзамену ВМС и СТК в МЭСИ

    Реферат >> Компьютерные науки
    ... признаков. Операнды - переменные, значения которых участвуют ... экспортных систем используется язык Prolog (программирование логики). 20. ... математическое обеспечение лингвистическое обеспечение ... были совместимы. Понятие совместимости затрагивает 3 ...