15.1. Программа планирования мероприятий
Ниже приведена программа планирования мероприятий, написанная на языке 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))