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 14:24]
andrey.suchkov [Headline]
courses:knowledge_representation_and_artificial_intelligence_systems:lab5 [2022/12/10 09:08] (current)
Line 63: Line 63:
 ===== Постановка задачи ===== ===== Постановка задачи =====
 Разработать и отладить на языке CLIPS программу решения задачи планирования постройки башни из блоков с пошаговым отображением плана построения башни. Разработать и отладить на языке CLIPS программу решения задачи планирования постройки башни из блоков с пошаговым отображением плана построения башни.
-==== Варианты заданий ====+ 
 +===== Порядок выполнения работы ===== 
 +  - Разработать программу решения задачи планирования на языке CLIPS, реализующую описанные выше правила,​ в соответствии с вариантом задания,​ указанным в таблице. \\ Исходное состояние должно описываться конструкцией ''​deffacts'',​ содержащей четыре факта, соответствующих блокам в куче. 
 +  - Вывод результатов на экран должен обеспечивать пошаговое отображение плана построения башни. 
 +===== Варианты заданий ​=====
 <note important>​Для каждого блока в таблице через слеш указаны параметры:​ цвет/​размер.</​note> ​ <note important>​Для каждого блока в таблице через слеш указаны параметры:​ цвет/​размер.</​note> ​
 ^  № варианта ​ ^  Блок-1 ​ ^  Блок-2 ​ ^  Блок-3 ​ ^  Блок-4 ​ ^ ^  № варианта ​ ^  Блок-1 ​ ^  Блок-2 ​ ^  Блок-3 ​ ^  Блок-4 ​ ^
Line 74: 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  |
-  - Разработать программу решения задачи планирования на языке CLIPS, ​реализующую описанные выше правила,​ в соответствии с вариантом задания,​ указанным в таблице. \\ Исходное состояние должно описываться конструкцией ''​deffacts'',​ содержащей четыре факта, соответствующих блокам в куче. +
-  - Вывод результатов на экран должен обеспечивать пошаговое отображение плана построения башни.+
 ===== Содержание отчёта ===== ===== Содержание отчёта =====
-===== Пример решения задачи ===== +  * Цель работы. 
-==== Решение задачи в среде 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>​ +
-==== Headline ==== +
-<code batch lab5.BAT> +
-(load lab5.CLP) +
-(reset) +
-(run) +
-</​code>​+
courses/knowledge_representation_and_artificial_intelligence_systems/lab5.1562941483.txt.gz · Last modified: 2022/12/10 09:08 (external edit)