Разработка прототипа экспертной системы для прогноза профпригодности абитуриента к деятельности конструктора
Основные сведения об экспертных системах и моделях представления знаний. Реализация проекта с помощью нечеткой логики в MatLab. Создание программы для прогноза профпригодности абитуриента к деятельности инженера-конструктора в среде VisualProlog.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 12.01.2018 |
Размер файла | 2,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Наиболее значительное свойство человеческого интеллекта - способность принимать решения в обстановке неполной и нечёткой информации. Построение моделей приближённых рассуждений человека и использование их в компьютерных системах будущих поколений представляет собой одну из важнейших проблем науки.
Нечеткую модель можно построить, основываясь на формальном представлении характеристик исследуемой системы в терминах лингвистических переменных. Основные понятия систем управления - входные и выходные переменные, именно их рассматривают как лингвистические переменные при формировании базы правил в системах нечеткого вывода.
Цель управления заключается в анализе текущего состояния объекта управления, чтобы определить значения управляющих переменных, реализация которых позволяет обеспечить желаемое поведение или состояние объекта управления.
Запустив Matlab, необходимо набрать команду fuzzy, в появившемся окне FISEditor необходимо задать входные и выходные переменные. В нашем случае входные - это три блока вопросов, отвечающие за технический склад ума, пространственное мышление и аналитические мышление, выходные - степень принадлежности в процентном соотношении.
Ниже на рисунке 3.1 представленывходные переменные. В данном случае это три основных блока вопросов теста:
Р - Пространственное мышление;
А - Аналитическое мышление;
Т - Технический склад ума.
Рисунок 3.1 - Окно редактора FISEditor
Для каждого блока необходимо настроить термы, в данном случае термы имеют вид «Низкая функция принадлежности» «Средняя» «Низкая».
Рисунок 3.2 - Настройка входных параметров
Практическое использование теории нечетких множеств предполагает наличие функций принадлежностей, которыми описываются лингвистические термы «низкая степень принадлежности», «средняя», «высокая». Используются 2 множества:
1. множество термов
2.
3. универсальное множество, которое включает в себя количество положительных ответов
Я разработала опросник для экспертов (таблицы 4, 5, 6), провела опрос и на основе полученных знаний построила график функции принадлежности (рисунок 4). Всего было опрошено 7 экспертов.
Таблица 4- Опросник для экспертов по блоку, отвечающему за технический склад ума
Функция Принадлежности |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
|
Низкая |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
|
Средняя |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
|
Высокая |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Таблица 5- Опросник для экспертов по блоку, отвечающему за аналитическое мышление
Функция Принадлежности |
0 |
1 |
2 |
3 |
4 |
5 |
|
Низкая |
1 |
1 |
0 |
0 |
0 |
0 |
|
Средняя |
0 |
0 |
1 |
1 |
1 |
0 |
|
Высокая |
0 |
0 |
0 |
0 |
0 |
1 |
Таблица 6- Опросник для экспертов по блоку, отвечающему за пространственное мышление
Функция Принадлежности |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
Низкая |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Средняя |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
|
Высокая |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
Рисунок 3.3 - Выходные параметры. График степени принадлежности
После того как все входные переменные были настроены необходимо задать правила, в нашем случае 27 правил.
Рисунок 3.4 - Набор правил
Экспертная система для трех блоков теста готова. Для демонстрации работы экспертной системы выбираем Viewer Rules, где графически показан процесс нечеткого вывода по алгоритму Мамдани для трех входных переменных и 27 правил.
Рисунок 3.5 - Окно для просмотра результатов
На рисунке 3.6 представлено графически выполнение правила:
Если «низкая степень принадлежности» и «средняя» и «низкая», то результат «низкая степень принадлежности».
Рисунок 3.6 - Результата по одному правилу
Вывод результата с помощью графического представления нечетких знаний в виде графиков принадлежности является более понятным для восприятия.
3.2 Создание проекта в среде VisualProlog 7.1
Для разработки данного приложения в VisualProlog 7.1, создается проект с именем Test, как показано на рисунке 3.7.
Рисунок 3.7 - Окно при создании нового проекта
После создания проекта появляется «Дерево» файлов программы. Требуется откомпилировать программу, выбрав команду Build/Build из меню задач. Теперь нужно настроить созданный по умолчанию класс TaskWindow, отвечающий за главное окно приложения.
Рисунок 3.8 - «Дерево» файлов программы
В первую очередь необходимо включить пункт меню File/New, который предназначен для открытие окна будущего теста. Для этого нужно нажать на элемент TaskMemu.mnu классаTaskWindow, в появившемся окне развернуть дерево, которое появится в нижней части окна и убрать галочку из поля Disabled, как показано на рисунке 3.9.
Рисунок 3.9 - Настройки TaskMemu.mnu
Далее необходимо добавить код к элементу дерева проекта, для этого необходимо выделить элемент TaskWindow.win правой кнопкой мыши и выбрать пункт CodeExpert. Следуя рисунку 3.10.
Рисунок 3.10 - Путь для вызова CodeExpert файла TaskWindow.win
При выборе id_file_new откроется текстовый редактор, содержащий следующий фрагмент кода, который следует изменить как показано на рисунке 3.11.
Рисунок 3.11 - Измененный фрагмент кода
Все настройки произведены, осталось снова скомпилировать программу, выбрав команду Build/Execute. На экране появится окно, изображенное на рисунке 3.12.
Рисунок 3.12 - Окно приложения
3.3 Создание экранных форм
Необходимые классы созданы, теперь можно приступать к созданию графического интерфейса, т.е. Форм (Forms).Форма - это окно будущей программы, где можно разместить поля редактирования, для ввода текста и кнопки.
Для того чтобы создать форму, необходимо выбрать команду File/NewinNewPackage из меню задач (рисунок 3.13).
Рисунок 3.13 - Создание формы
Выбрать на левой панели пункт Form, заполнить диалоговое окно Create Project Item, как показано на рисунке 3.14.Название новых форм - title и test.VisualProlog создаст прототип новой формы, который нужно заполнить компанентами.
Рисунок 3.14 - Окно настройки Create Project Item
Для графического оформления форм понадобятся:
· Statictext (не изменяемый, несущий какое-либо сообщение пользователю, текст)
· PushButton (функциональные кнопки)
· EditControl (поле ввода текста с клавиатуры)
Полученные формы показаны на рисунках 3.15 и 3.16.
Рисунок 3.15 -Прототип формы теста
Рисунок 3.16 -Прототип главного окна теста
3.4 Написание кода
После разработки форм можно приступить к написанию кода.
Класс Title файл title.pro
predicates
onPushButtonClick : button::clickResponder.
clauses
onPushButtonClick(Source) = button::noAction :-
q_bd::setInTest(true()),
Parent=Source:getParent(),
PParent = Parent:getParent(),
X=test::new(PParent),
X:show().
onPushButton1Click(_Source) = button::noAction:-
_RetNum = vpiCommonDialogs::messageBox(
"Warning!!!",
"Завершитепожалуйстапредыдущеетестированиепередначаломследующего!!!
mesbox_iconInformation,
mesbox_buttonsOK,
mesbox_defaultFirst,
mesbox_suspendApplication),!.
Этот предикат служит для вызова окна с тестом (форма test). В случае, если пользователь повторно нажмет на кнопку вызывающую окно с тестом будет выведено на дисплей окошко с сообщением о невозможности выполнения этого действия (рисунок 3.17). При этом используется встроенная функция vpiCommonDialogs, имеющая 6 аргументов, которые имеют следующий смысл:
Рисунок 3.17 -Окно с описанием ошибки
Заголовок окошка, который появится в случае попытки вызова более одно Окон теста.
Текст, содержащийся в сплывшем окошке.
ID иконки, используемой в отображении.
Кнопка ОК, приводящая к ее закрытию.
Кнопка по умолчанию ( в данном случае - лишь одна кнопка ОК).
Аппликация окна.
Класс test файл test.pro
predicates
onYes_stlClick : button::clickResponder
clauses
onYes_stlClick(_Source) = button::defaultAction :-
set_an(true()), //Ведетучет
next_q(), //Увеличивающийномервопросана 1.
ret_text(TXT),
!,
test:setText(TXT). // Вывод номера вопроса и его содержимого.
onYes_stlClick(_Source) = button::defaultAction :-
r_q(TXT),
test:setText(TXT),
!.
predicates
onNoClick : button::clickResponder.
clauses
onNoClick(_Source) = button::defaultAction :-
set_an(false()),
next_q(),
ret_text(TXT),
!,
test:setText(TXT).
onNoClick (_Source) = button::defaultAction :-
r_q(TXT),
test:setText(TXT),
!.
Эти функции возвращают «TRUE» и «FALSE» соответственно нажатиям на кнопки «ДА» и «НЕТ», а затем вызывают очередной вопрос теста.
Класс q_bd файл q_bd.pro
predicates
set_an:(boolean). //Ведет учет по трем показателям.
predicates
beg:(). //Обнуляет показатели в случае, если тест был начат заново.
predicates
next_q:(). //Счетчик, увеличивающий номер вопроса на 1.
predicates
ret_text:(string)determ (o). // Для вывода Номера вопроса и его содержимого пользователю.
Классфактов:
f_q:(integer NUM,string Qtext, boolean QAtipe, integer Kmod , integer Smod ),
где: NUM (тип целочисленный int) - порядковый номер вопроса.
Qtext (тип строковый string) - Собственно сам вопрос
QAtipe (тип логический) - для присваивания одного балла вопросу в зависимости от полученного ответа «ДА», «НЕТ» - «TRUE», «FALSE» соответственно.
Kmod,Smod(тип целочисленный int) - для подсчета по двум категориям вопрсоов:
Smod-стрессоустойчивость
Kmod-коммуникабельность
Пример:
f_q(1,” 1. Испытываетеливы страх перед поступлением в институт?”, true(),
1,0,).
f_p:(integer NUM,string Qtext, boolean QAtipe, integer Kmod , integer Smod) // Такжесодержитвопрос, ноотносящийсякдругойформе, т.е. кокнусрисунком.
Пример вывода результата по количеству баллов по двум ПВК:
r_q(TXT):-
s=4,
k=4,
TXT="Ваш уровень стрессоустойчивости - высокий. Вы легко переносите невзгоды и лояльны к окружающим.Общительность - ваша самая яркая черта. Вы знаете все и обо всех. ",
!.
r_q(TXT):-
s>=2,
k>=2,
TXT="Ваш уровень стрессоустойчивости - средний. Вы являетесь человеком, который в целом неплохо справляется со стрессовыми ситуациями. Ваша коммуникабельность в рамках нормы. Вы любознательны, умеете спокойно обсуждать проблемы и находить решения. ",
!.
r_q(TXT):-
s<2,
k<2,
TXT="Ваш уровень стрессоустойчивости - низкий, из колеи вас может вышибить любая, порой даже сама невинная деталь.У вас есть проблемы с общением, и коммуникабельность - явно не ваша сильная сторона. ",
!.
Класс paintPactфайлdopaint.pro
clauses
bkg(W) :-
P= vpi::pictLoad("1.BMP"), // загружаеткартинкуформатаBMPспапки Exe.
W:pictDraw(P, pnt(10, 40)). // Вставляет картинку в окно по определенным координатам.
3.5 Выполнение программы
Запуск программы осуществляется путем запуска файла test.exe
Для выхода из программы выбираем File/Exit. В случае случайного закрытия формы Title (Опросник) выбираем File/New или используем клавишу F7.
При запуске программы пользователю необходимо заполнить поле Ф.И.О. Для регистрации и нажать кнопку «Приступить к тестированию» (рисунок 3.18).
Рисунок 3.18 -Ввод данных в главное окно теста
В качестве экспертов в нашем случае выступают инженер-конструктор и психолог, которые разработали некоторый опросный лист, содержащий около 32 вопросов. Каждый вопрос предоставленного теста соответствует определенному ПВК.
Пример вопросов теста:
Вопросы, отвечающие за коммуникабельность:
1) Вы часто обращаетесь с каким- либо вопросом к незнакомым людям?
2) Вы прислушиваетесь к чужому мнению?
3) Испытываете ли Вы волнение перед деловой встречей?
4) Услышав ошибочное заявление, Вы постараетесь поправить собеседника?
Вопросы, отвечающие за стрессоустойчивость:
5) Страдаете ли Вы бессонницей?
6) Испытываете ли Вы страх, что не поступите в институт?
7) Вы переживаете за качество своей работы?
8) Ощущаете ли Вы, что Вас недооценивают в коллективе?
Вопросы, отвечающие за аналитическое мышление:
9) Какое из данных слов не подходит к двум остальным:
10) «Удивление» так относится к «Необыкновенный», как «страх» к
11) Какая из следующих дробей не подходит к двум остальным?
12) Какое из следующих сочетаний знаков должно продолжить этот ряд ХООООХХОООХХХ?
13) «Скоро» относится к «никогда», как «близко» к
Вопросы, отвечающие за логическое мышление:
14) Продолжи ряд: 2 6 9 27 30 90 93 … …
15) Продолжи ряд: 7 21 18 6 18 15 5 … …
16) Продолжи ряд: 10 6 9 18 14 17 34 … …
Вопросы, отвечающие за внимательность:
17) Вы помните даты рождения своих близких и друзей?
18) Вы легко ориентируетесь в городе, где уже побывали?
19) Сколько квадратов вы видите на рисунке?
Вопросы, отвечающие за технический склад ума:
20) В школе Вам нравились уроки физики и математики?
21) Разбирали ли Вы в детстве игрушки, лишь потому, что вам хотелось узнать, что же там внутри?
22) Если на круглый диск, указанный на рисунке, действуют одновременно две одинаковые силы 1 и 2, то, в каком направлении будет двигаться диск?
23) Какая цепь нужна для поддержки груза?
24) Какими ножницами легче резать лист железа?
25) На каком из рисунков правильно изображена вода, выливающаяся из отверстий сосуда?
Вопросы, отвечающие за визуальное мышление:
26) Выберите трехмерный рисунок, проекция которого представлена слева:
27) Вы можете начертить без линейки и циркуля прямую линию и круг?
28) Нравится ли вы работать в графическом редакторе?
29) Выберите ответ, соответствующий картинке слева:
30) Выберите ответ, соответствующий картинке слева:
31) Выберите ответ, соответствующий картинке слева:
32) Выберите ответ, соответствующий картинке слева:
33) Выберите трехмерный рисунок, проекция которого представлена слева:
34) Какой из нарисованных справа кубиков не может быть собран из представленной слева развертки:
Есть 2 варианта подсчета результатов:
1) с помощью системы баллов
2) с помощью нечеткой логики
Система баллов предполагает, что каждый вопрос имеет определенный балл. За каждый ответ баллы суммируются по каждому ПВК. Результата теста составляется на основе получившихся баллов по каждому ПВК
Нечеткая логика требует оценки результатов тестирования на основе так называемой нечеткой шкалы ответов: «да», «скорее да», «не знаю», «скорее нет», «нет». Затем используются следующие продукции:
· Если большинство положительных ответов на вопросы, принадлежащие пространственному мышлению, техническому складу ума и аналитическому мышлению, то абитуриент может стать инженером-конструктором.
· Если положительных ответов больше на вопросы, принадлежащие коммуникабельности и стрессоустойчивости. и меньше на технический склад ума и пространственное мышление, то у абитуриента нет склонности к профессии инженера-конструктораи т. д.
Подсчет баллов с помощью нечеткой логики по каждому направлению осуществляется по формуле:
- оценка принадлежности;
- вес тестового задания;
- число тестовых заданий;
- положительные ответы на j-е тестовое задание.
После нажатия кнопки «Приступить к тестированию» появляется форма с названием test. Форма test «окошко с вопросами» представляет собой Поле, в котором появляется текст, также внизу формы кнопки для дачи ответов.
Рисунок 3.19 - Пример окна с вопросом теста
Когда тестирование будет завершено, в этом же окне в поле, где были вопросы, будет выведен результат (рисунок 3.20). После нажатия кнопки «Завершить» будут автоматически сохранены в отдельном файле ФИО и результат тестирования.
Рисунок 3.20 - Пример вывода результатов теста
3.6 Тестирование программного продукта
Разработанный прототип экспертной системы был протестирован в МБОУ Муслюмовском лицее посёлка Муслюмово. Тестировались две группы одиннадцатиклассников. Первая группа 21 человек, обучающаяся по гуманитарному направлению, вторая группа 22 человека, обучающихся по физико-математическому направлению. По результатам тестирования оказалось, что: из первой группы инженерами-конструкторами могут быть только 2 школьника, из второй группы - 17 школьников. Они обладают великолепным аналитическим и пространственным мышлением, имеют технический склад ума.
· 8 школьников первой группы и 5 школьников второй группы имеют склонности к профессии инженер-конструктор. Они обладают средним уровнем аналитического, пространственного и технического мышления.
· 10 школьников первой группы не могут стать инженерами-конструкторами. Они имеют высокие показатели по коммуникабельности и стрессоустойчивости и низкие показатели пространственного и аналитического мышления.
После проведения данного тестирования я убедилась, что разработанный прототип экспертной системы:
1. помогает выявить личностные характеристики абитуриентов;
2. помогает оценить знания абитуриента;
3. осуществляет вывод результата тестирования;
4. сохраняет результаты теста в отдельный файл;
ЗАКЛЮЧЕНИЕ
В результате выполнения данной работы был создан прототип экспертной системы для прогноза профпригодности абитуриента к деятельности инженера-конструктора. При его создании я была в роли Когнитолога и Программиста. В роли Когнитолога было выбрано два варианта обработки тестирования:
1) с помощью системы баллов;
2) с помощью методов нечеткой логики.
В качестве программиста был разработан, во-первых, интерфейс между экспертной системой и пользователем и, во-вторых, блок экспертной системы, который выдает рекомендации на основе полученных знаний.
В качестве модели знаний для создания базы знаний были рассмотрены различные их варианты и была определена продукционная модель.
Были рассмотрены различные языки описания продукционной модели и инструменты их разработки. Изучены язык Prolog и среда разработки Visual Prolog 7.1.
Полученная экспертная система позволяет сохранять в отдельных файлах сведения о людях, прошедших тестирование, и результаты тестирования. Полагаю, что разработанный прототип можно применить в приёмной комиссии для проверки абитуриентов, поступающих в наш институт.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Дж. Джарратано. Экспертные системы: принципы разработки и программирование [Текст]/ Дж. Джарратано, Г. Райли - 4-е изд.; пер. с англ. К. А. Птицына; И. д. «Вильямс», 2007. - 27 с.
2. Персональный сайт -Экспертные системы (ЭС): понятие, назначение, архитектура, отличительные особенности. Классификация ЭС. Этапы разработки ЭС.[Электронный ресурс] // Персональный сайт. - Режим доступа: http://daxnow.narod.ru/index/0-17(Дата обращения: 27 апреля 2017).
3. Экспертные системы. Классификация экспертных систем
[Электронный ресурс] //Пятифан. - Режим доступа: http://5fan.ru/wievjob.php?id=14511 (Дата обращения: 29 апреля 2017).
4. Минский М.Л. Фреймы для представления знаний[Текст] / М.:Энергия, 1979. 33 с.
5. Семенов, Н.А. Интеллектуальные информационные системы: учебное пособие[Текст]/Н.А. Семенов. 2-е изд. Тверь: ТГТУ, 2009. 124 с.
6. Ярушкина Н. Г. Методы нечетких экспертных систем в интеллектуальных САПР. - Саратов: Изд-во Сарат. ун-та, 1997. 44 с.
7. Представление и использование знаний [Текст]/ Под ред. Х. Уэно, М. Исидзука. - М. [Текст]: Мир, 1989. 138-140 с.
8. Ф. А. Новиков. Системы представления знаний [Текст] /Учеб.пособие. - СПб.: Изд-во Политехн. ун-та, 2010. 47 с.
9. Батыршин И.З. Основные операции нечеткой логики и их обобщения. - М. [Текст]: Изд-во БИНОМ, 2006. 128 с.
10. Шмидский Я.К. Программирование на языке С/С++ - М. [Текст]: Диалектика, 2003. 152 с.
11. В. Пономарев. Программирование на C++/C# в VisualStudio .NET. - СПб.[Текст]: Изд-во БХВ - Петербург, 2004. 144-152 с.
12. Т. А. Павловская. Паскаль. Программирование на языке высокого уровня. - СПб.[Текст]: Изд-во «Питер», 2003. 26 с.
13. Основы программирования на языке Лисп[Текст]: Учебное пособие. - М.: Издательский отдел факультета ВМК МГУ имени М.В.Ломоносова (лицензия ИД № 05899 от 24.09.2001); МАКС Пресс, 2010 - 112 с.
14. Братко, И.А., Алгоритмы искусственного интеллекта на языке Prolog[Текст] // И.А. Братко. -- М.: Вильямс, 2004. -- 640 с.
15. Адаменко, А.А, КучуковА.И.. Логическое программирование иVisualProlog[Текст] // А.А. Адаменко, А.И. Кучуков -- СПб.: БХВ-Петербург, 2003. -- С. 990.
16. Козырева Г.Ф. Практикум решения задач по курсу «Основы искусственного интеллекта».Учебно-методическое пособие для студентов, обучающихся по специальности «информатика». - Армавир, 2005г.
17. Единый квалификационный справочник должностей руководителей, специалистов и других служащих (ЕКС) Инженер-конструктор (конструктор) [Электронный ресурс] // ЕКС - Режим доступа:http://bizlog.ru/eks/eks-1/108.htm (Дата обращения: 19 апреля 2017).
18. Дмитриева М. А., Крылов А. А., Нафтульев А. И. Психология труда и инженерная психология[Текст] / Под ред. А. А. Крылова. - Л.: Изд-во ЛГУ, 1979. - 224 с.
19. С. Д. Штовба. Проектирование нечетких систем средствами MATLAB. -М.[Текст]: Изд-во «Горячая линия - Телеком», 2007. 188с.
20. Хабрахабр. Алгоритм Мамдани в системах нечеткого выводаhttps://habrahabr.ru/post/113020/
ПРИЛОЖЕНИЕ
Листинг файла title.cl
class title : title
open core
predicates
classInfo : core::classInfo.
% @short Class information predicate.
% @detail This predicate represents information predicate of this class.
% @end
predicates
display : (window Parent) -> title Title.
constructors
new : (window Parent).
end class title
Листингфайла title.pro
implement title
inheritsformWindow
open core, vpiDomains
constants
className = "Title/title".
classVersion = "".
clauses
classInfo(className, classVersion).
clauses
display(Parent) = Form :-
Form = new(Parent),
Form:show().
clauses
new(Parent):-
formWindow::new(Parent),
generatedInitialize().
predicates
onPushButtonClick : button::clickResponder.
clauses
onPushButtonClick(Source) = button::defaultAction :-
q_bd::setInTest(true()),
Parent=Source:getParent(),
PParent = Parent:getParent(),
X=test::new(PParent),
X:show().
% This code is maintained automatically, do not update it manually. 20:20:06-15.6.2017
facts
pushButton_ctl : button.
edit_ctl :editControl.
predicates
generatedInitialize : ().
clauses
generatedInitialize():-
setFont(vpi::fontCreateByName("MS Sans Serif", 8)),
setText("title"),
setRect(rct(50,40,294,172)),
setDecoration(titlebar([closebutton(),maximizebutton(),minimizebutton()])),
setBorder(sizeBorder()),
setState([wsf_ClipSiblings,wsf_ClipChildren]),
menuSet(noMenu),
addShowListener(generatedOnShow),
pushButton_ctl := button::new(This),
pushButton_ctl:setText("Приступить к тестированию"),
pushButton_ctl:setPosition(120, 106),
pushButton_ctl:setSize(108, 18),
pushButton_ctl:setClickResponder(onPushButtonClick),
edit_ctl := editControl::new(This),
edit_ctl:setText(""),
edit_ctl:setPosition(8, 66),
edit_ctl:setWidth(152),
edit_ctl:setHeight(18),
edit_ctl:setMultiLine(),
StaticText_ctl = textControl::new(This),
StaticText_ctl:setText(" Вашему вниманию предложен тест на профпригодность к деятельности инженера-конструктора. Тест состоитиз 32 вопросов."),
StaticText_ctl:setPosition(8, 10),
StaticText_ctl:setSize(220, 26),
StaticText1_ctl = textControl::new(This),
StaticText1_ctl:setText(" Пожалуйставведите ФИО"),
StaticText1_ctl:setPosition(8, 48),
StaticText1_ctl:setSize(112, 14).
predicates
generatedOnShow: window::showListener.
clauses
generatedOnShow(_,_):-
succeed.
% end of automatic code
end implement title
Листингфайла q_bd.cl
classq_bd : q_bd
open core
predicates
classInfo : core::classInfo.
% @short Class information predicate.
% @detail This predicate represents information predicate of this class.
% @end
predicates
r_q:(string)procedure (o).
predicates
set_an:(boolean).
predicates
beg:().
predicates
next_q:().
predicates
ret_text:(string)determ (o).
predicates
getInTest : () ->boolean.
setInTest : (boolean).
end class q_bd
Листингфайла q_bd.pro
implementq_bd
open core
constants
className = "q_bd/q_bd".
classVersion = "".
clauses
classInfo(className, classVersion).
class facts
is_in_test:boolean:=false()
clauses
getInTest() = is_in_test.
setInTest(VAL):-
is_in_test := VAL.
class facts
f_q:(integer NUM,stringQtext, booleanQAtipe, integer Kmod , integer Smod).
clauses
f_q(2, "1. Вы часто обращаетесь с каким- либо вопросом к незнакомым людям?", true(), 1,0).
f_q(3, "2. Вы прислушиваетесь к чужому мнению?", true(), 1,0).
f_q(4, "3. Испытываете ли Вы волнение перед деловой встречей?", true(), 1,0).
f_q(5, "4. Услышав ошибочное заявление, Вы постараетесь поправить собеседника?", true(), 0,1).
f_q(6, "5. Страдаете ли Вы бессонницей?", false(), 0,1).
f_q(7, "6. Испытываете ли Вы страх, что не поступите в институт?", true(), 0,1).
f_q(8, "7.Вы переживаете за качество своей работы?", true(), 0,1).
f_q(9, "8. Ощущаете ли Вы, что Вас недооценивают в коллективе?", true(), 0,1).
class facts
s:integer := 0.
k:integer := 0.
num:integer:= 1.
clauses
set_an(AN):-
f_q(num,_, Rec_an, Kmod, Smod),
Rec_an=AN,
!,
s:=s+Smod,
k:=k+Kmod.
set_an(_):-
!.
clauses
beg():-
num:=1,
s:=0,
k:=0,
clauses
next_q():-
num:=num+1.
ret_text(TXT):-
f_q(num, TXT, _,_,_),
!.
clauses
r_q(TXT):-
s=4,
k=4,
TXT="Ваш уровень стрессоустойчивости - высокий. Вы легко переносите невзгоды и лояльны к окружающим.Общительность - ваша самая яркая черта. Вы знаете все и обо всех. ",
!.
r_q(TXT):-
s>=2,
k>=2,
TXT="Ваш уровень стрессоустойчивости - средний. Вы являетесь человеком, который в целом неплохо справляется со стрессовыми ситуациямиВаша коммуникабельность в рамках нормы. Вы любознательны, умеете спокойно обсуждать проблемы и находить решения. ",
!.
r_q(TXT):-
s<2,
k<2,
TXT="Ваш уровень стрессоустойчивости - низкий, из колеи вас может вышибить любая, порой даже сама невинная деталь.У вас есть проблемы с общением, и коммуникабельность - явно не ваша сильная сторона. ",
!.
r_q(TXT):-
s=4,
k<2,
TXT="Ваш уровень стрессоустойчивости - высокий. Вы легко переносите невзгоды и лояльны к окружающим.У вас есть проблемы с общением, и коммуникабельность - явно не ваша сильная сторона. ",
!.
r_q(TXT):-
s<2,
k=4,
TXT="Ваш уровень стрессоустойчивости - низкий, из колеи вас может вышибить любая, порой даже сама невинная деталь.Общительность - ваша самая яркая черта. Вы знаете все и обо всех. ",
!.
r_q(TXT):-
s>=2,
k<2,
TXT="Ваш уровень стрессоустойчивости - средний. Вы являетесь человеком, который в целом неплохо справляется со стрессовыми ситуациями. У вас есть проблемы с общением, и коммуникабельность - явно не ваша сильная сторона.",
!.
r_q(TXT):-
s=4,
k>=2,
TXT="Ваш уровень стрессоустойчивости - высокий. Вы легко переносите невзгоды и лояльны к окружающим. Ваша коммуникабельность в рамках нормы. Вы любознательны, умеете спокойно обсуждать проблемы и находить решения. ",
!.
r_q(TXT):-
s>=2,
k=4,
TXT="Ваш уровень стрессоустойчивости - средний. Вы являетесь человеком, который в целом неплохо справляется со стрессовыми ситуациями. Общительность - ваша самая яркая черта. Вы знаете все и обо всех.",
!.
end implement q_bd
Листингфайла test.cl
class test : test
open core
predicates
classInfo : core::classInfo.
% @short Class information predicate.
% @detail This predicate represents information predicate of this class.
% @end
predicates
display : (window Parent) -> test Test.
constructors
new : (window Parent).
end class test
Листингфайла test.pro
implement test
inheritsformWindow
open core, vpiDomains, q_bd
constants
className = "test/test".
classVersion = "".
clauses
classInfo(className, classVersion).
clauses
display(Parent) = Form :-
Form = new(Parent),
Form:show().
clauses
new(Parent):-
formWindow::new(Parent),
generatedInitialize().
predicates
onPushButtonClick : button::clickResponder.
clauses
onPushButtonClick(_Source) = button::defaultAction :-
set_an(true()),
next_q(),
ret_text(TXT),
!,
test:setText(TXT).
onPushButtonClick(Source) = button::defaultAction :-
q_bd1::setInTest(true()),
Parent=Source:getParent(),
PParent = Parent:getParent(),
X=test1::new(PParent),
X:show().
predicates
onPushButton1Click : button::clickResponder.
clauses
onPushButton1Click(_Source) = button::defaultAction :-
set_an(false()),
next_q(),
ret_text(TXT),
!,
test:setText(TXT).
onPushButton1Click(Source) = button::defaultAction :-
q_bd1::setInTest(true()),
Parent=Source:getParent(),
PParent = Parent:getParent(),
X=test1::new(PParent),
X:show().
predicates
onPushButton2Click : button::clickResponder.
clauses
onPushButton2Click(_Source) = button::defaultAction :-
set_an(false()),
next_q(),
ret_text(TXT),
!,
test:setText(TXT).
onPushButton2Click(_Source) = button::defaultAction :-
r_q(TXT),
test:setText(TXT),
!.
% This code is maintained automatically, do not update it manually. 21:22:04-15.6.2017
facts
test :textControl.
pushButton_ctl : button.
pushButton1_ctl : button.
pushButton2_ctl : button.
predicates
generatedInitialize : ().
clauses
generatedInitialize():-
setFont(vpi::fontCreateByName("MS Sans Serif", 8)),
setText("test"),
setRect(rct(50,40,290,128)),
setDecoration(titlebar([closebutton(),maximizebutton(),minimizebutton()])),
setBorder(sizeBorder()),
setState([wsf_ClipSiblings,wsf_ClipChildren]),
menuSet(noMenu),
addShowListener(generatedOnShow),
pushButton_ctl := button::new(This),
pushButton_ctl:setText("Часто"),
pushButton_ctl:setPosition(12, 66),
pushButton_ctl:setSize(60, 14),
pushButton_ctl:setClickResponder(onPushButtonClick),
pushButton1_ctl := button::new(This),
pushButton1_ctl:setText("Иногда"),
pushButton1_ctl:setPosition(84, 66),
pushButton1_ctl:setSize(60, 14),
pushButton1_ctl:setClickResponder(onPushButton1Click),
pushButton2_ctl := button::new(This),
pushButton2_ctl:setText("Редко"),
pushButton2_ctl:setPosition(156, 66),
pushButton2_ctl:setSize(60, 14),
pushButton2_ctl:setClickResponder(onPushButton2Click),
test := textControl::new(This),
test:setText(""),
test:setPosition(12, 6),
test:setSize(204, 52).
predicates
generatedOnShow: window::showListener.
clauses
generatedOnShow(_,_):-
succeed.
% end of automatic code
Листингфайла canvas.pro
implement canvas
inheritsformWindow
open core, vpiDomains, q_bd2, dopaint
constants
className = "paintPact/canvas/canvas".
classVersion = "".
clauses
classInfo(className, classVersion).
clauses
display(Parent) = Form :-
Form = new(Parent),
Form:show().
clauses
new(Parent):-
formWindow::new(Parent),
generatedInitialize().
predicates
onPaint :drawWindow::paintResponder.
clauses
onPaint(_Source, _Rectangle, GDIObj) :-
dopaint::bkg(GDIObj),
!.
predicates
onPushButtonClick : button::clickResponder.
clauses
onPushButtonClick(Source) = button::defaultAction :-
Parent=Source:getParent(),
PParent = Parent:getParent(),
X=canvas1::new(PParent),
X:show().
predicates
onPushButton1Click : button::clickResponder.
clauses
onPushButton1Click(_Source) = button::defaultAction.
predicates
onPushButton2Click : button::clickResponder.
clauses
onPushButton2Click(_Source) = button::defaultAction.
% This code is maintained automatically, do not update it manually. 00:42:27-16.6.2017
facts
pushButton_ctl : button.
pushButton1_ctl : button.
pushButton2_ctl : button.
predicates
generatedInitialize : ().
clauses
generatedInitialize():-
setFont(vpi::fontCreateByName("MS Sans Serif", 8)),
setText("canvas"),
setRect(rct(50,40,306,210)),
setDecoration(titlebar([closebutton(),maximizebutton(),minimizebutton()])),
setBorder(sizeBorder()),
setState([wsf_ClipSiblings,wsf_ClipChildren]),
menuSet(noMenu),
addShowListener(generatedOnShow),
setPaintResponder(onPaint),
pushButton_ctl := button::new(This),
pushButton_ctl:setText("A"),
pushButton_ctl:setPosition(20, 150),
pushButton_ctl:setClickResponder(onPushButtonClick),
pushButton1_ctl := button::new(This),
pushButton1_ctl:setText("B"),
pushButton1_ctl:setPosition(88, 150),
pushButton1_ctl:setClickResponder(onPushButton1Click),
pushButton2_ctl := button::new(This),
pushButton2_ctl:setText("C"),
pushButton2_ctl:setPosition(156, 150),
pushButton2_ctl:setClickResponder(onPushButton2Click),
Test2 = textControl::new(This),
Test2:setText("13. Если на круглый диск, указанный на рисунке, действуют одновременно две одинаковые силы 1и 2, то в каком направлении будет двигаться диск?"),
Test2:setPosition(12, 2),
Test2:setSize(232, 26).
predicates
generatedOnShow: window::showListener.
clauses
generatedOnShow(_,_):-
succeed.
% end of automatic code
end implement canvas
Листингфайла dopaint.cl
classdopaint
open core
predicates
bkg:(windowGDI).
predicates
bkg1:(windowGDI).
predicates
bkg2:(windowGDI).
predicates
bkg3:(windowGDI).
predicates
bkg4:(windowGDI).
predicates
bkg5:(windowGDI).
predicates
bkg6:(windowGDI).
predicates
bkg7:(windowGDI).
predicates
bkg8:(windowGDI).
predicates
bkg9:(windowGDI).
predicates
bkg10:(windowGDI).
predicates
bkg11:(windowGDI).
end class dopaint
Листингфайлаdopaint.pro
implementdopaint
open core, vpiDomains
constants
className = "paintPact/dopaint/dopaint".
classVersion = "".
class facts
clauses
bkg(W) :-
P= vpi::pictLoad("1.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg1(W) :-
P= vpi::pictLoad("2.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg2(W) :-
P= vpi::pictLoad("3.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg3(W) :-
P= vpi::pictLoad("4.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg4(W) :-
P= vpi::pictLoad("5.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg5(W) :-
P= vpi::pictLoad("6.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg6(W) :-
P= vpi::pictLoad("7.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg7(W) :-
P= vpi::pictLoad("8.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg8(W) :-
P= vpi::pictLoad("9.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg9(W) :-
P= vpi::pictLoad("10.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg10(W) :-
P= vpi::pictLoad("11.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
clauses
bkg11(W) :-
P= vpi::pictLoad("12.BMP"),
W:pictDraw(P, pnt(10, 40), rop_SrcCopy).
Размещено на Allbest.ru
...Подобные документы
Синтаксис логики предикатов. Преобразование унарных предикатов в бинарные. Функции, выполняемые экспертной системой. Правила "если-то" для представления знаний. Разработка оболочки в экспертных системах. Рассуждения, использующие логические формулы.
курс лекций [538,1 K], добавлен 16.06.2012Обобщенная структура и принципы функционирования экспертных систем. Выбор модели представления знаний. Разработка логического блока программы и графического пользовательского интерфейса. Текст программы и экспериментальная оценка результатов работы.
дипломная работа [2,4 M], добавлен 06.03.2013Понятия, классификация и структура экспертных систем. Базы знаний и модели представления знаний. Механизмы логического вывода. Инструментальные средства проектирования и разработки экспертных систем. Предметная область ЭС "Выбор мобильного телефона".
курсовая работа [2,2 M], добавлен 05.11.2014Понятие и сущность экспертной системы, ее внутренняя структура и назначение, этапы и принципы разработки. Продукционная и фреймовая модель представления знаний, порядок построения семантической сети. Разработка алгоритма программы, создание интерфейса.
курсовая работа [1,2 M], добавлен 22.01.2015Этапы разработки экспертных систем. Требования к организации-разработчику. Правильный выбор подходящей проблемы, работа с экспертом. Разработка прототипной системы. Развитие прототипа до промышленной экспертной системы. Особенности оценки системы.
презентация [169,1 K], добавлен 14.08.2013Понятие и суть нечеткой логики и генетических алгоритмов. Характеристика программных пакетов для работы с системами искусственного интеллекта в среде Matlab R2009b. Реализация аппроксимации функции с применением аппарата нечеткого логического вывода.
курсовая работа [2,3 M], добавлен 23.06.2012Фреймовые модели представления знаний. Разработка структуры фреймов для реализации экспертной системы. Разработка экспертной системы с фреймовой моделью представления знаний. Редактирование базы фактов кандидатов и описание режима консультации.
курсовая работа [1,3 M], добавлен 13.10.2012Создание базы данных в Microsoft Access с помощью мастера шаблонов. Создание таблиц путём ввода данных, с помощью мастера таблиц или таблицы в режиме конструктора таблиц. Создание запросов в Microsoft Access, с помощью мастера или конструктора запросов.
реферат [27,3 K], добавлен 08.09.2010Разработка программного обеспечения автоматизированной системы безопасности. Задание лингвистических переменных в среде MatLAB. Развитие нечеткой логики. Характеристика нечетких систем; смещение центра их исследований в сторону практических применений.
курсовая работа [2,2 M], добавлен 10.02.2013Проектирование экспертной системы выбора нейронной сети. Сущность семантических сетей и фреймов. MatLab и системы Фаззи-регулирования. Реализация программы с использованием пакета fuzzy logic toolbox системы MatLab 7. Составление продукционных правил.
курсовая работа [904,4 K], добавлен 17.03.2016Параметры автомобиля, используемые в экспертной системе. Задание нечетких и лингвистических переменных, виды термов. Список правил для функционирования системы, результаты анализа ее работы. Применение алгоритма Мамдани в системах нечеткой логики.
курсовая работа [1,5 M], добавлен 10.02.2013Разработка и реализация проекта информационной системы, предназначенной для хранения сведения о клиентах и недвижимости. Моделирование и реализация информационной системы. Разработка пользовательского интерфейса. Затраты на написание программы и отладку.
курсовая работа [1,0 M], добавлен 30.06.2022Проектирование системы принятия решения для аттестации знаний абитуриента на основе тестирования. Особенности создания базы данных и плана перевозок с минимизацией затрат. Разработка информационно-логической модели предметной области "Книга" с атрибутами.
курсовая работа [7,9 M], добавлен 10.10.2012Отличительные черты компьютерных программ экспертных систем, их разработка. Составные части систем: база знаний, механизм вывода, система пользовательского интерфейса. Структура базы знаний экспертной системы для помощи медикам в постановке диагноза.
курсовая работа [325,0 K], добавлен 04.02.2011Особенности отображения графики в приложениях. Представление контекста отображения; управление состоянием элементов меню. Реализация класса представления геометрических фигур GraphicsDisplay, конструктора окна MainFrame. Реализация чтения данных из файла.
лабораторная работа [1,1 M], добавлен 01.05.2014Рабочая среда MS Access. Окна, меню и панели инструментов. Основные режимы работы с таблицами. Создание таблиц. Создание первичных ключей и связей. Создание простого запроса с помощью мастера запросов. Изменение запроса с помощью конструктора запросов.
практическая работа [1,5 M], добавлен 03.06.2008Архитектура сети: одноранговая, клиент - сервер, терминал - главный компьютер. Разработка конструктора электронных моделей компьютерных сетей с функциями проектирования сети и её диагностики. Требования к проектированию структурированных кабельных систем.
курсовая работа [1,6 M], добавлен 19.11.2010Основные задачи системы электронного документооборота. Создание таблиц и определение связей между ними в MS Access. Работа с мастером подстановок. Разработка запросов. Форма в режиме конструктора. Создание простого отчета для одной таблицы. Вид макета.
курсовая работа [1,6 M], добавлен 20.09.2013Структура экспертных систем, их классификация и характеристики. Выбор среды разработки программирования. Этапы создания экспертных систем. Алгоритм формирования базы знаний с прямой цепочкой рассуждений. Особенности интерфейса модулей "Expert" и "Klient".
курсовая работа [1,1 M], добавлен 18.08.2009Фреймы как один из распространенных формализмов представления знаний в электронных системах, их классификация и типы, структура и элементы. Иерархические фреймовые структуры и принципы их построения. Код программы Интерфейс. Разработка программного кода.
лабораторная работа [524,2 K], добавлен 02.11.2013