Страница 2 из 3 Рис. 11.3. Незаконченный план с частичным упорядочением для задачи замены колеса после выбора действий, соответствующих первым двум открытым предусловиям. В прямоугольниках показаны действия, предусловия которых находятся слева, а результаты — справа (результаты не показаны, кроме результатов действия Start) Сплошные линии со стрелками показывают причинные связи, защищающие высказывание, находящееся у острия стрелки Взять предусловие действия PutOn (Spare, Axle). Просто для того чтобы поступить вопреки здравому смыслу, выберем действие LeaveOvernight, а не действие Remove(Flat, Axle). Но обратите внимание на то, что действие LeaveOvernight также имеет результат , который означает, что оно конфликтует со следующей причинной связью: Чтобы разрешить этот конфликт, добавим ограничение упорядочения, которое помещает действие LeaveOvernight перед действием Remove (Spare, Trunk). Возникающий при этом план показан на рис. 11.4. (Предлагаем читателю ответить на вопросы, почему такое дополнение позволяет разрешить конфликт и почему нет другого способа его разрешить?) Рис. 11.4. План, возникающий после выбора LeaveOvernight в качестве действия для достижения предусловия. Чтобы избежать конфликта с причинной связью, исходящей из действия Remove (Spare, Trunk,), которая защищает действие At (Spare, Ground), на LeaveOvernight накладывается ограничение, чтобы это действие происходило перед Remove ( Spare, Trunk), как показано штриховой линией со стрелкой 4. В этот момент единственным оставшимся открытым предусловием является предусловие At {Spare, Trunk) действия Remove(Spare, Trunk). Единственным действием, позволяющим достичь этого предусловия, является существующее действие Start, но причинная связь от Start к Remove {Spare, Trunk) конфликтует с результатом_ действия LeaveOvernight. В данный момент не существует способа разрешить конфликт с действием LeaveOvernight— его нельзя переупорядочить таким образом, чтобы оно находилось перед Start (поскольку ни одно действие не может происходить перед действием Start), и нельзя переупорядочить его так, чтобы оно находилось после Remove (Spare, Trunk) (поскольку уже имеется ограничение, которое упорядочивает его перед Remove {Spare, Trunk)). Поэтому необходимо вернуться к одному из предыдущих состояний, удалить действие LeaveOvernight и две последние причинные связи, возвратившись в состояние, показанное на рис. 11.3. Планировщик фактически доказал, что действие LeaveOvernight не может применяться в качестве способа замены колеса.
|