courses:knowledge_representation_and_artificial_intelligence_systems:lab5

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:lab5 [2019/07/12 19:49]
andrey.suchkov [Порядок выполнения работы]
courses:knowledge_representation_and_artificial_intelligence_systems:lab5 [2022/12/10 09:08] (current)
Line 78: Line 78:
 |  7  |  жёлтый/​12 ​ |  синий/​10 ​ |  зелёный/​8 ​ |  чёрный/​18 ​ | |  7  |  жёлтый/​12 ​ |  синий/​10 ​ |  зелёный/​8 ​ |  чёрный/​18 ​ |
 |  8  |  белый/​16 ​ |  красный/​5 ​ |  коричневый/​15 ​ |  синий/​10 ​ | |  8  |  белый/​16 ​ |  красный/​5 ​ |  коричневый/​15 ​ |  синий/​10 ​ |
 +|  9  |  чёрный/​18 ​ |  жёлтый/​15 ​ |  красный/​20 ​ |  белый/​10 ​ |
 ===== Содержание отчёта ===== ===== Содержание отчёта =====
   * Цель работы.   * Цель работы.
Line 86: Line 87:
   * Общий вывод по проделанной работе.   * Общий вывод по проделанной работе.
   * Код программы.   * Код программы.
-===== Пример решения задачи ===== +
-==== Решение задачи в среде CLIPS ==== +
-<code text lab5.CLP>​ +
-;;//​Шаблон для блока, хранит размер , цвет, положение - в куче, в руке или помещен в башню +
-(deftemplate block +
-  (slot size (type INTEGER)) +
-  (slot place (type SYMBOL)(default heap)) +
-  (slot color (type SYMBOL)) +
-+
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Шаблон для отношения,​ задающего порядок расположения кубиков в башне (для основания значения полей upper,lower не определено +
-(deftemplate on +
-  (slot upper (type SYMBOL)) +
-  (slot upper-size (type INTEGER)) +
-  (slot lower (type SYMBOL)) +
-  (slot lower-size (type INTEGER)) +
-  (slot place (type SYMBOL)(default heap)) +
-+
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Действие,​ выполняемое в настоящий момент времени:​ поиск подходящего кубика или установка найденного на вершину башни +
-(deftemplate goal +
-  (slot current-task (type SYMBOL)) +
-+
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​задаем начальное состояние кучи блоков с кубиками +
-(deffacts bloxx +
-  (block (size 10)(color blue)) +
-  (block (size 20)(color red)) +
-  (block (size 15)(color yellow)) +
-  (block (size 10)(color green)) +
-  (block (size 5)(color brown)) +
-  (block (size 10)(color red)) +
-  (block (size 12)(color yellow)) +
-  (block (size 16)(color white)) +
-  (block (size 18)(color black)) +
-+
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​вывобит на экран информацию о блоке +
-(deffunction print-block(?​color ?size) +
-  (printout t " <​[block] ​ [color] = '"​ ?color "'​ [size] = '"​ ?size "'/>" ​ crlf) +
-);;//​конец deffunction print-block +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​вывобит на экран информацию о наибольшем блоке +
-(deffunction print-biggest-block(?​color ?size)  +
-  (printout t crlf "​Biggest block: ") +
-  (print-block ?color ?size) +
-  (printout t crlf ) +
-);;//​конец deffunction print-biggest-block +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Инициирует процесс поиска решения - устанавливает состояние системы "​поиск кубика"​ +
-(defrule init-system +
- (initial-fact) +
-=> +
- (assert (goal(current-task find))) +
-);;//​конец defrule init-system +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Ищет наибольший блок в куче +
-(defrule find-biggest +
-  ?​goal-ptr ​ <- (goal (current-task find)) +
-  ?block-ptr <- (block (size ?s1)(color ?cl1)(place heap)) +
-  (not +
-    (block +
-      (size ?s2&: (> ?s2 ?s1)) +
-      (place heap) +
-    );;//end block +
-  );;//end (not): нет блока большего по размеру чем данный +
-=> +
-  (modify ?block-ptr (place hand)) +
-  (modify ?goal-ptr (current-task build)) +
-  (print-biggest-block ?cl1 ?​s1);;//​вывести информацию о блоке +
-);;//​конец defrule find-biggest +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​выводит блоки, находящиеся в куче  +
-(defrule show-in-heap +
-  (declare (salience 2000))  +
-  (goal (current-task find));;//​текущ задача - "​поиск"​ +
-  (block +
-    (place heap) +
-    (size  ?sz) +
-    (color ?cl) +
-  );;//end block +
-=> +
-  (printout t "Block in the heap: ") +
-  (print-block ?cl ?​sz);;//​вывести информацию о блоке +
-);;//​конец defrule show-in-heap +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Устанавливает блок в основание башни +
-(defrule set-basis +
-  (declare (salience 1000))  +
-  ?goal-ptr <- (goal (current-task build) );;//​текущ задача - "​строить"​ +
-  ?block-ptr <- (block (place hand)(color ?col)(size ?sz) );;// есть блок в руке +
-  (not +
-    (block +
-      (place tower) +
-    );;//end block +
-  );;//end (not): нет блока, находящегося в башне +
-=> +
-  (modify ?goal-ptr (current-task find) );;// перейти к поиску следующего +
-  (modify ?block-ptr (place tower));;// установить блок в башню +
-  (assert +
-    (on +
-      (place tower) +
-      (upper ?col) +
-      (upper-size ?sz) +
-      (lower nil) +
-      (lower-size 0) +
-    );//end on +
-  );;//​добавить новый факт, соотвествующий помещениб выбранного блока на верх башни ​       +
-);;//​конец defrule set-basis +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​Устанавливает все последующие (после заложенного в основание) блоки +
-(defrule set-next +
-  (declare (salience 1000))  +
-  ?goal-ptr <- (goal (current-task build) );;//​текущ задача - "​строить"​ +
-  ?block-ptr <- (block (place hand) (color ?color-up) (size ?​sz-up));;//​ есть блок в руке +
-  (block (place tower) (color ?color-t) (size ?sz-t) );;//​сохранили цвет некоторого блока +
-  (not (on (place tower)(lower ?​color-t)(lower-size ?​sz-t)));;//​нет такого блока, который находится над данным +
-  (on (place tower)(upper ?​color-t)(upper-size ?sz-t)) +
-  ?on-ptr <- (on +
-               ​(place tower) +
-               ​(upper ?color-t) +
-               ​(upper-size ?sz-t) +
-             ​);;//​выберем блок в башне, на котором нет блока сверху,​ т.е. верхний блок +
-=> +
-  (modify ?goal-ptr (current-task find) );;// перейти к поиску следующего +
-  (modify ?block-ptr (place tower));;// установить блок в башню +
-  (assert +
-    (on +
-      (place tower) +
-      (upper ?​color-up) +
-      (upper-size ?sz-up) +
-      (lower ?color-t) +
-      (lower-size ?sz-t) +
-    );//end on +
-  );;//​добавить новый факт, соотвествующий помещениб выбранного блока на верх башни +
-);;//​конец defrule set-next: +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​останавливает процесс поиска,​ когда в куче ничего не осталось +
-(defrule finish-process +
-  (not (block (place heap)));;//​нет ни одного блока в куче +
-  ?goal-ptr <- ( goal (current-task ?task)) +
-=> +
-  (retract ?​goal-ptr) +
-  (printout t "​Solution found" ​ crlf "Order of the blocks from the lowest to the highest"​ crlf) +
-);;//​конец defrule finish-process +
-;;//​------------------------------------------------------------------------------------------------------- +
-;;//​выводит решение после окончания поиска +
-(defrule show-build-process +
-  (not (goal (current-task ?task) ));;//​цель - показать решение +
-  (on (place tower)(upper ?​color-up)(upper-size ?sz-up) );;//​находим блок на котором ничего не находится сверху +
-  (not (on (place tower)(lower ?​color-up)(lower-size ?sz-up) )) +
-  ?on-ptr <- (on (place tower) (upper ?​color-up)(upper-size ?sz-up) );;//​возьмем адрес отношения,​ соотв. данному блоку +
-=> +
-;;//​(printout t "​Block:​ color = " ?color-up " size = " ?​sz-up ​ crlf)  +
-  (print-block ?color-up ?sz-up) +
-  (retract ?on-ptr );;//​удалим отношение,​ соотв. данному блоку, чтобы продолжить процесс вывода решения +
-);;//​конец defrule +
-</​code>​ +
-==== Пакетный файл ==== +
-<code text lab5.BAT>​ +
-(load lab5.CLP) +
-(reset) +
-(run) +
-</​code>​+
courses/knowledge_representation_and_artificial_intelligence_systems/lab5.1562960947.txt.gz · Last modified: 2022/12/10 09:08 (external edit)