Создание правил продукционной модели
Входные данные продукционной модели представим в таблице 3.2 в виде таблицы в которой будет представлен вопрос, переменная которая ему соответствует и варианты ответа. Таблица 3.2 «Входные данные»
На основе этих данных построим базу знаний продукционной модели с помощью простой конструкции: Если (условие), то (действие), Набор правил для экспертной системы прогнозирования сдачи сессии студентами на основании текущей успеваемости:
3. If LIO=”Yes” and LIK=”Yes” then LI = “Yes” 4. If LIO=”Yes” and LIK=”No” then LI = “Yes”
5. If LIO=”No” and LIK=”Yes” then LI = “No” 6. If LIO=”No” and LIK=”No” then LI = “No” 7. If LSR=”Yes” and LSS=”Yes” then LS= “Yes” 8. If LSR=”Yes” and LSS=”No” then LS= “No” 9. If LSR=”No” and LSS=”Yes” then LS= “Yes” 10. If LSR=”No” and LSS=”No” then LS= “No” 11. If LS=”Yes” and LI=”Yes” and LP = “Yes” then L= “good” 12. If LS=”Yes” and LI=”Yes” and LP = “No” then L= “good” 13. If LS=”Yes” and LI=”No” and LP = “Yes” then L= “good” 14. If LS=”Yes” and LI=”No” and LP = “No” then L= “bed” 15. If LS=”No” and LI=”Yes” and LP = “No” then L= “good” 16. If LS=”No” and LI=”Yes” and LP = “Yes” then L= “good” 17. If LS=”No” and LI=”No” and LP = “Yes” then L= “bed” 18. If LS=”No” and LI=”No” and LP = “No” then L= “bed” 19. If PSL=1 and PSP=1 and PSB=1 then PS= 1 20. If PSL=1 and PSP=1 and PSB=2 then PS= 1 21. If PSL=1 and PSP=1 and PSB=3 then PS= 2 22. If PSL=1 and PSP=2 and PSB=1 then PS= 2 23. If PSL=1 and PSP=2 and PSB=2 then PS= 3 24. If PSL=1 and PSP=2 and PSB=3 then PS= 2 25. If PSL=1 and PSP=3 and PSB=1 then PS= 2 26. If PSL=1 and PSP=3 and PSB=2 then PS= 3 27. If PSL=1 and PSP=3 and PSB=3 then PS= 3 28. If PSL=2 and PSP=1 and PSB=1 then PS= 2 29. If PSL=2 and PSP=1 and PSB=2 then PS= 2 30. If PSL=2 and PSP=1 and PSB=3 then PS= 3 31. If PSL=2 and PSP=2 and PSB=1 then PS= 2 32. If PSL=2 and PSP=2 and PSB=2 then PS= 2 33. If PSL=2 and PSP=2 and PSB=3 then PS= 3 34. If PSL=2 and PSP=3 and PSB=1 then PS= 3 35. If PSL=2 and PSP=3 and PSB=2 then PS= 3 36. If PSL=2 and PSP=3 and PSB=3 then PS= 3 37. If PSL=3 and PSP=1 and PSB=1 then PS= 2 38. If PSL=3 and PSP=1 and PSB=2 then PS= 2 39. If PSL=3 and PSP=1 and PSB=3 then PS= 3 40. If PSL=3 and PSP=2 and PSB=1 then PS= 2 41. If PSL=3 and PSP=2 and PSB=2 then PS= 3 42. If PSL=3 and PSP=2 and PSB=3 then PS= 3 43. If PSL=3 and PSP=3 and PSB=1 then PS= 3 44. If PSL=3 and PSP=3 and PSB=2 then PS= 3 45. If PSL=3 and PSP=3 and PSB=3 then PS= 3 46. If PL<30 and PP<30 and PS=1 then P=1 47. If PL<30 and PP<30 and PS=2 then P=1 48. If PL<30 and PP<30 and PS=3 then P=2 49. If PL<30 and 30<PP<60 and PS=1 then P=1 50. If PL<30 and 30<PP<60 and PS=2 then P=2 51. If PL<30 and 30<PP<60 and PS=3 then P=2 52. If PL<30 and PP>60 and PS=1 then P=2 53. If PL<30 and PP>60 and PS=2 then P=2 54. If PL<30 and PP>60 and PS=3 then P=3 55. If 30<PL<60 and PP<30 and PS=1 then P=1 56. If 30<PL<60 and PP<30 and PS=2 then P=1 57. If 30<PL<60 and PP<30 and PS=3 then P=2 58. If 30<PL<60 and 30<PP<60 and PS=1 then P=1 59. If 30<PL<60 and 30<PP<60 and PS=2 then P=2 60. If 30<PL<60 and 30<PP<60 and PS=3 then P=2 61. If 30<PL<60 and PP>60 and PS=1 then P=2 62. If 30<PL<60 and PP>60 and PS=2 then P=2 63. If 30<PL<60 and PP>60 and PS=3 then P=3 64. If PL>60 and PP<30 and PS=1 then P=1 65. If PL>60 and PP<30 and PS=2 then P=1 66. If PL>60 and PP<30 and PS=3 then P=2 67. If PL>60 and 30<PP<60 and PS=1 then P=1
68. If PL>60 and 30<PP<60 and PS=2 then P=3 69. If PL>60 and 30<PP<60 and PS=3 then P=3 70. If PL>60 and PP>60 and PS=1 then P=2 71. If PL>60 and PP>60 and PS=2 then P=2 72. If PL>60 and PP>60 and PS=3 then P=3 73. If YHB=3 and YHY=”Yes” then YH=3 74. If YHB=3 and YHY=”No” then YH=3 75. If YHB=4 and YHY=”Yes” then YH=5 76. If YHB=4 and YHY=”No” then YH=4 77. If YHB=5 and YHY=”Yes” then YH=5 78. If YHB=5 and YHY=”No” then YH=4 79. If YTB=3 and YTS=”Yes” then YT=3 80. If YTB =3 and YTS =”No” then YT=3 81. If YTB =4 and YTS =”Yes” then YT=3 82. If YTB =4 and YTS =”No” then YT=4 83. If YTB =5 and YTS =”Yes” then YT=5 84. If YTB =5 and YTS =”No” then YT=5 85. If YSB=3 and YSS=”Yes” then YS=3 86. If YSB=3 and YSS=”No” then YS=3 87. If YSB=4 and YSS=”Yes” then YS=4 88. If YSB=4 and YSS=”No” then YS=4 89. If YSB=5 and YSS=”Yes” then YS=5 90. If YSB=5 and YSS=”No” then YS=3 91. If KYRS=1 and YH=3 and YT=3 then Y=3 92. If KYRS=1 and YH=3 and YT=4 then Y=3 93. If KYRS=1 and YH=3 and YT=5 then Y=4 94. If KYRS=1 and YH=4 and YT=3 then Y=3 95. If KYRS=1 and YH=4 and YT=4 then Y=4 96. If KYRS=1 and YH=4 and YT=5 then Y=5 97. If KYRS=1 and YH=5 and YT=3 then Y=4 98. If KYRS=1 and YH=5 and YT=4 then Y=4 99. If KYRS=1 and YH=5 and YT=5 then Y=5 100. If KYRS>1 and YS=3 and YT=3 then Y=3 101. If KYRS>1 and YS=3 and YT=4 then Y=3 102. If KYRS>1 and YS=3 and YT=5 then Y=4 103. If KYRS>1 and YS=4 and YT=3 then Y=4 104. If KYRS>1 and YS=4 and YT=4 then Y=4 105. If KYRS>1 and YS=4 and YT=5 then Y=5 106. If KYRS>1 and YS=5 and YT=3 then Y=4 107. If KYRS>1 and YS=5 and YT=4 then Y=4 108. If KYRS>1 and YS=5 and YT=5 then Y=5 109. If Y=3 and P=1 and L=”bed” then B=3 110. If Y=3 and P=1 and L=”good” then B=3 111. If Y=3 and P=2 and L=”bed” then B=3 112. If Y=3 and P=2 and L=”good” then B=4 113. If Y=3 and P=3 and L=”bed” then B=3 114. If Y=3 and P=3 and L=”good” then B=4 115. If Y=4 and P=1 and L=”bed” then B=3 116. If Y=4 and P=1 and L=”good” then B=4 117. If Y=4 and P=2 and L=”bed” then B=4 118. If Y=4 and P=2 and L=”good” then B=4 119. If Y=4 and P=3 and L=”bed” then B=5 120. If Y=4 and P=3 and L=”good” then B=5 121. If Y=5 and P=1 and L=”bed” then B=4 122. If Y=5 and P=1 and L=”good” then B=5 123. If Y=5 and P=2 and L=”bed” then B=4 124. If Y=5 and P=2 and L=”good” then B=5 125. If Y=5 and P=3 and L=”bed” then B=5 126. If Y=5 and P=3 and L=”good” then B=5
При наличии правил базы знаний и входящих в нее базы данных реализуем этот алгоритм в прологе. Листинг программы представлен в приложении 1.
Реализация пользовательского интерфейса в SWI - Prolog Создание интерфейса XPCE это платформо-независимый GUI тулкит для SWI-Prolog, Lisp и других интерактивный динамически типизированных языков программирования. Хотя XPCE замышлялся, как не привязанный к конкретному языку программирования, наибольшую популярность этот фреймворк получил именно с Prolog. Развитие графической библиотеки XPCE было начато в 1987, совместно с началом работ над SWI-Prolog. Поддерживает кнопки, меню, слайдеры, вкладки и другие базовые GUI виджеты. XPCE доступен на всех платформах, поддерживаемых SWI-Prolog'ом.
Именно с помощью этой графической библиотеки будет реализовано интерфейс пользователя. Ниже представлен листинг программы создания интерфейса.
Make_same_width(Gr1, Gr2):- send(Gr1, width, Gr2?width). create_person_dialog:- new(D, dialog(‘Enter new person’)),\\создание формы send(D, append, new(BG, box(0,30 )))\\ задаем размеры send(D, append, new(BI, box(800,0))), send(D, append, new(F,label)), \\ создание label send(D, append, new(Name, text_item(name))), \ \ считывание данных send(D, append, new(Age, text_item(age))), send(D, append, new(Sex, menu(sex, marked))), send(F, append, ‘To begin testing enter its name and age and press button “ Create “.’), \\ пояснительная надпись на форме send(Sex, append, female), send(Sex, append, male), send(Age, type, int), send(D, append, button(create, message(@prolog, create_person, Name?selection, Age?selection, Sex?selection))), \\ кнопка для вывода данных send(D, default_button, create),send(D, open). Create_person(Name, Age, Sex):- writeln(‘----------------------------------------------------------------‘), format(‘Student ~w person ~w of ~d years old your estimation –‘, [Sex, Name, Age]). \\ формат вывода данных:- create_person_dialog.
В результате запуска данной части программы получим всплывающее окно авторизации перед прохождением теста:
Рис. 3.1. «Форма авторизации»
Рис. 3.2. «Пример ввода данных»
В результате нажатия на кнопку «Create» появиться следующее окно с вопросами, листинг представлен ниже:
make_name_prompter(P):- new(P, dialog), send(P, kind, transient), send(P, append, new(BI, box(800,0))), send(P, append, label(prompt)), send(P, append, new(TI, text_item(name, ‘’, message(P?ok_member, execute)))), send(P, append, button(ok, message(P, return, TI?selection))), send(P, append, button(cancel, message(P, return, @nil))). Ask_name(Prompt, Label, Name):- send(@name_prompter?prompt_member, selection, Prompt), send(@name_prompter?name_member, label, Label), send(@name_prompter?name_member, clear), get(@name_prompter, confirm_centered, RawName), send(@name_prompter, show, @off), RawName \== @nil, Name = RawName. :-ask_name.
В результате выполнения данного отрывка программы получим следующую форму:
Рис. 3.3. «Форма получения исходных данных»
Рис/3.4. «Пример заполнения»
Инструкция пользователя 1. Запустить программный продукт. В результате этой операции появиться на экране форма:
2. Ввести в колонку «Имя» - ваше имя, в колонке «Возраст ваш возраст», и выбрать ваш пол, а затем нажать кнопку «Create». В результате чего вы увидите еще одну форму:
3. Отвечаете не все вопросы, вводя в графу «Имя» ответ и нажимая «ок». После ответа не последний вопрос в командном окне вы увидите ваш результат, например в таком виде: -------------------------------------------------------------------------------- Student female person Kseniya of 25 years old your estimation -5 4. Закрываете программу нажатием на красный крестик в верхнем углу.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|