This shows you the differences between two versions of the page.
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 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)) |
) | ) | ||