Основы искусственного интеллекта
Характеристика особенностей prolog, которая является языком, основанным на программировании логики. Ознакомление с интерфейсом Visual Prolog. Рассмотрение рабочего окна редактора. Исследование процесса разработки графического интерфейса пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 11.12.2015 |
Размер файла | 605,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
fact(integer,integer)
CLAUSES
fact(0,1):-!.
fact(N,F):- N1=N-1,fact(N1,F1), F=N*F1.
win_factorial_Create(_Parent):-
win_Create(win_factorial_WinType,win_factorial_RCT,win_factorial_Title,
win_factorial_Menu,_Parent,win_factorial_Flags,win_factorial_eh,0).
9. Запустите проект на исполнение и протестируйте его.
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Доработайте проект, создав новый пункт меню Summa, при выборе которого появляется новое окно для ввода двух чисел и вычисления их суммы.
2.3 Использование элемента ListBox
ListBox (список) - это элемент управления, содержащий набор пунктов, которые может выбрать пользователь. В VPI есть несколько предикатов для работы со списками:
· lbox_Add (Window, Index, Str) добавляет новую строку Str в список в позицию с индексом Index. Если Index равен -1, то строка добавляется в конец списка. Нумерация элементов списка начинается с 0, т.е. первый элемент списка имеет индекс 0, второй -1 и т.д.
· lbox_Clear (Window) удаляет все элементы списка
· lbox_Delete (Window, Index) удаляет элемент с указанным индексом
· lbox_GetItem (Window, Index) возвращает элемент списка с указанным индексом
· Integer=lbox_GetSelIndex(Window) возвращает индекс выбранного элемента. Предикат завершится неуспешно, если никакой элемент в списке не выбран
· lbox_IsSel(Window, Index) завершается успешно или неспешно в зависимости от того, является ли текущим заданный элемент в списке
Пример. Проект, позволяющий формировать и редактировать списки данных.
Создать проект, содержащий элементы ListBox (список), Edit Control (поле ввода) для ввода новых данных, Push Button (кнопки) для добавления нового элемента в список и удаления выделенного элемента.
Решение
1. Создайте новый проект.
2. Добавьте в главное меню новый пункт Spisok .
3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем - кнопку New справа. Откроется окно Window Attributes. Введите имя создаваемого окна Spisok и нажмите ОК.
4. Разместите на макете появившегося нового окна следующие компоненты: Edit Control, Push Button, ListBox.
Задайте имена-константы для размещенных элементов, например для Edit Control - idc_edit, для ListBox - id_list_box, для кнопки ADD - idc_add, для кнопки DELETE - idc_delete
5. Сгенерируйте стандартный код Visual Prolog для нового окна. Для этого в окне проекта нажмите кнопку Code Expert, когда выбрано окно Spisok. Откроется окно Dialog and Window Expert. Выберите исходный модуль spisok.pro и нажмите кнопку Default Code.
6. Запрограммируйте выбор пункта меню Spisok для вызова окна Spisok. Для этого в списке окон выберите Task Window, пункт Menu в списке Event Type и выделите строку id_spisok (имя пункта меню) в списке Event or Item. Нажмите кнопку Add Clause, чтобы сгенерировать Пролог-предложение для события. Название кнопки изменится на Edit Clause, когда код для события будет создан. Нажмите кнопку Edit Clause. Откроется окно редактора для файла Spisok.pro, в который добавлено предложение:
%BEGIN Task Window, id_spisok
task_win_eh(_Win,e_Menu(id_spisok,_ShiftCtlAlt),0):-!,
!.
%END Task Window, id_spisok
Допишите команду для открытия окна Spisok: win_spisok_Create(_Win). В результате должно получиться:
%BEGIN Task Window, id_spisok
task_win_eh(_Win,e_Menu(id_spisok,_ShiftCtlAlt),0):-!,
win_spisok_Create(_Win),
!.
%END Task Window, id_spisok
7. Запрограммируйте нажатие кнопки ADD в окне Spisok для добавления нового элемента в список. Для этого вызовите окно Dialog and Window Expert (кнопка Code Expert) и в списке окон выберите Spisok. Выберите пункт Control в списке Event Type и выделите строку pb: idc_add(имя кнопки ADD). Нажмите кнопку Add Clause, а затем Edit Clause(рис.22).
рис.22. Созданное окно Spisok
Откроется окно редактора для файла Spisok.pro, в который добавлено предложение:
%BEGIN spisok, idc_add _CtlInfo
win_spisok_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,
_CtlInfo),0):-!,
!.
%END spisok, idc_add _CtlInfo
Допишите необходимые команды. В результате должно получиться:
%BEGIN spisok, idc_add _CtlInfo
win_spisok_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,
_CtlInfo),0):-!,
LBOXWIN = win_GetCtlHandle(_Win,id_list_box),
E_WINDOW = win_GetCtlHandle(_Win,idc_edit),
EDIT_STRING= win_GetText(E_WINDOW),
EDIT_STRING<>"",
lbox_Add(LBOXWIN,-1,EDIT_STRING),
!.
%END spisok, idc_add _CtlInfo
8. Аналогично запрограммируйте нажатие кнопки DELETE в окне Spisok для удаления выделенного элемента списка.
%BEGIN spisok, idc_delete _CtlInfo
win_spisok_eh(_Win,e_Control(idc_delete,_CtrlType,_
CtrlWin, _CtlInfo),0):-!,
LBOXWIN = win_GetCtlHandle(_Win,id_list_box),
Index = lbox_GetSelIndex(LBOXWIN),
lbox_Delete(LBOXWIN,Index),
!.
%END spisok, idc_delete _CtlInfo
9. Запустите проект на исполнение и протестируйте его.
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Доработайте проект проект следующим образом:
1) добавьте кнопку CLEAR, при нажатии на которую удаляется все содержимое списка (используйте предикат lbox_Clear);
2) добавьте компонент Static Text, который должен отображать выделенный элемент списка.
3. Создание экспертных систем средствами ПРОЛОГа
Экспертные системы (ЭС) - это сложные программные комплексы, аккумулирующие знания специалистов в конкретных предметных областях и тиражирующие этот эмпирический опыт для консультаций менее квалифицированных пользователей.
Построим небольшую экспертную систему, которая будет определять одну из нескольких рыб по признакам, указанным пользователем. Система будет задавать вопросы и строить логические выводы на основе полученных ответов.
Типичный диалог экспертной системы с пользователем может выглядеть следующим образом (рис.23):
рис.23. Диалог экспертной системы с пользователем
Первым шагом построения такой системы является обеспечение ее знаниями, необходимыми для выполнения рассуждений. Программа должна во время консультаций выводить заключения из информации, имеющейся в базе знаний, а также использовать новую информацию, полученную от пользователя. Поэтому минимальная ЭС должна включать:
базу знаний;
механизм вывода;
пользовательский интерфейс.
Разработку любой ЭС следует начать с исследования предметной области. Пусть на основе бесед с экспертом были получены следующие эмпирические правила:
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. Протестируйте полученную экспертную систему.
Литература
Адаменко А., Кучуков А. Логическое программирование и Visual Prolog.- СПб, 2003
Братко И. Программирование на языке ПРОЛОГ для искусственного интеллекта.- М., 1990.
Ин Ц., Соломон Д. Использование Турбо-Пролога. -М., 1993.
Клоксин У., Меллиш К. Программирование на языке ПРОЛОГ. -М., 1991.
Макаллистер Дж. Искусственный интеллект и Пролог на микроЭВМ.- М., 1990.
Янсон А. Турбо-Пролог в сжатом изложении. -М.,1990.
Размещено на Allbest.ru
...Подобные документы
Основы языка Visual Prolog. Введение в логическое программирование. Особенности составления прологов, синтаксис логики предикатов. Программы на Visual Prolog. Унификация и поиск с возвратом. Использование нескольких значений как единого целого.
лекция [120,5 K], добавлен 28.05.2010Общая характеристика и функциональные возможности языка логического программирования Prolog, а также систем SWI-Prolog и Visual Prolog. Формирование базы знаний относительно определения возможности трудоустройства студента и принципы реализации запросов.
лабораторная работа [1,3 M], добавлен 07.10.2014Механізм функціонування Visual Prolog, яка має предикати для безпосереднього доступу до операційної системи. Розгляд предикатів, які дозволяють звертатися до ОС, предикатів побітової обробки чисел та підтримки низькорівневого режиму роботи з пам'яттю.
контрольная работа [21,4 K], добавлен 02.07.2011Нечеткая лингвистическая переменная. Конструктивное описание лингвистической переменной. Структура управляющей логики в виде вычислений с откатами. Наиболее заметные тенденции в истории развития языка программирования Prolog, основные элементы синтаксиса.
контрольная работа [38,8 K], добавлен 17.05.2011Понятие экспертных систем, их классификация, виды и структура. Построение продукционной модели экспертной системы прогнозирования результатов сессии на основании анализа успеваемости, ее реализация в языке логического программирования Visual Prolog.
дипломная работа [1,6 M], добавлен 25.01.2011Реализация экспертных систем любой сложности, решение любых головоломок и шарад с помощью языка логического программирования Prolog. Основные понятия в языке Prolog. Правила логического вывода и запросы. Процедуры логического вывода и принятия решений.
курсовая работа [19,0 K], добавлен 24.05.2012История возникновения и развития языка Prolog. Рассмотрение императивных и декларативных языков программирования. Элементы экспертной системы: база знаний, механизм вывода и система пользовательского интерфейса. Описание предикатов и предложений.
дипломная работа [44,0 K], добавлен 11.05.2014Рассмотрение экспертных систем: классификация, назначение, общие принципы построения и функционирования. Среда разработки данных систем: BorlandC++ Builder 6.0 и AMZI! Prolog. Описание процесса разработки экспертной системы "Выбор спортивного инвентаря".
курсовая работа [426,9 K], добавлен 19.08.2012Применение грамматических правил на языке Prolog. Использование грамматики для формирования лингвистической информации. Классификация грамматических формальных систем по их порождающей способности. Преобразование правил DCG интерпретатором Prolog.
презентация [72,5 K], добавлен 17.10.2013Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.
реферат [14,3 K], добавлен 15.10.2012Рассмотрение истории создания, особенностей (интеллектуальное обесцвечивание, динамика кистей), преимуществ и недостатков бесплатного растрового графического редактора GIMP. Ознакомление с интерфейсом программы. Описание меню панели инструментов.
реферат [62,6 K], добавлен 04.08.2010Особенности создания ряда игровых приложений, логической игры. Программное обеспечение простейшего калькулятора, генератора функций. Разработка элементов интерфейса простейшего графического редактора, электронной записной книжки, текстового редактора.
методичка [788,7 K], добавлен 24.10.2012Правили создания и алгоритм применения собственной функции пользователя в стандартном модуле редактора VBA. Изучение структуры кода функции. Перечень встроенных математических функций редактора Visual Basic. Определение области видимости переменной.
практическая работа [440,0 K], добавлен 07.10.2010Роль и возможности адаптивной модели в организации образовательного процесса. Структура и механизм навигации в адаптивной модели обучения АЯП Prolog. Программная реализация адаптивной модели обучения. Демонстрация созданного программного продукта.
курсовая работа [1,6 M], добавлен 19.06.2015Создание программы на языке программирования Visual Prolog. Разработка математической модели. Функциональные характеристики программы: оптимальный маршрут для такси. Интерфейс пользователя, руководство программиста, функциональная схема, тестовый пример.
курсовая работа [515,4 K], добавлен 18.10.2010Рассмотрение процесса разработки системы нахождения нулей функции. Изучение вычисления корня уравнения методом Ньютона или касательных. Основы проектирования графического интерфейса пользователя и описание алгоритма, тестирование готовой программы.
курсовая работа [1,2 M], добавлен 23.02.2014Понятие и суть нечеткой логики и генетических алгоритмов. Характеристика программных пакетов для работы с системами искусственного интеллекта в среде Matlab R2009b. Реализация аппроксимации функции с применением аппарата нечеткого логического вывода.
курсовая работа [2,3 M], добавлен 23.06.2012Разработка, макетирование и реализация экспертной системы для решения задачи о коммивояжере, используя возможности языка Prolog. Составление графа "Карта Саратовской области" и решение проблемы поиска кратчайшего пути между двумя пунктами на карте.
курсовая работа [366,4 K], добавлен 12.05.2009Знакомство с основами логического программирования на примере языка Prolog. Синтаксис его основных команд. Генеалогическое дерево с использованием предикатов. Хорновская логическая программа. Основные синтаксические объекты: атомы, константы и переменные.
практическая работа [832,7 K], добавлен 20.11.2015