courses:knowledge_representation_and_artificial_intelligence_systems:lab2

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:lab2 [2019/07/18 13:42]
andrey.suchkov
courses:knowledge_representation_and_artificial_intelligence_systems:lab2 [2022/12/10 09:08] (current)
Line 1: Line 1:
-====== Лабораторная работа №2: Построение ​экспертных систем ​с использованием неупорядоченных фактов (шаблонов) и различных типов условных элементов в антецедентах правил ======+====== Лабораторная работа №2: Построение ​ЭС с использованием неупорядоченных фактов (шаблонов) и различных типов условных элементов в антецедентах правил ======
 ===== Цель работы ===== ===== Цель работы =====
 Изучение примеров программирования экспертной системы с использованием неупорядоченных фактов (шаблонов) и различных типов условных элементов в антецедентах правил. Изучение примеров программирования экспертной системы с использованием неупорядоченных фактов (шаблонов) и различных типов условных элементов в антецедентах правил.
Line 8: Line 8:
 <​code>​ <​code>​
 (deftemplate <имя шаблона>​ ["<​комментарий>"​] (deftemplate <имя шаблона>​ ["<​комментарий>"​]
-<​определение слота-1 >+  ​<​определение слота-1>​
   ...   ...
-<​определение слота-N>​)+  ​<​определение слота-N>​)
 </​code>​ </​code>​
 Пример шаблона,​ содержащего три одиночных слота представлен ниже: Пример шаблона,​ содержащего три одиночных слота представлен ниже:
Line 23: Line 23:
 (object (name table) (location "​room"​) (weight 15)) (object (name table) (location "​room"​) (weight 15))
 </​code>​ </​code>​
-//​Синтаксис антецедентов правил.//​ Антецедент правила состоит из последовательности условных элементов -- УЭ (conditional elements - CEs), которые должны удовлетворяться,​ чтобы правило было помещено в агенду. В CLIPS используется шесть основных типов условных элементов:​ УЭ на основе образца,​ УЭ-проверка,​ УЭ <<​И>>,​ УЭ <<​ИЛИ>>,​ УЭ <<​НЕ>>,​ УЭ <<​существует>>,​ УЭ <<​для всех>>,​ логические УЭ. Ниже рассмотрены наиболее часто используемые типы условных элементов,​ необходимые для выполнения данной лабораторной работы.+//​Синтаксис антецедентов правил.//​ Антецедент правила состоит из последовательности условных элементов -- УЭ (conditional elements ​-- CEs), которые должны удовлетворяться,​ чтобы правило было помещено в агенду. В CLIPS используется шесть основных типов условных элементов:​ УЭ на основе образца,​ УЭ-проверка,​ УЭ <<​И>>,​ УЭ <<​ИЛИ>>,​ УЭ <<​НЕ>>,​ УЭ <<​существует>>,​ УЭ <<​для всех>>,​ логические УЭ. Ниже рассмотрены наиболее часто используемые типы условных элементов,​ необходимые для выполнения данной лабораторной работы.
  
 **УЭ на основе образца (УЭ-образец)** -- основной и чаще всего используемый тип условного элемента. Он состоит из совокупности ограничений на поля, масок полей (wildcards) и переменных,​ используемых в качестве ограничений для фактов и объектов,​ которые сопоставляются с образцом условного элемента. УЭ-образец удовлетворяется каждой сущностью,​ которая удовлетворяет его ограничениям. Ограничение на поле представляет собой в общем случае совокупность ограничений,​ которые используются для проверки единственного поля или слота факта или объекта. Ограничение может состоять из единственного литерала или из нескольких связанных ограничений. Кроме литеральных ограничений,​ поддерживает три других типа ограничений:​ связанные ограничения (connective constraints),​ предикатные ограничения и ограничения возвращаемым значением. **УЭ на основе образца (УЭ-образец)** -- основной и чаще всего используемый тип условного элемента. Он состоит из совокупности ограничений на поля, масок полей (wildcards) и переменных,​ используемых в качестве ограничений для фактов и объектов,​ которые сопоставляются с образцом условного элемента. УЭ-образец удовлетворяется каждой сущностью,​ которая удовлетворяет его ограничениям. Ограничение на поле представляет собой в общем случае совокупность ограничений,​ которые используются для проверки единственного поля или слота факта или объекта. Ограничение может состоять из единственного литерала или из нескольких связанных ограничений. Кроме литеральных ограничений,​ поддерживает три других типа ограничений:​ связанные ограничения (connective constraints),​ предикатные ограничения и ограничения возвращаемым значением.
Line 130: Line 130:
 </​code>​ </​code>​
 УЭ-проверка удовлетворяется,​ если вызываемая в нем функция возвращает значение,​ отличное от FALSE, и не удовлетворяется в противном случае. Использование данного типа УЭ позволяет,​ в частности,​ проверять любые соотношения между значениями различных полей (слотов) фактов. \\ УЭ-проверка удовлетворяется,​ если вызываемая в нем функция возвращает значение,​ отличное от FALSE, и не удовлетворяется в противном случае. Использование данного типа УЭ позволяет,​ в частности,​ проверять любые соотношения между значениями различных полей (слотов) фактов. \\
-//​Пример.//​ В следующем правиле проверяется,​ что разность между значениями фактов ''​data''​ и ''​value''​ не меньше трех:+//​Пример.//​ В следующем правиле проверяется,​ что ​абсолютная ​разность между значениями фактов ''​data''​ и ''​value''​ не меньше трех:
 <​code>​ <​code>​
 (defrule example-1 (defrule example-1
Line 145: Line 145:
 |  age  |  integer ​ |  17 -- 22  | |  age  |  integer ​ |  17 -- 22  |
 |  year  |  integer ​ |  2 -- 5  | |  year  |  integer ​ |  2 -- 5  |
-|  spec  |  string ​ |  <<​hard>>,​ <<​soft>>,​ <<​ai>> ​ |+|  ​%%spec%%  ​| ​ string ​ |  <<​hard>>,​ <<​soft>>,​ <<​ai>> ​ |
 |  aver_mark ​ |  float  |  в интервале [3; 5]  | |  aver_mark ​ |  float  |  в интервале [3; 5]  |
 ===== Порядок выполнения работы ===== ===== Порядок выполнения работы =====
Line 157: Line 157:
   - Сохранить конструкции ''​deftemplate''​ и ''​deffacts''​ в файле.   - Сохранить конструкции ''​deftemplate''​ и ''​deffacts''​ в файле.
   - Составить в соответствии с вариантом задания правила,​ реализующие описанные ниже функции,​ с использованием заданных типов условных элементов. Правила,​ соответствующие различным пунктам задания,​ следует сохранять в разных файлах,​ чтобы демонстрировать их работу преподавателю по отдельности.   - Составить в соответствии с вариантом задания правила,​ реализующие описанные ниже функции,​ с использованием заданных типов условных элементов. Правила,​ соответствующие различным пунктам задания,​ следует сохранять в разных файлах,​ чтобы демонстрировать их работу преподавателю по отдельности.
-    - Используя только литеральные ограничения,​ составить правила для нахождения в БД фактов,​ удовлетворяющих заданным в таблице ​1 условиям,​ и выдачи соответствующих сообщений. +    - Используя только литеральные ограничения,​ составить правила для нахождения в БД фактов,​ удовлетворяющих заданным в табл1 условиям,​ и выдачи соответствующих сообщений. 
-    - Изменить сформированные в п. //a.// правила путем добавления в антецедент новых условий и изменения выводимых сообщений в соответствии с таблицей ​2. При реализации новых УЭ использовать УЭ-проверки ''​(test-CE)''​. +    - Изменить сформированные в п. //a.// правила путем добавления в антецедент новых условий и изменения выводимых сообщений в соответствии с табл2. При реализации новых УЭ использовать УЭ-проверки ''​(test-CE)''​. 
-    - Изменить сформированные в п. //b.// правила путем добавления в антецеденты предикатных условных элементов для проверки типов значений слотов в соответствии с таблицей ​3. +    - Изменить сформированные в п. //b.// правила путем добавления в антецеденты предикатных условных элементов для проверки типов значений слотов в соответствии с табл3. 
-    - Изменить сформированные в п. //c.// правила путем добавления в антецеденты условных элементов с ограничением по возвращаемому значению. Условия ограничения для различных вариантов приведены в таблице ​4+    - Изменить сформированные в п. //c.// правила путем добавления в антецеденты условных элементов с ограничением по возвращаемому значению. Условия ограничения для различных вариантов приведены в табл4.
-//​Примечание://​ Возраст поступления в университет определяется по формуле:​ $[age] - [year]$. Возраст окончания:​ $[age] + (5 - [year])$.+
 ===== Варианты заданий ===== ===== Варианты заданий =====
  
 ==== Таблица 1 ==== ==== Таблица 1 ====
 ^  № варианта ​ ^  Условие в антецеденте правила ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^ ^  № варианта ​ ^  Условие в антецеденте правила ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^
-|  1  |  Студент 2-го курса ​ |  Студент 2-го курса ''<​name>''​ учится по специализации ''<​spec>''​. ​ |+|  1  |  Студент 2-го курса ​ |  Студент 2-го курса ''<​name>''​ учится по специализации ''​<​nowiki>​<spec></​nowiki>''​. ​ |
 |  2  |  Возраст студента 20 лет ​ |  Студент ''<​name>''​ учится на ''<​year>''​ курсе. ​ | |  2  |  Возраст студента 20 лет ​ |  Студент ''<​name>''​ учится на ''<​year>''​ курсе. ​ |
 |  3  |  Специализация студента <<​ai>> ​ |  Студент ''<​name>''​ учится по специализации "​ai"​ на ''<​year>''​ курсе. ​ | |  3  |  Специализация студента <<​ai>> ​ |  Студент ''<​name>''​ учится по специализации "​ai"​ на ''<​year>''​ курсе. ​ |
Line 177: Line 176:
 ^  № варианта ​ ^  Условие в антецеденте правила ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^ ^  № варианта ​ ^  Условие в антецеденте правила ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^
 |  1  |  Студент 2-го курса, средний балл не ниже 4.5  |  Студент ''<​name>''​ имеет средний балл ''<​aver_mark>''​. ​ | |  1  |  Студент 2-го курса, средний балл не ниже 4.5  |  Студент ''<​name>''​ имеет средний балл ''<​aver_mark>''​. ​ |
-|  2  |  Возраст студента 20 лет, специализации <<​hard>>​ или <<​soft>> ​ |  Студент ''<​name>''​ учится по специализации ''<​spec>''​. ​ |+|  2  |  Возраст студента 20 лет, специализации <<​hard>>​ или <<​soft>> ​ |  Студент ''<​name>''​ учится по специализации ''​<​nowiki>​<spec></​nowiki>''​. ​ |
 |  3  |  Специализация студента <<​ai>>,​ возраст -- не менее 20 лет ​ |  Возраст студента ''<​name>''​ ''<​age>''​ лет. ​ | |  3  |  Специализация студента <<​ai>>,​ возраст -- не менее 20 лет ​ |  Возраст студента ''<​name>''​ ''<​age>''​ лет. ​ |
 |  4  |  Средний балл студента 4.0, курс второй или четвертый ​ |  Студент ''<​name>''​ учится на ''<​year>''​ курсе со средним баллом 4.0.  | |  4  |  Средний балл студента 4.0, курс второй или четвертый ​ |  Студент ''<​name>''​ учится на ''<​year>''​ курсе со средним баллом 4.0.  |
Line 183: Line 182:
 |  6  |  Возраст студента 18 лет, средний балл -- выше 4.0  |  Студент ''<​name>''​ имеет средний балл ''<​aver_mark>''​. ​ | |  6  |  Возраст студента 18 лет, средний балл -- выше 4.0  |  Студент ''<​name>''​ имеет средний балл ''<​aver_mark>''​. ​ |
 |  7  |  Специализация студента <<​soft>>,​ не младше 4-го курса ​ |  Студент ''<​name>''​ учится по специализации "​soft"​ на ''<​year>''​ курсе. ​ | |  7  |  Специализация студента <<​soft>>,​ не младше 4-го курса ​ |  Студент ''<​name>''​ учится по специализации "​soft"​ на ''<​year>''​ курсе. ​ |
-|  8  |  Средний балл студента 4.5, специализация -- не <<​hard>> ​ |  Студенту ''<​name>''​ ''<​age>''​ лет, он учится по специализации ''<​spec>''​. ​ |+|  8  |  Средний балл студента 4.5, специализация -- не <<​hard>> ​ |  Студенту ''<​name>''​ ''<​age>''​ лет, он учится по специализации ''​<​nowiki>​<spec></​nowiki>''​. ​ |
 ==== Таблица 3 ==== ==== Таблица 3 ====
 ^  № варианта ​ ^  Проверяемые значения ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^ ^  № варианта ​ ^  Проверяемые значения ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^
-|  1  |  ''<​year>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<​year>​'' ​-- integer, а в слоте ​''​<​aver_mark>​'' ​-- float. ​ | +|  1  |  ''<​year>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте <​year>​ -- integer, а в слоте <​aver_mark>​ -- float. ​ | 
-|  2  |  ''<​age>'',​ ''<​year>'' ​ |  Студент ''<​name>'':​ типы значений в слотах ​''​<age>'' ​и ''​<​year>​'' ​-- integer. ​ | +|  2  |  ''<​age>'',​ ''<​year>'' ​ |  Студент ''<​name>'':​ типы значений в слотах <age> и <​year>​ -- integer. ​ | 
-|  3  |  ''<​spec>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<​spec>​'' ​-- string, а в слоте ​''​<​aver_mark>​'' ​-- float. ​ | +|  3  |  ''​<​nowiki>​<spec></​nowiki>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​<​nowiki>​<​spec>​</​nowiki> ​-- string, а в слоте <​aver_mark>​ -- float. ​ | 
-|  4  |  ''<​age>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<age>'' ​-- integer, а в слоте ​''​<​aver_mark>​'' ​-- float. ​ | +|  4  |  ''<​age>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте <age> -- integer, а в слоте <​aver_mark>​ -- float. ​ | 
-|  5  |  ''<​year>'',​ ''<​spec>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<​year>​'' ​-- integer, а в слоте ​''​<​spec>​'' ​-- string. ​ | +|  5  |  ''<​year>'',​ ''​<​nowiki>​<spec></​nowiki>'' ​ |  Студент ''<​name>'':​ тип значения в слоте <​year>​ -- integer, а в слоте ​<​nowiki>​<​spec>​</​nowiki> ​-- string. ​ | 
-|  6  |  ''<​age>'',​ ''<​spec>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<age>'' ​-- integer, а в слоте ​''​<​spec>​'' ​-- string. ​ | +|  6  |  ''<​age>'',​ ''​<​nowiki>​<spec></​nowiki>'' ​ |  Студент ''<​name>'':​ тип значения в слоте <age> -- integer, а в слоте ​<​nowiki>​<​spec>​</​nowiki> ​-- string. ​ | 
-|  7  |  ''<​name>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<​name>​'' ​-- symbol, а в слоте ​''​<​aver_mark>​'' ​-- float. ​ | +|  7  |  ''<​name>'',​ ''<​aver_mark>'' ​ |  Студент ''<​name>'':​ тип значения в слоте <​name>​ -- symbol, а в слоте <​aver_mark>​ -- float. ​ | 
-|  8  |  ''<​spec>'',​ ''<​name>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​''​<​spec>​'' ​-- string, а в слоте ​''​<​name>​'' ​-- symbol. ​ |+|  8  |  ''​<​nowiki>​<spec></​nowiki>'',​ ''<​name>'' ​ |  Студент ''<​name>'':​ тип значения в слоте ​<​nowiki>​<​spec>​</​nowiki> ​-- string, а в слоте <​name>​ -- symbol. ​ |
 ==== Таблица 4 ==== ==== Таблица 4 ====
 ^  № варианта ​ ^  Условный элемент с ограничением по возвращаемому значению ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^ ^  № варианта ​ ^  Условный элемент с ограничением по возвращаемому значению ​ ^  Сообщение,​ выводимое в консеквенте правила ​ ^
Line 204: Line 203:
 |  7  |  Оканчивает университет в возрасте старше 22 лет ​ |  Студент ''<​name>''​ оканчивает университет в возрасте старше 22 лет. ​ | |  7  |  Оканчивает университет в возрасте старше 22 лет ​ |  Студент ''<​name>''​ оканчивает университет в возрасте старше 22 лет. ​ |
 |  8  |  Поступил в университет в возрасте 18 лет ​ |  Студент ''<​name>''​ поступил в университет в возрасте 18 лет. ​ | |  8  |  Поступил в университет в возрасте 18 лет ​ |  Студент ''<​name>''​ поступил в университет в возрасте 18 лет. ​ |
 +<note tip>​Возраст поступления в университет определяется по формуле:​ $[age] - [year]$. Возраст окончания:​ $[age] + (5 - [year])$.</​note>​
 ===== Содержание отчёта ===== ===== Содержание отчёта =====
   * Цель работы.   * Цель работы.
Line 212: Line 212:
   * Общий вывод по проделанной работе.   * Общий вывод по проделанной работе.
   * Код программы.   * Код программы.
-===== Пример ​заполнения ​базы данных ​=====+===== Пример ​выполнения ​задания =====
 <code text lab2_1.CLP>​ <code text lab2_1.CLP>​
 (deftemplate student "​Атрибуты студента"​ (deftemplate student "​Атрибуты студента"​
Line 223: Line 223:
 (deffacts students "​База данных студентов"​ (deffacts students "​База данных студентов"​
   (student (name John) (age 20) (year 3) (spec "​hard"​) (aver_mark 4.5))   (student (name John) (age 20) (year 3) (spec "​hard"​) (aver_mark 4.5))
-  (student (name Jane) (age 18) (year 2) (spec "​hard"​) (aver_mark ​3.0)) +  (student (name Jane) (age 18) (year 2) (spec "​hard"​) (aver_mark ​5.0)) 
-  (student (name Jude) (age 22) (year 4) (spec "​soft"​) (aver_mark ​2.5))+  (student (name Jude) (age 22) (year 4) (spec "​soft"​) (aver_mark ​3.8))
   (student (name Toma) (age 21) (year 3) (spec "​ai"​) ​  ​(aver_mark 3.5))   (student (name Toma) (age 21) (year 3) (spec "​ai"​) ​  ​(aver_mark 3.5))
   (student (name Joan) (age 19) (year 4) (spec "​hard"​) (aver_mark 4.5))   (student (name Joan) (age 19) (year 4) (spec "​hard"​) (aver_mark 4.5))
-  (student (name Tuma) (age 23) (year 5) (spec "​soft"​) (aver_mark 3.0))+  (student (name Mark) (age 23) (year 5) (spec "​soft"​) (aver_mark 3.0))
   (student (name Fred) (age 20) (year 2) (spec "​ai"​) ​  ​(aver_mark 4.0))   (student (name Fred) (age 20) (year 2) (spec "​ai"​) ​  ​(aver_mark 4.0))
   (student (name Eric) (age 24) (year 6) (spec "​hard"​) (aver_mark 4.5))   (student (name Eric) (age 24) (year 6) (spec "​hard"​) (aver_mark 4.5))
-  (student (name Mary) (age 20) (year 3) (spec "​ai"​) ​  ​(aver_mark 3.5)) +  (student (name Mary) (age 20) (year 3) (spec "​ai"​) ​  ​(aver_mark 3.6)) 
-  (student (name Beth) (age 24) (year 5) (spec "​soft"​) (aver_mark 3.5))+  (student (name Beth) (age 24) (year 5) (spec "​soft"​) (aver_mark 3.1))
 ) )
  
courses/knowledge_representation_and_artificial_intelligence_systems/lab2.1563457324.txt.gz · Last modified: 2022/12/10 09:08 (external edit)