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
Next revision Both sides next revision
courses:knowledge_representation_and_artificial_intelligence_systems:lab5 [2019/07/19 09:48]
andrey.suchkov [Пакетный файл]
courses:knowledge_representation_and_artificial_intelligence_systems:lab5 [2019/08/28 15:17]
andrey.suchkov [Решение задачи в среде CLIPS]
Line 88: Line 88:
   * Код программы.   * Код программы.
 ===== Пример решения задачи ===== ===== Пример решения задачи =====
-==== Решение задачи в среде 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 run_lab5.BAT>​ +
-(load lab5.CLP) +
-(reset) +
-(run) +
-</​code>​+
courses/knowledge_representation_and_artificial_intelligence_systems/lab5.txt · Last modified: 2022/12/10 09:08 (external edit)