Реализация поиска в пространстве состояний

Автор работы: Пользователь скрыл имя, 14 Апреля 2013 в 14:34, лабораторная работа

Краткое описание

Цель работы: Реализация в среде CLIPS задачи поиска в пространстве состояний и
анализ ее решения. Одной из классических задач ИИ, рассматриваемых при построении и анализе
алгоритмов поиска является известная головоломка о крестьянине, которому необходимо
переправить на другой берег реки волка, козу и капусту. Он располагает двухместной
лодкой, т.е. может перевозить только по одному объекту. При этом нельзя оставлять на
берегу волка с козой и козу с капустой, т. к. в этом случае будут потери.

Содержимое работы - 1 файл

2.doc

— 636.50 Кб (Скачать файл)

(farmer-location ?fs)

(cabbage-location ?fs))

(opposite-of ?fs ?ns)

=>

(duplicate ?node

(search-depth(+ 1 ?num))

(parent ?node)

(farmer-location ?ns)

(cabbage-location ?ns)

(last-move cabbage)))

 

 

 

(defmodule CONSTRAINS

(import MAIN deftemplate status))

 

(defrule CONSTRAINS::wolf-eats-goat

(declare (auto-focus TRUE))

?node<-(status (farmer-location ?s1)

(wolf-location ?s2&~?s1)

(goat-location ?s2))

=>

(retract ?node))

 

(defrule CONSTRAINS::goat-eats-cabbage

(declare (auto-focus TRUE))

?node<-(status (farmer-location ?s1)

(goat-location ?s2)

(cabbage-location ?s2&~?s1))

=>

(retract ?node))

 

(defrule CONSTRAINS::circular-path

(declare (auto-focus TRUE))

(status (search-depth ?sd1)

(farmer-location ?fs)

(wolf-location ?xs)

(goat-location ?gs)

(cabbage-location ?cs))

?node<-(status (search-depth ?sd2&:(< ?sd1 ?sd2))

(farmer-location ?fs)

(wolf-location ?xs)

(goat-location ?gs)

(cabbage-location ?cs))

=>

(retract ?node))

 

(defmodule SOLUTION

(import MAIN deftemplate status))

 

(deftemplate SOLUTION::moves

(slot id (type FACT-ADDRESS SYMBOL) (allowed-symbols no-parent))

(multislot moves-list (type SYMBOL) (allowed-symbols no-move alone wolf goat cabbage)))

 

(defrule SOLUTION::goal-test

;(declare (auto-focus TRUE))

?node <- (status (parent ?parent)

(farmer-location shore-2)

(wolf-location shore-2)

(goat-location shore-2)

(cabbage-location shore-2)

(last-move ?move))

=>

(retract ?node)

(assert (moves (id ?parent) (moves-list ?move))))

 

(defrule SOLUTION::build-solution

?node <- (status (parent ?parent)

(last-move ?move))

?mv <- (moves (id ?node) (moves-list $?rest))

=>

(modify ?mv (id ?parent) (moves-list ?move ?rest)))

 

(defrule SOLUTION::print-solution

?mv <- (moves (id no-parent) (moves-list no-move $?m))

=>

(retract ?mv)

(printout t t Solution found: t t)

(bind ?length (length ?m))

(bind ?i 1)

(bind ?shore shore-2)

(while (<= ?i ?length)

(bind ?thing (nth ?i ?m))

(if (eq ?shore alone)

then (printout t Farmer moves alone to ?shore . t))

else (printout t Farmer moves with ?thing to ?shore . t)

(if (eq ?shore shore-1)

then (bind ?shore shore-2)

else (bind ?shore shore-1))

(bind ?i (+ 1 ?i))))

 

 

 

 

 

 

Результаты.

 

 

Рис.1 Окно Диалога (при выполнении работы)

 

Рис.2 Результат пошаговой выполненной  работы программы.

 

 

Рис.3 Дерево поиска


Информация о работе Реализация поиска в пространстве состояний