Это правило разрешает конфликт между
Это правило разрешает конфликт между задачами, одна из которых должна начаться в точно зафиксированное время, а другая уже вставлена в расписание. Для этого вторая задача сдвигается в расписании. Если же в конфликте участвует задача, для которой не оговорено точное время начала, сдвигается та задача, которая имеет более низкий приоритет.
(defrule clash
(declare (salience 100))
(goal (subgoal fix))
?S <- (schedule (task ?M) (start ?M1))
(errand (name ?N)
(earliest ?E1) (latest ?L1)
(duration ?C)) (schedule
(task ?N&"?M)
(start ?Nl&:(and (<= ?M1 ?Nl)
(< ?N1 (+ ?M1 ?C)))))
(errand (name ?N) (duration ?D)
(earliest ?E2) (latest ?L2i:
(< (- ?L2 ?E2) (- ?L1 ?E1)))) =>
(printout t crlf ?M " clashes with " ?N t crlf)
;; ( ?M " конфликтует с " ?N
(modify 7S (start (+t ?N1 ?D))) )
Это правило гласит: "В случае конфликта передвинуть в расписании ту задачу, которая имеет меньшее ограничение". Оно активизируется только в том случае, если текущей является подцель fix. Правила start и finish, которые контролируются подцелями start и finish, остаются без изменений.
Ваша задача — разработать три новых управляющих правила, которые организуют работу правил clash, start и finish.
I) Правило fixstart будет активизироваться в случае, если предложения, сформированные всеми прочими правилами для подцели start, будут нарушать ограничения. Это новое правило выделяет вектор schedule для задачи и присваивает его полю start значение, которое хранится в слоте latest элемента errand.
II) Измените существующее правило unstart таким образом, чтобы оно заменяло подцель в выражении goal с start на fix вместо прежней замены start на finish.
III) Разработайте правило unfix, которое будет заменять подцель в выражении goal с fix на finish.
Затем выполните следующее.
IV) Протестируйте программу и убедитесь, что она справляется с проблемой на наборе исходных данных, установленном в упр. 5.
V) Эвристика, использованная в правиле clash, не может справиться со всеми возможными случаями.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий