Иллюстрированный самоучитель по введению в экспертные системы

Архитектура систем планирования и метапланирования

Программа планирования мероприятий

Ниже приведена программа планирования мероприятий, написанная на языке CLIPS. При сформировании расписания программа сначала старается как можно раньше назначить для каждого отдельного мероприятия начальный момент выполнения, а затем назначает конечный момент, если в расписании найдено место для мероприятия. Программа расставляет задачи в соответствии с их приоритетами и старается сохранять себе свободу действий как можно дольше. Однако эта программа не способна справиться с ситуацией, которая складывается после неудачно принятого решения, ни с помощью обратного прослеживания, ни с помощью коррекции частичного расписания, из которого развился тупиковый вариант.

;; ШАБЛОНЫ
;; Объект мероприятий.
(deftemplate errand
(field name (type SYMBOL)); имя
;; интервал времени, в течение которого нужно
;; приступить к выполнению мероприятия
;; не раньше (field earliest (type INTEGER) (default 0))
;; не позже
(field latest (type INTEGER) (default 0))
;; продолжительность
(field duration (type INTEGER) (default 0))
;; приоритет
(field priority (type INTEGER) (default 0))
;; включено в расписание (field done (type SYMBOL)
(default no));
)
;; Объект расписания (def template schedule
(field task (type SYMBOL))
;; задача
;; интервал времени, в течение которого нужно
;; выполнить задачу
;; начало
(field start (type INTEGER) (default 0))
;; конец
(field finish (type INTEGER) (default 0))
;; приоритет
(field priority (type INTEGER) (default 0))
;; полностью заполнено
(field status (type SYMBOL) (default no))
)
;; Объект цели. Используется для управления поведением
;; программы, принуждая ее к определенному порядку
;; достижения целей. (def template goal
(field subgoal (type SYMBOL)))
;; ФАКТЫ
(deffacts the-facts (goal (subgoal start))
(errand (name hospital) (earliest 1030)
(latest 1030)
(duration 200) (priority 1)) (errand
(namе doctor) (earliest 1430) (latest 1530)
(duration 200) (priority 1))
(errand (name lunch) (earliest 1130) (latest 1430)
(duration 100) (priority 2))
(errand (name guitar-shop)
(earliest 1000)
(latest 1700) (duration 100)
(priority 3)) (errand (name haircut)
(earliest 900) (latest 1700)
(duration 30) (priority 4))
(errand (name groceries)
(earliest 900) (latest 1800)
(duration 130) (priority 5))
(errand (name dentist)
(earliest 900) (latest 1600)
(duration 100) (priority 2))
;; Попадает ли время начала S в интервал [Т, T+D]?
;; Две задачи не могут начинаться в одно и то же время.
(deffunction overlapl (Is?t?d)
(and (<=?t?s) (<?s (+?t?d))))
;; Попадает ли время завершения S в интервал [Т, T+D]?
;; Для задачи А можно назначить время начала выполнения
;; равным времени завершения задачи В.
(deffunction overlap2 (?s?t?d)
(and (<?t?s) (<?s (+?t?d))))
;; Операция добавления к значению времени интервала,
;; выраженного в формате INTEGER,
(deffunction +t (?X?Y) (bind?T (+?X n))
(if(or (= (-?T 60) ((div (-?T 60) 100) 100))
(= (-?T 70) ((div (-?T 70) 100) 100))
(= (-?T 80) ((div (-?T 80) 100) 100))
(= (-?T 90) ((div (-?T 90) 100) 100)))
then (+?T 40)
telse?T))
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.