courses:knowledge_representation_and_artificial_intelligence_systems:lab1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
courses:knowledge_representation_and_artificial_intelligence_systems:lab1 [2019/07/16 09:47]
andrey.suchkov [Изучение базовых команд и конструкций CLIPS]
courses:knowledge_representation_and_artificial_intelligence_systems:lab1 [2022/12/10 09:08] (current)
Line 10: Line 10:
  
 ^  Пункт ​ ^  Подпункт ​ ^  <<​Горячие>>​ клавиши ​ ^  Назначение команды ​ ^ ^  Пункт ​ ^  Подпункт ​ ^  <<​Горячие>>​ клавиши ​ ^  Назначение команды ​ ^
-|  File  |  New  |  ​Ctrl-N  |  Вызов редактора ​ | +|  File  |  New  |  ​<​nowiki>​^</​nowiki>​N  |  Вызов редактора ​ | 
-|  :::  |  Load  |  ​Ctrl-L  |  Загрузка конструкций из файла ​ |+|  :::  |  Load  |  ​<​nowiki>​^</​nowiki>​L  |  Загрузка конструкций из файла ​ |
 |  :::  |  Load Batch  |  -  |  Исполнение пакетного файла ​ | |  :::  |  Load Batch  |  -  |  Исполнение пакетного файла ​ |
-|  Execution ​ |  Reset  |  ​Ctrl-E  |  Инициализация конструкций ​ | +|  Execution ​ |  Reset  |  ​<​nowiki>​^</​nowiki>​E  |  Инициализация конструкций ​ | 
-|  :::  |  Run  |  ​Ctrl-R  |  Запуск МЛВ ​ | +|  :::  |  Run  |  ​<​nowiki>​^</​nowiki>​R  |  Запуск МЛВ ​ | 
-|  :::  |  Step  |  ​Ctrl-T  |  Выполнение одного шага вывода ​ |+|  :::  |  Step  |  ​<​nowiki>​^</​nowiki>​T  |  Выполнение одного шага вывода ​ |
 |  Window ​ |  Facts Window ​ |  -  |  Активация окна списка фактов ​ | |  Window ​ |  Facts Window ​ |  -  |  Активация окна списка фактов ​ |
 |  :::  |  Agenda Window ​ |  -  |  Активация окна агенды ​ | |  :::  |  Agenda Window ​ |  -  |  Активация окна агенды ​ |
Line 55: Line 55:
 (deffacts <​имя_группы_фактов>​ ["<​комментарий>"​] <​факт>​*) (deffacts <​имя_группы_фактов>​ ["<​комментарий>"​] <​факт>​*)
 </​code>​ </​code>​
-где ''<​имя_группы_фактов>''​ -- идентификатор символьного типа; ''<​комментарий>''​ -- необязательное поле комментария;​ ''<​факт>​*)''​ -- произвольная последовательность фактов,​ записанных через разделитель.+где ''<​имя_группы_фактов>''​ -- идентификатор символьного типа; ''<​комментарий>''​ -- необязательное поле комментария;​ ''<​факт>​*''​ -- произвольная последовательность фактов,​ записанных через разделитель. 
 + 
 +Пример использования конструкции ''​deffacts'':​ 
 +<​code>​ 
 +(deffacts startup "​Refrigerator Status"​ 
 +  (refrigerator light on) 
 +  (refrigerator door open)) 
 +</​code>​
  
 Факты, определенные конструкцией ''​deffacts''​ добавляются в список фактов всякий раз при выполнении команды ''​reset''​. Факты, определенные конструкцией ''​deffacts''​ добавляются в список фактов всякий раз при выполнении команды ''​reset''​.
  
-Для задания правил используется конструкция defrule со следующим синтаксисом:​+Для задания правил используется конструкция ​'' ​defrule'' ​со следующим синтаксисом:​
 <​code>​ <​code>​
 (defrule <​имя_правила>​ ["<​комментарий>"​] (defrule <​имя_правила>​ ["<​комментарий>"​]
   [<​объявление>​]   [<​объявление>​]
-  <​условный элемент>​* ; Левая часть правила (антецедент)+  <​условный элемент>​* ​ ; Левая часть правила (антецедент)
 => =>
-  <​действие>​*) ; Правая часть правила (консеквент)+  <​действие>​*) ​ ; Правая часть правила (консеквент)
 </​code>​ </​code>​
 где ''<​имя_правила>''​ -- идентификатор символьного типа, уникальный для данной группы правил;​ ''<​комментарий>''​ -- необязательное поле комментария;​ ''<​условный элемент>​*''​ -- произвольная последовательность условных элементов;​ ''<​действие>​*''​ -- произвольная последовательность действий. где ''<​имя_правила>''​ -- идентификатор символьного типа, уникальный для данной группы правил;​ ''<​комментарий>''​ -- необязательное поле комментария;​ ''<​условный элемент>​*''​ -- произвольная последовательность условных элементов;​ ''<​действие>​*''​ -- произвольная последовательность действий.
Line 71: Line 78:
 Пример задания правила:​ Пример задания правила:​
 <​code>​ <​code>​
-(defrule R1+(defrule R1 "​Пример задания правила"​
   (days 2)   (days 2)
   (works 100)   (works 100)
Line 83: Line 90:
 Демонстрационная ЭС разрабатывается для предметной области,​ согласованной с преподавателем и производится ее тестирование на различных комбинациях входных значений в пошаговом режиме. Демонстрационная ЭС разрабатывается для предметной области,​ согласованной с преподавателем и производится ее тестирование на различных комбинациях входных значений в пошаговом режиме.
 ===== Порядок выполнения работы ===== ===== Порядок выполнения работы =====
-==== Изучение базовых команд и конструкций CLIPS ====+==== 1. Изучение базовых команд и конструкций CLIPS ====
   - Запустить систему CLIPS (файл //​clipswin.exe//​). Активизировать окно просмотра текущего списка фактов (подпункт <<​Facts Window>>​ пункта <<​Windows>>​ главного меню). Выполнить следующую последовательность действий,​ фиксируя после каждого шага состояние списка фактов:​   - Запустить систему CLIPS (файл //​clipswin.exe//​). Активизировать окно просмотра текущего списка фактов (подпункт <<​Facts Window>>​ пункта <<​Windows>>​ главного меню). Выполнить следующую последовательность действий,​ фиксируя после каждого шага состояние списка фактов:​
     * сбросить систему в исходное состояние командой ''​(clear)'';​     * сбросить систему в исходное состояние командой ''​(clear)'';​
-    * выполнить начальную установку командой (reset) или комбинацией клавиш ​Ctrl-E; +    * выполнить начальную установку командой ​''​(reset)'' ​или комбинацией клавиш ​^E; 
-    * ввести 3 любых упорядоченных факта командой (assert), например:​ \\ ''​CLIPS> ​(assert (n n) (m m) (p p))'';​+    * ввести 3 любых упорядоченных факта командой ​''​(assert)''​, например:​ \\ ''​(assert (n n) (m m) (p p))'';​
     * повторно выполнить сброс командой ''​(reset)'';​     * повторно выполнить сброс командой ''​(reset)'';​
     * установить 3 ранее вводимых упорядоченных факта в качестве исходных фактов,​ используя конструкцию ''​(deffacts)'';​     * установить 3 ранее вводимых упорядоченных факта в качестве исходных фактов,​ используя конструкцию ''​(deffacts)'';​
     * выполнить сброс командой ''​(reset)''​.     * выполнить сброс командой ''​(reset)''​.
   - Активизировать дополнительно окно просмотра агенды (подпункт <<​Agenda Window>>​ пункта <<​Windows>>​ главного меню). Выполнить следующую последовательность действий,​ фиксируя после каждого шага состояния списка фактов и агенды:​   - Активизировать дополнительно окно просмотра агенды (подпункт <<​Agenda Window>>​ пункта <<​Windows>>​ главного меню). Выполнить следующую последовательность действий,​ фиксируя после каждого шага состояния списка фактов и агенды:​
-    * используя конструкцию ''​(defrule)'',​ ввести три правила,​ такие, что антецеденты первых двух правил сопоставляются с комбинацией фактов,​ заданных ранее конструкцией (deffacts), а консеквенты этих правил добавляют новые факты, сопоставляемые с антецедентом третьего правила. Пусть, например,​ ''​X'',​ ''​Y''​ и ''​Z''​ -- факты, заданные конструкцией ''​(deffacts)''​. Тогда структура вводимых правил может быть представлена следующим образом:​ <​code>​+    * используя конструкцию ''​(defrule)'',​ ввести три правила,​ такие, что антецеденты первых двух правил сопоставляются с комбинацией фактов,​ заданных ранее конструкцией ​''​(deffacts)''​, а консеквенты этих правил добавляют новые факты, сопоставляемые с антецедентом третьего правила. Пусть, например,​ ''​X'',​ ''​Y''​ и ''​Z''​ -- факты, заданные конструкцией ''​(deffacts)''​. Тогда структура вводимых правил может быть представлена следующим образом:​ <​code>​
 X & Y => V; X & Y => V;
 Y & Z => W; Y & Z => W;
 V & W => U; V & W => U;
 </​code>​ </​code>​
-    * выполнить по шагам активизацию правил (используя <<​горячую>>​ комбинацию ​Ctrl-T). +    * выполнить по шагам активизацию правил (используя <<​горячую>>​ комбинацию ​^T). 
-==== Разработка демонстрационной экспертной системы ====+==== 2. Разработка демонстрационной экспертной системы ====
   * Сформировать,​ пользуясь редактором CLIPS, базу знаний демонстрационной ЭС и сохранить ее в файле //​rulebase.CLP//​. Предметную область экспертной системы выбрать по согласованию с преподавателем.   * Сформировать,​ пользуясь редактором CLIPS, базу знаний демонстрационной ЭС и сохранить ее в файле //​rulebase.CLP//​. Предметную область экспертной системы выбрать по согласованию с преподавателем.
   * Общее количество правил в базе знаний (БЗ) должно быть не менее 25. Количество значений переменных должно выбираться таким образом,​ чтобы БЗ отвечала требованию полноты,​ т.е. содержала правила,​ соответствующие любым сочетаниям значений переменных в левых частях правил. Например,​ если переменная <<​свободное время>>​ имеет 3 значения (<<​отсутствует>>,​ <<​мало>>​ и <<​много>>​),​ а переменная <<​погода>>​ -- 2 значения (<<​плохая>>​ и <<​хорошая>>​),​ то максимальное число правил для определения переменной <<​действие>>​ будет равно 6.   * Общее количество правил в базе знаний (БЗ) должно быть не менее 25. Количество значений переменных должно выбираться таким образом,​ чтобы БЗ отвечала требованию полноты,​ т.е. содержала правила,​ соответствующие любым сочетаниям значений переменных в левых частях правил. Например,​ если переменная <<​свободное время>>​ имеет 3 значения (<<​отсутствует>>,​ <<​мало>>​ и <<​много>>​),​ а переменная <<​погода>>​ -- 2 значения (<<​плохая>>​ и <<​хорошая>>​),​ то максимальное число правил для определения переменной <<​действие>>​ будет равно 6.
Line 114: Line 121:
   * Код программы.   * Код программы.
 ===== Пример выполнения задания ===== ===== Пример выполнения задания =====
-Данная ЭС вырабатывает рекомендации студенту накануне зачета и имеет четыре входные переменные (<<​число дней до зачета>>,​ <<​количество несделанных лабораторных работ (в %)>>, <<​температура на улице>>​ и <<​наличие осадков>>​),​ две промежуточные (<<​свободное время>>​ и <<​погода>>​) и выходную переменную (<<​рекомендуемые действия>>​). Диаграмма зависимости переменных показана на рис. ​ниже, в скобках указаны возможные имена переменных. +Данная ЭС вырабатывает рекомендации студенту накануне зачета и имеет четыре входные переменные (<<​число дней до зачета>>,​ <<​количество несделанных лабораторных работ (в %)>>, <<​температура на улице>>​ и <<​наличие осадков>>​),​ две промежуточные (<<​свободное время>>​ и <<​погода>>​) и выходную переменную (<<​рекомендуемые действия>>​). Диаграмма зависимости переменных показана на рис. ​1, в скобках указаны возможные имена переменных. 
-{{ :​courses:​knowledge_representation_and_artificial_intelligence_systems:​lab1_eg.png | Структура демострационной экспертной системы }}+{{ :​courses:​knowledge_representation_and_artificial_intelligence_systems:​lab1_eg.png?​nolink ​|Рисунок 1 – Структура демострационной экспертной системы}}
 ==== Реализация ЭС в среде CLIPS ==== ==== Реализация ЭС в среде CLIPS ====
 <file text rulebase.CLP>​ <file text rulebase.CLP>​
Line 121: Line 128:
   (initial-fact)   (initial-fact)
 => =>
-  (printout t crlf "¬ведите число дней до зачета (целое значение):​ ")+  (printout t crlf "Введите число дней до зачета (целое значение):​ ")
   (bind ?days (read))   (bind ?days (read))
  
- (if (numberp ?days)  +  ​(if (numberp ?days)  
- then (assert (days ?days)) +    then (assert (days ?days)) 
- else (printout t "¬¬едите число"​ crlf))+    else (printout t "Введите число"​ crlf))
  
- +  ​(printout t crlf "Введите число несделаных лабораторных работ (в %)")
-  ​(printout t crlf "¬ведите число несделанных лабораторных работ (в %) ")+
   (bind ?works (read))   (bind ?works (read))
   (assert (works ?works)))   (assert (works ?works)))
- 
  
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;​ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;​
- 
-;(defrule test 
-; (days ?days) 
-; (works ?works) 
-;=> 
-;(printout t crlf crlf "​ѕ–ќ¬≈– ј"​ crlf) 
-;(assert (freetime "​no"​))) 
  
 (defrule R1 (defrule R1
- (days ?days) +  ​(days ?days) 
- (works ?works) +  (works ?works) 
- (test (and (= ?days 1) (<> ?works 0))) +  (test (and (= ?days 1) (<> ?works 0))) 
 => =>
-(printout t crlf crlf "вободного времени нет"​ crlf) +  ​(printout t crlf crlf "Свободного времени нет!" crlf) 
-(assert (freetime "​no"​)))+  (assert (freetime "​no"​)))
  
 (defrule R2 (defrule R2
- (days ?days) +  ​(days ?days) 
- (works ?works) +  (works ?works) 
- (test (and (= ?days 2) (>= ?works 10))) +  (test (and (= ?days 2) (>= ?works 10))) 
 => =>
-(printout t crlf crlf "вободного времени нет"​ crlf) +  ​(printout t crlf crlf "Свободного времени нет!" crlf) 
-(assert (freetime "​no"​)))+  (assert (freetime "​no"​)))
  
 (defrule R3 (defrule R3
- (days ?days) +  ​(days ?days) 
- (works ?works) +  (works ?works) 
- (test (and (= ?days 2) (< ?works 10))) +  (test (and (= ?days 2) (< ?works 10))) 
 => =>
-(printout t crlf crlf "вободного времени мало"​ crlf) +  ​(printout t crlf crlf "Свободного времени мало!" crlf) 
-(assert (freetime "​a-little"​)))+  (assert (freetime "​a-little"​)))
  
 (defrule R4 (defrule R4
- (days ?days) +  ​(days ?days) 
- (works ?works) +  (works ?works) 
- (test (and (= ?days 3) (> ?works 25))) +  (test (and (= ?days 3) (> ?works 25))) 
 => =>
-(printout t crlf crlf "вободного времени нет"​ crlf) +  ​(printout t crlf crlf "Свободного времени нет!" crlf) 
-(assert (freetime "​no"​)))+  (assert (freetime "​no"​)))
  
 ;​RULE: ​  R5 ;​RULE: ​  R5
courses/knowledge_representation_and_artificial_intelligence_systems/lab1.1563270460.txt.gz · Last modified: 2022/12/10 09:08 (external edit)