Смекни!
smekni.com

Экспертная система прогнозирования успеваемости студентов в ВУЗах (стр. 5 из 12)

Начало истории языка относится к 1970-м годам.[7] Будучи декларативным языком программирования, Пролог воспринимает в качестве программы некоторое описание задачи или баз знаний и сам производит логический вывод, а также поиск решения задач, пользуясь механизмом бэктрекинга (англ. backtracking) и унификацией.

Prolog использует один тип данных, терм, который бывает нескольких типов:

· атом это отдельный объект, считающийся элементарным. В SWI-Prolog атом представляется последовательностью букв нижнего и верхнего регистра, цифр и символа подчеркивания ‘_’, начинающейся со строчной буквы. Кроме того, любой набор допустимых символов, заключенный в апострофы, также является атомом. Наконец, комбинации специальных символов + - * = < > : & также являются атомами;

· числа в SWI-Prolog бывают целыми (Integer) и вещественными (Float).;

· переменная являются строки символов, цифр и символа подчеркивания, начинающиеся с заглавной буквы или символа подчеркивания;

· составные термы (функции) состоят из имени функции (нечислового атома) и списка аргументов (термов SWI-Prolog, то есть атомов, чисел, переменных или других составных термов), заключенных в круглые скобки и разделенных запятыми. Группы составных термов используют для составления фраз SWI-Prolog. Нельзя помещать символ пробела между функтором (именем функции) и открывающей круглой скобкой. В других позициях, однако, пробелы могут быть полезны для создания более читаемых программ.

Факт – это утверждение о том, что соблюдается некоторое конкретное отношение. Он является безусловно верным.

Арифметические выражения в языке SWI-Prolog имеется ряд встроенных функций для вычисления арифметических выражений, некоторые из которых перечислены в таблице 3.1.

Таблица 3.1.

«Арифметические выражения»

X + Y Сумма X и Y
X - Y Разность X и Y
X * Y Произведение X и Y
X / Y Деление X на Y
X mod Y Остаток от деления X на Y
X // Y Деление нацело X на Y
X ** Y Возведение X в степень Y
- X Смена знака X
abs(X) Абсолютная величина числа X
max(X,Y) Большее из чисел X и Y
min(X,Y) Меньшее из чисел X и Y
sqrt(X) Квадратный корень из X
random(Int) Случайное целое число в диапазоне от 0 до Int
sin(X) Синус X
cos(X) Косинус X
tan(X) Тангенс X
log(X) Натуральный логарифм (ln) числа X
log10(X) Десятичный логарифм (lg) числа X
float(X) Вещественное число, соответствующее целому числу X
pi 3.14159 (приближенное значение числа
)
е 2.71828 (приближенное значение числа е)

Список символов может быть представлен в виде строк, например, первый аргумент составного терма возраст (‘Борис’,10) - строка. При записи строки заключаются в кавычки.

Запятая между фактами означает операцию логического и (конъюнкцию), факт может быть записан в виде предиката, аргументы которого являются символьными или числовыми константами.

В общем случае предикат – это логическая функция от одного или нескольких аргументов, то есть функция, действующая в множество из двух значений: истина и ложь. Предикат SWI-Prolog записывается в виде составного терма:

имя_предиката (аргументы).

База данных на SWI-Prolog – это совокупность фактов. В процессе работы в базу данных можно добавлять новые факты, удалять или изменять старые.

Запрос - это последовательность предикатов, разделенных запятыми и завершающаяся точкой. С помощью запросов можно “спрашивать” базу данных о том, какие утверждения являются истинными. Предикат запроса называется целью.

Кроме фактов программы на языке SWI-Prolog могут содержать правила, позволяющие получать дополнительные знания о том мире, который описывает программа. Правило задает новый предикат через определенные ранее.

Правило состоит из головы (предиката) и тела (последовательности предикатов, разделенных запятыми). Голова и тело разделены знаком ‘:–’ и, подобно каждой фразе SWI-Prolog, правило должно заканчиваться точкой.

Знак ‘:–’ есть схематическая запись стрелки (<-) и показывает, что из правой части следует левая. Этот знак читается как “если”. Интуитивный смысл правила состоит в том, что цель, являющаяся головой, будет истинной, если SWI-Prolog сможет показать, что все выражения (подцели) в теле правила являются истинными.

3.2 Создание правил продукционной модели

Входные данные продукционной модели представим в таблице 3.2 в виде таблицы в которой будет представлен вопрос , переменная которая ему соответствует и варианты ответа.

Таблица 3.2

«Входные данные»

Вопрос Переменная Варианты ответа
18. На каком курсе вы учитесь? KYRS · 1(1 курс)· 2(2 -6 курсы)
19. Проживаете ли вы в общежитии? LP · Yes· No
20. Хорошие ли у Вас отношения с одногрупниками? LIO · Yes· No
21. Хорошие ли у Вас отношения с куратором? LIK · Yes· No
22. Ваши родители одобряют Ваш выбор? LSR · Yes· No
23. Вам нравится Ваша специальность? LSS · Yes· No
24. Сколько часов в день Вы тратите на выполнение лабораторных работ? PSP · 1· 2· 3
25. Сколько часов в день Вы тратите на подготовку к лекциям? PSL · 1· 2· 3
26. Сколько раз в месяц вы посещаете библиотеку? PSB · 1· 2· 3
27. Оцените по 100-балльной системе Ваше посещение лекций? PL · 30· 60· 100
28. Оцените по 100-балльной системе Ваше посещение практических занятий? PP · 30· 60· 100
29. Какой у Вас средний балл прошлой сессии? YSB · 3· 4· 5
30. Вы довольны результатами предыдущей сессии? YSS · Yes· No
31. Ваш средний балл аттестата в школе? YHB · 3· 4· 5
32. Ваша школа имеет высокий уровень по техническим предметам? YHY · Yes· No
33. Ваша текущая успеваемость, примерно в баллах? YTB · 3· 4· 5
34. Вы считаете , что полностью отдаетесь учебе? YTS · Yes· No

На основе этих данных построим базу знаний продукционной модели с помощью простой конструкции :

Если (условие), то (действие),

Набор правил для экспертной системы прогнозирования сдачи сессии студентами на основании текущей успеваемости:

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