d9e5a92d

Листинг 5.3. Набор правил для проблемы в системе STRIPS



Листинг 5.3. Набор правил для проблемы в системе STRIPS

;; Шаблоны

;; Цель (goal) представляет собой вектор, состоящий из

;; четырех компонентов:

;; действие, которое нужно выполнить,

;; объект, над которым должно быть выполнено действие;

;; исходное положение;

;; положение, в которое нужно перейти.

(deftemplate goal

(field action (type SYMBOL))

(field object (type SYMBOL))

(field from (type SYMBOL))

(field to (type SYMBOL))


)

;; Вектор 'in' указывает, где находится объект, (deftemplate in

(field object (type SYMBOL))

(field location (type SYMBOL)) )

ФАКТЫ

;;Функция 'deffacts' вводит в рабочую память

;;описание исходного состояния.

;;Функция вызывается при перезапуске системы.

;;Исходное состояние объектов следующее.

;;Робот находится в комнате А,

;;ящик находится в комнате В,

;;цель - вытолкнуть ящик в комнату А.

(deffacts world

(in (object robot)

(location RoomA))

(in (object box)

(location RoomB))

(goal (action push)

(object box)

(from RoomB) (to RoomA))

)

;; ПРАВИЛА

;; Это правило утверждает:

;; Прекратить процесс, когда цель будет достигнута.

(defrule stop

(goal (object ?X) (to ?Y))

(in (object ?X) (location ?Y)) =>

(halt) )

;; Если робот отсутствует в том месте, где находится

;; объект, который нужно передвинуть,

;; переместить туда робот.

(defrule move

(goal (object ?X) (from ?Y))

(in (object ?X) (location ?Y))

?robot-position <- (in (object robot)

(location ?Z&~?Y)) =>

(modify ?robot-position (location ?Y))

;; Если робот и объект не в том помещении,

;; которое указано в цепи,

;; переместить туда робот и объект.

(defrule push

(goal (object ?X) (from ?Y) (to ?Z))

(in (object ?X) (location ?Y))

?object-position <- (in (object ?X) (location ?Y))

?robot-position <- (in (object robot) (location ?Y))

=>

(modify ?robot-position (location ?Z))

(modify ?object-position (location ?Z))

Это законченная программа на языке CLIPS, которую можно запустить на выполнение в среде разработки CLIPS 6.O. В этой программе не нужно было специально предусматривать какие-либо варианты разрешения конфликтных ситуаций, поскольку стратегия, предложенная по умолчанию, всегда обеспечит решение задачи (см. раздел 5.3). Введите в систему текст этой программы и запустите на выполнение:

  • введите (reset),
  • затем введите (run).
С помощью команды watch посмотрите, в каком порядке будут использоваться специфицированные в программе правила. Во врезке 5.2 представлены трассировка выполнения этой программы и краткие пояснения.



Содержание раздела