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:lab3 [2019/07/12 12:21] andrey.suchkov [Содержание отчёта] |
courses:knowledge_representation_and_artificial_intelligence_systems:lab3 [2022/12/10 09:08] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Лабораторная работа №3: Изучение стратегий разрешения конфликтов в продукционных системах ====== | ====== Лабораторная работа №3: Изучение стратегий разрешения конфликтов в продукционных системах ====== | ||
===== Цель работы ===== | ===== Цель работы ===== | ||
- | Изучение стратегий разрешения конфликтов в продукционных системах. | + | Изучение различных стратегий разрешения конфликтов в продукционных системах. |
===== Основные теоретические положения ===== | ===== Основные теоретические положения ===== | ||
При реализации прямого вывода в продукционных базах знаний машина логических выводов сопоставляет левые части (антецеденты) правил с базой данных и помещает правила, антецеденты которых удовлетворяются, в агенду (конфликтное множество). //Агенда// представляет собой список всех правил, условия которых удовлетворяются, но которые еще не были выполнены. Агенда работает аналогично стеку -- правило, которое должно быть выполнено первым является верхним правилом в агенде. Когда правило становится активным (условия в его левой части удовлетворяются), оно помещается в агенду в соответствии со следующими правилами: | При реализации прямого вывода в продукционных базах знаний машина логических выводов сопоставляет левые части (антецеденты) правил с базой данных и помещает правила, антецеденты которых удовлетворяются, в агенду (конфликтное множество). //Агенда// представляет собой список всех правил, условия которых удовлетворяются, но которые еще не были выполнены. Агенда работает аналогично стеку -- правило, которое должно быть выполнено первым является верхним правилом в агенде. Когда правило становится активным (условия в его левой части удовлетворяются), оно помещается в агенду в соответствии со следующими правилами: | ||
Line 30: | Line 30: | ||
**Стратегия <<вширь>>.** Вновь активируемые правила помещаются ниже всех правил с такой же значимостью. Например, пусть факт f-1 активирует правила rule-1 и rule-2, а факт f-2 активирует правила rule-3 и rule-4. Тогда, если f-1 устанавливается раньше, чем f-2, то rule-1 и rule-2 окажутся в агенде выше правил rule-3 и rule-4. Однако, положение правила rule-1 относительно правила rule-2 и правила rule-3 относительно правила rule-4 будет произвольным. | **Стратегия <<вширь>>.** Вновь активируемые правила помещаются ниже всех правил с такой же значимостью. Например, пусть факт f-1 активирует правила rule-1 и rule-2, а факт f-2 активирует правила rule-3 и rule-4. Тогда, если f-1 устанавливается раньше, чем f-2, то rule-1 и rule-2 окажутся в агенде выше правил rule-3 и rule-4. Однако, положение правила rule-1 относительно правила rule-2 и правила rule-3 относительно правила rule-4 будет произвольным. | ||
- | **Стратегия <<простоты>>.** Среди правил одинаковой значимости, вновь активируемые правила помещаются над всеми правилами с равной или большей специфичностью (specificity). Специфичность правила определяется числом сравнений, которые должны быть выполнены в левой части правила. Каждое сравнение с константой или предварительно связанной переменной увеличивает специфичность на единицу. Каждый вызов функции, сделанный из левой части правила в условном элементе с предикатным ограничением (:), ограничением возвращаемым значением (<nowiki>=</nowiki>) или УЭ-проверкой (''test'') увеличивает специфичность на единицу. Булевы функции <<и>>, <<или>>, <<не>> не увеличивают специфичность правила, но их аргументы увеличивают. Вызовы функций, выполняемые из функций не увеличивают специфичность. Например, следующее правило: | + | **Стратегия <<простоты>>.** Среди правил одинаковой значимости, вновь активируемые правила помещаются над всеми правилами с равной или большей специфичностью (specificity). Специфичность правила определяется числом сравнений, которые должны быть выполнены в левой части правила. Каждое сравнение с константой или предварительно связанной переменной увеличивает специфичность на единицу. Каждый вызов функции, сделанный из левой части правила в условном элементе с предикатным ограничением ('':''), ограничением возвращаемым значением (''<nowiki>=</nowiki>'') или УЭ-проверкой (''test'') увеличивает специфичность на единицу. Булевы функции <<и>>, <<или>>, <<не>> не увеличивают специфичность правила, но их аргументы увеличивают. Вызовы функций, выполняемые из функций не увеличивают специфичность. Например, следующее правило: |
<code> | <code> | ||
(defrule example | (defrule example | ||
Line 50: | Line 50: | ||
===== Постановка задачи ===== | ===== Постановка задачи ===== | ||
Исследование процесса выполнения заданного набора правил на заданном множестве фактов при различных стратегиях разрешения конфликтов. | Исследование процесса выполнения заданного набора правил на заданном множестве фактов при различных стратегиях разрешения конфликтов. | ||
- | ==== Варианты заданий ==== | + | |
- | ^ № варианта ^ Набор правил ^ | + | |
- | | 1 | <code> | + | |
- | (a)(b) => (m) [5000] | + | |
- | (a)(c) => (n) [6000] | + | |
- | (b)(c)(d) => (p) [5000] | + | |
- | (a)(d)(c) => (r) [6000] | + | |
- | (m)(n) => (s) [6000] | + | |
- | (n)(p)(r) => (t) [5000] | + | |
- | </code> | | + | |
- | | 2 | <code> | + | |
- | (a)(d)(e) => (m) [5000] | + | |
- | (c)(d) => (p) [5000] | + | |
- | (c)(b)(d) => (r) [6000] | + | |
- | (b)(a) => (n) [6000] | + | |
- | (p)(m) => (t) [6000] | + | |
- | (r)(p)(m) => (s) [5000] | + | |
- | </code> | | + | |
- | | 3 | <code> | + | |
- | (a)(b)(c) => (r) [5000] | + | |
- | (e)(c)(d) => (p) [5000] | + | |
- | (a)(b) => (m) [5000] | + | |
- | (a)(e) => (n) [5000] | + | |
- | (m)(n)(r) => (s) [5000] | + | |
- | (m)(p) => (t) [6000] | + | |
- | </code> | | + | |
- | | 4 | <code> | + | |
- | (e)(d)(a) => (p) [8000] | + | |
- | (b)(d) => (m) [8000] | + | |
- | (a)(c) => (n) [8000] | + | |
- | (a)(d)(b) => (r) [8000] | + | |
- | (m)(p) => (t) [6000] | + | |
- | (a)(n)(r) => (s) [6000] | + | |
- | </code> | | + | |
- | | 5 | <code> | + | |
- | (a)(d)(e) => (p) [6000] | + | |
- | (b)(c) => (m) [7000] | + | |
- | (d)(a) => (n) [7000] | + | |
- | (e)(d)(c) => (r) [6000] | + | |
- | (b)(n) => (s) [7000] | + | |
- | (n)(p)(r) => (t) [7000] | + | |
- | </code> | | + | |
- | | 6 | <code> | + | |
- | (c)(d)(a) => (m) [4000] | + | |
- | (c)(e) => (p) [4000] | + | |
- | (c)(b)(d) => (r) [4000] | + | |
- | (b)(a) => (n) [4000] | + | |
- | (p)(c) => (t) [6000] | + | |
- | (a)(p)(m) => (t) [5000] | + | |
- | </code> | | + | |
- | | 7 | <code> | + | |
- | (b)(c)(d) => (r) [3000] | + | |
- | (a)(b) => (m) [3000] | + | |
- | (e)(c)(d) => (p) [3000] | + | |
- | (a)(e) => (n) [3000] | + | |
- | (m)(e)(r) => (t) [5000] | + | |
- | (m)(b) => (s) [5000] | + | |
- | </code> | | + | |
- | | 8 | <code> | + | |
- | (a)(b)(c) => (r) [2000] | + | |
- | (e)(c)(d) => (p) [2000] | + | |
- | (a)(d) => (m) [3000] | + | |
- | (a)(e) => (n) [3000] | + | |
- | (c)(n)(r) => (t) [4000] | + | |
- | (m)(d) => (s) [5000] | + | |
- | </code> | | + | |
===== Порядок выполнения работы ===== | ===== Порядок выполнения работы ===== | ||
- Cформировать с помощью конструкции ''deffacts'' исходный набор из пяти произвольных фактов (обозначаемых как ''(a)'', ''(b)'', ''<nowiki>(c)</nowiki>'', ''(d)'' и ''(e)''). | - Cформировать с помощью конструкции ''deffacts'' исходный набор из пяти произвольных фактов (обозначаемых как ''(a)'', ''(b)'', ''<nowiki>(c)</nowiki>'', ''(d)'' и ''(e)''). | ||
- | - В соответствии с вариантом задания (табл. 3.1) сформировать набор правил, где ''(n)'', ''(m)'', ''(p)'', ''<nowiki>(r)</nowiki>'', ''(s)'' и ''(t)'' -- некоторые произвольно выбранные факты (в квадратных скобках указана значимость правила). Сохранить подготовленные конструкции в файле lab3.CLP. | + | - В соответствии с вариантом задания сформировать набор правил, где ''(n)'', ''(m)'', ''(p)'', ''<nowiki>(r)</nowiki>'', ''(s)'' и ''(t)'' -- некоторые произвольно выбранные факты (в квадратных скобках указана значимость правила). Сохранить подготовленные конструкции в файле //lab3.CLP//. |
- | - Загрузить среду CLIPS . Активизировать окна <<Facts Window>> и <<Agenda Window>>. С помощью команды Load Constructs меню File (или <<горячей>> комбинации Ctrl-L) загрузить факты и правила из файла lab3.CLP. | + | - Загрузить среду CLIPS . Активизировать окна <<Facts Window>> и <<Agenda Window>>. С помощью команды Load Constructs меню File (или <<горячей>> комбинации ^L) загрузить факты и правила из файла //lab3.CLP//. |
- | - Выполнить начальную установку командой ''(run)'' (<<горячая>> комбинация -- Ctrl-U). Зафиксировать состояние списка фактов и агенды. | + | - Выполнить начальную установку командой ''(reset)'' (<<горячая>> комбинация -- ^E). Зафиксировать состояние списка фактов и агенды. |
- | - Выполнить в пошаговом режиме обработку правил (<<горячая>> комбинация -- Ctrl-T), фиксируя после каждого шага состояние агенды и списка фактов. | + | - Выполнить в пошаговом режиме обработку правил (<<горячая>> комбинация -- ^T), фиксируя после каждого шага состояние агенды и списка фактов. |
- Повторить действия п. 4 и 5 при различных стратегиях разрешения конфликтов. Для изменения стратегий спользовать пункт Options меню Execution. Зафиксировать и объяснить полученные результаты. | - Повторить действия п. 4 и 5 при различных стратегиях разрешения конфликтов. Для изменения стратегий спользовать пункт Options меню Execution. Зафиксировать и объяснить полученные результаты. | ||
+ | ===== Варианты заданий ===== | ||
+ | ^ № варианта ^ Набор правил ^ | ||
+ | | 1 | (a)(b) <nowiki>=></nowiki> (m) [5000] \\ (a)<nowiki>(c)</nowiki> <nowiki>=></nowiki> (n) [6000] \\ (b)<nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> (p) [5000] \\ (a)(d)<nowiki>(c)</nowiki> <nowiki>=></nowiki> <nowiki>(r)</nowiki> [6000] \\ (m)(n) <nowiki>=></nowiki> (s) [6000] \\ (n)(p)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (t) [5000] | | ||
+ | | 2 | (a)(d)(e) <nowiki>=></nowiki> (m) [5000] \\ <nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> (p) [5000] \\ <nowiki>(c)</nowiki>(b)(d) <nowiki>=></nowiki> <nowiki>(r)</nowiki>[6000] \\ (b)(a) <nowiki>=></nowiki> (n) [6000] \\ (p)(m) <nowiki>=></nowiki> (t) [6000] \\ <nowiki>(r)</nowiki>(p)(m) <nowiki>=></nowiki> (s) [5000] | | ||
+ | | 3 | (a)(b)<nowiki>(c)</nowiki> <nowiki>=></nowiki> <nowiki>(r)</nowiki> [5000] \\ (e)<nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> (p) [5000] \\ (a)(b) <nowiki>=></nowiki> (m) [5000] \\ (a)(e) <nowiki>=></nowiki> (n) [5000] \\ (m)(n)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (s) [5000] \\ (m)(p) <nowiki>=></nowiki> (t) [6000] | | ||
+ | | 4 | (e)(d)(a) <nowiki>=></nowiki> (p) [8000] \\ (b)(d) <nowiki>=></nowiki> (m) [8000] \\ (a)<nowiki>(c)</nowiki> <nowiki>=></nowiki> (n) [8000] \\ (a)(d)(b) <nowiki>=></nowiki> <nowiki>(r)</nowiki> [8000] \\ (m)(p) <nowiki>=></nowiki> (t) [6000] \\ (a)(n)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (s) [6000] | | ||
+ | | 5 | (a)(d)(e) <nowiki>=></nowiki> (p) [6000] \\ (b)<nowiki>(c)</nowiki> <nowiki>=></nowiki> (m) [7000] \\ (d)(a) <nowiki>=></nowiki> (n) [7000] \\ (e)(d)<nowiki>(c)</nowiki> <nowiki>=></nowiki> <nowiki>(r)</nowiki> [6000] \\ (b)(n) <nowiki>=></nowiki> (s) [7000] \\ (n)(p)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (t) [7000] | | ||
+ | | 6 | <nowiki>(c)</nowiki>(d)(a) <nowiki>=></nowiki> (m) [4000] \\ <nowiki>(c)</nowiki>(e) <nowiki>=></nowiki> (p) [4000] \\ <nowiki>(c)</nowiki>(b)(d) <nowiki>=></nowiki> <nowiki>(r)</nowiki> [4000] \\ (b)(a) <nowiki>=></nowiki> (n) [4000] \\ (p)<nowiki>(c)</nowiki> <nowiki>=></nowiki> (t) [6000] \\ (a)(p)(m) <nowiki>=></nowiki> (t) [5000] | | ||
+ | | 7 | (b)<nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> <nowiki>(r)</nowiki> [3000] \\ (a)(b) <nowiki>=></nowiki> (m) [3000] \\ (e)<nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> (p) [3000] \\ (a)(e) <nowiki>=></nowiki> (n) [3000] \\ (m)(e)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (t) [5000] \\ (m)(b) <nowiki>=></nowiki> (s) [5000] | | ||
+ | | 8 | (a)(b)<nowiki>(c)</nowiki> <nowiki>=></nowiki> <nowiki>(r)</nowiki> [2000] \\ (e)<nowiki>(c)</nowiki>(d) <nowiki>=></nowiki> (p) [2000] \\ (a)(d) <nowiki>=></nowiki> (m) [3000] \\ (a)(e) <nowiki>=></nowiki> (n) [3000] \\ <nowiki>(c)</nowiki>(n)<nowiki>(r)</nowiki> <nowiki>=></nowiki> (t) [4000] \\ (m)(d) <nowiki>=></nowiki> (s) [5000] | | ||
===== Содержание отчёта ===== | ===== Содержание отчёта ===== | ||
* Цель работы. | * Цель работы. | ||
* Краткое изложение основных теоретических понятий. | * Краткое изложение основных теоретических понятий. | ||
* Постановка задачи с кратким описанием порядка выполнения работы. | * Постановка задачи с кратким описанием порядка выполнения работы. | ||
- | * Демонстрация работы базовых команд CLIPS. | + | * Пошаговая обработка правил, оформленная в виде таблицы для каждой стратегии, с краткими выводами по каждой из них. |
- | * Структура ЭС. | + | |
- | * Демонстрация работы ЭС. | + | |
* Общий вывод по проделанной работе. | * Общий вывод по проделанной работе. | ||
* Код программы. | * Код программы. |