Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание экспертных систем средствами пролога↑ ⇐ ПредыдущаяСтр 10 из 10 Содержание книги
Поиск на нашем сайте
Экспертные системы (ЭС) - это сложные программные комплексы, аккумулирующие знания специалистов в конкретных предметных областях и тиражирующие этот эмпирический опыт для консультаций менее квалифицированных пользователей. Построим небольшую экспертную систему, которая будет определять одну из нескольких рыб по признакам, указанным пользователем. Система будет задавать вопросы и строить логические выводы на основе полученных ответов. Типичный диалог экспертной системы с пользователем может выглядеть следующим образом (рис.27): рис.27. Диалог экспертной системы с пользователем
Первым шагом построения такой системы является обеспечение ее знаниями, необходимыми для выполнения рассуждений. Программа должна во время консультаций выводить заключения из информации, имеющейся в базе знаний, а также использовать новую информацию, полученную от пользователя. Поэтому минимальная ЭС должна включать: - базу знаний; - механизм вывода; - пользовательский интерфейс. Разработку любой ЭС следует начать с исследования предметной области. Пусть на основе бесед с экспертом были получены следующие эмпирические правила: 1) ЕСЛИ это отряд карпообразные и И у рыбы желто-золотистый окрас И губы с 4 усиками ТО это сазан 2) ЕСЛИ это отряд карпообразные И у рыбы плавники с розовыми перьями TО это плотва 3) ЕСЛИ спинной плавник узкий И у рыбы желто-золотистый окрас И это отряд карпообразные TО это лещ 4) ЕСЛИ у рыбы нет зубов И одиночный спинной лучевой плавник И это костная рыба И это пресноводная рыба TО это отряд карпообразные 5) ЕСЛИ у рыбы есть костный скелет ИЛИ у рыбы есть жаберные крышки TО это костная рыба 6) ЕСЛИ рыба плавает в озерах ИЛИ рыба плавает в реках ТО это пресноводная рыба Для создания базы знаний используем предикаты: fish(symbol) otrajd(symbol) vid(symbol) priznak(symbol) Базу знаний будут составлять следующие правила: fish("это сазан"):- otrajd("отряд карпообразные"), priznak("губы с 4 усиками"). fish("это плотва"):- otrajd("отряд карпообразные"), priznak("плавники с розовыми перьями"). fish("это лещ"):- otrajd("отряд карпообразные"), priznak("у рыбы желто-золотистый окрас"), priznak("у рыбы спинной плавник узкий"). Необходимо предусмотреть, что искомой рыбы в базе знаний нет: fish("Данной рыбы в базе знаний не обнаружено"). otrajd("отряд карпообразные"):- vid("пресноводная рыба"), vid("костная рыба"), priznak("одиночный спинной лучевой плавник"), priznak("у рыбы нет зубов"). vid("костная рыба"):- priznak("у рыбы есть жаберные крышки"); priznak("у рыбы есть костный скелет"). vid("пресноводная рыба"):- priznak("рыба плавает в реках или озерах"). Для хранения информации, полученной от пользователя, используются предикаты yes и no, составляющие внутреннюю базу фактов. Предикат yes служит для хранения фактов, соответствующих положительному ответу, а предикат no – для хранения отрицательных ответов. Т.е. предикат yes утверждает наличие какого-либо признака у рыбы, а no – отсутствие указанного признака. Эти предикаты объявляются в разделе внутренней базы фактов: global facts yes (symbol) no (symbol) Добавить новые факты во внутреннюю базу можно с помощью правила add_to_database, состоящего из двух частей. Первая часть добавляет факты, соответствующие положительному ответу (с клавиатуры вводится ‘y’). Вторая часть правила добавляет факты, указывающие на отсутствие данного признака у рыбы. add_to_database (Y,'y'):- assertz (yes (Y)). add_to_database (Y,'n'):- assertz (no (Y)),fail. Необходимо предусмотреть очистку внутренней базы фактов. Для этого создадим правило: clear_from_database:- retract(yes(_)),fail. clear_from_database:- retract(no(_)),fail. Для проверки наличия у рыбы определенного признака создадим правило priznak (Y): priznak (Y):- yes (Y),!. priznak (Y):- not(no (Y)), question (Y). Формулировка вопроса, ввод ответа и сохранение соответствующего правила осуществляется с помощью правил: answer:- fish(X),!,nl, save("BF1.dbf"), write (" Ответ: ",X,"."),nl. question(Y):- write ("Вoпрос: ",Y,"?(y/n) "), otvet(X), write(X),nl, add_to_database (Y,X). otvet(C):-readchar(C). И, наконец, правило begin, запускающее сеанс консультации: begin:- write ("Ответьте на вопросы:"),nl,nl, answer, clear_from_database, nl,nl,nl,nl, exit. Полный листинг программы выглядит следующим образом: GLOBAL FACTS yes (symbol) no (symbol) PREDICATES fish(symbol) otrajd(symbol) vid(symbol) begin answer question(symbol) add_to_database(symbol,char) otvet(char) clear_from_database priznak(symbol) GOAL begin. CLAUSES begin:- write ("Ответьте на вопросы:"),nl,nl, answer, clear_from_database, nl,nl,nl,nl, exit. answer:- fish(X),!,nl, save("BF1.dbf"), write (" Ответ: ",X,"."),nl. question(Y):- write ("Вoпрос: ",Y,"? "), otvet(X), write(X),nl, add_to_database (Y,X). otvet(C):- readchar(C). priznak (Y):- yes (Y),!. priznak (Y):- not(no (Y)), question (Y). add_to_database (Y,'y'):- assertz (yes (Y)). add_to_database (Y,'n'):- assertz (no (Y)),fail. clear_from_database:- retract (yes(_)),fail. clear_from_database:- retract (no(_)),fail. fish("это сазан"):- otrajd("отряд карпообразные"), priznak("губы с 4 усиками"). fish("это плотва"):- otrajd("отряд карпообразные"), priznak("плавники с розовыми перьями"). fish("это лещ"):- otrajd("отряд карпообразные"), priznak("у рыбы желто-золотистый окрас"), priznak("у рыбы спинной плавник узкий"). fish("Данной рыбы в базе знаний не обнаружено"). otrajd("отряд карпообразные"):- vid("пресноводная рыба"), vid("костная рыба"), priznak("одиночный спинной лучевой плавник"), priznak("у рыбы нет зубов"). vid("костная рыба"):- priznak("у рыбы есть жаберные крышки"); priznak("у рыбы есть костный скелет"). vid("пресноводная рыба"):- priznak(«рыба плавает в реках или озерах»). ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ 1. Реализуйте данную программу в среде Visual Prolog и протестируйте ее. 2. Расширьте базу знаний экспертной системы, добавив следующие правила: 1) ЕСЛИ у рыбы есть электрические органы И это отряд скаты TО это электрический скат 2) ЕСЛИ у рыбы на хвосте ядовитый шип И это отряд скаты TО это скат-хвостокол 3) ЕСЛИ у рыбы серо-коричневый окрас И у рыбы коническая морда И это отряд акулы TО это гиганская акула 4) ЕСЛИ это отряд акулы И рыба нападает на людей И у рыбы молотообразная морда TО это рыба молот 5) ЕСЛИ у рыбы нет хвостового плавника И у рыбы тонкий длинный хвост И это хрящевая рыба И это морская рыба TО это отряд скаты 6) ЕСЛИ это морская рыба И это хрящевая рыба И плавники не гибкие И хвост ассиметричный TО это отряд акулы 7) ЕСЛИ у рыбы нет плавательного пузыря ИЛИ у рыбы есть хрящевый скелет ТО это хрящевая рыба 8) ЕСЛИ рыба плавает в морях ТО это морская рыба 3. Протестируйте полученную экспертную систему. Литература
1. Адаменко А., Кучуков А. Логическое программирование и Visual Prolog.- СПб, 2003 2. Братко И. Программирование на языке ПРОЛОГ для искусственного интеллекта.- М., 1990. 3. Ин Ц., Соломон Д. Использование Турбо-Пролога. -М., 1993. 4. Клоксин У., Меллиш К. Программирование на языке ПРОЛОГ. -М., 1991. 5. Макаллистер Дж. Искусственный интеллект и Пролог на микроЭВМ.- М., 1990. 6. Янсон А. Турбо-Пролог в сжатом изложении. -М.,1990.
|
||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 1026; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.212.119 (0.009 с.) |