Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экспертные системы (Шаповалов ФИБС БТС 10 семестр) / Материалы / Иллюстрированный самоучитель по экспертным системам.doc
Скачиваний:
32
Добавлен:
04.09.2023
Размер:
6.22 Mб
Скачать

Листинг 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 представлены трассировка выполнения этой программы и краткие пояснения.

5.2. Трассировка программы управления роботом

Представленная ниже карта трассировки будет сформирована при запуске про-граммы в режиме трассировки.

Команда reset обеспечит перезагрузку описания исходного состояния в рабочую память, а команда run запустит программу на выполнение.

В карте трассировки каждая строка, которая начинается с символов ==>, представляет добавление вектора в рабочую память, а строка, которая начинается с символов, <==, — удаление вектора из рабочей памяти. Строки, которые начинаются с 'FIRE', представляют активизацию какого-либо правила. Остальные строки пока ,что игнорируйте.

(reset)

==> f-0 (initial-fact)

=> f-1 (in (object robot) (location RoomA))

==> f-2 (in (object box) (location RoomB))

==> f-3 (goal (action push) {object box)

(from RoomB) (to RoomA)) CLIPS>

(run) FIRE 1 move: f-3, f-2, f-1

<== f-1 (in (object robot) (location RoomA))

==> f-4 (in (object robot) (location RoomB))

FIRE 2 push: f-3, f-2, f-4 <== f_4

(in (object robot) (location RoomB))

==> f-5 (in (object robot) (location RoomA))

<== f-2 (in (object box) (location RoomB))

==> f-6 (in (object box) (location RoomA))

FIRE 3 stop: f-3, f-6

[PRCCODE4] Execution halted during the actions of defrule stop.

CLIPS> (reset)

<== f-0 (initial-fact)

<== f-3 (goal {action push)

(object box) (from RoomB) (to RoomA))

<== f-5 (in (object robot) (location RoomA))

<== f-6 (in (object box) (location RoomA))

CLIPS>

Обратите внимание на то, что выполнение программы останавливается правилом 'stop'.