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/08/28 15:17]
andrey.suchkov [Пакетный файл]
courses:knowledge_representation_and_artificial_intelligence_systems:lab5 [2022/12/10 09:08] (current)
Line 87: 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>​ 
  
courses/knowledge_representation_and_artificial_intelligence_systems/lab5.1567005439.txt.gz · Last modified: 2022/12/10 09:08 (external edit)