Главная arrow книги arrow Копия Глава 11. Основы планирования arrow Алгоритм Graphplan
Алгоритм Graphplan

Expand-Graph, добавляющая три действия, предусловия которых существуют на уровне S0 (т.е. все действия, за исключением PutOn(Spare,Axle)), наряду с сохраняющими действиями для всех литералов в S0. Результаты действий добавляются на уровне S1. Затем функция Expand-Graph отыскивает взаимно исключающие отношения и добавляет их к графу.

Рис. 11.7. Граф планирования для задачи замены колеса после расширения до уровня S2. Взаимно исключающие связи показаны серыми линиями. Показаны только некоторые наиболее важные взаимно исключающие связи, поскольку граф был бы слишком загроможден, если бы были показаны все эти связи. Решение обозначено жирными линиями и жирными контурами прямоугольников

В состоянии S1 литерал At (Spare, Axle) все еще не присутствует, поэтому функция Extract-Solution снова не вызывается. Вызов функции Expand-Graph приводит к получению графа планирования, показанного на рис. 11.7. Теперь, после получения полного комплекта действий, целесообразно рассмотреть некоторые примеры взаимно исключающих отношений и их причин, как показано ниже.

•    Несогласованные результаты. Литерал Remove (Spare, Trunk) является взаимно исключающим по отношению к LeaveOvernight, поскольку один из них имеет своим результатом литерал At (Spare, Ground), а другой — его отрицание.

•    Вмешательство. Литерал Remove {Flat, Axle) является взаимно исключающим по отношению к LeaveOvernight, поскольку один из них имеет своим предусловием At (Flat, Axle), а другой имеет своим результатом его отрицание.

•    Конкурирующие потребности. Литерал PutOn (Spare, Axle) является взаимно исключающим по отношению к Remove (Flat, Axle), поскольку один из них имеет в качестве предусловия литерал At (Flat, Axle), а другой— его отрицание.

•    Несогласованная поддержка. Литерал A t (Spare, Axle) является взаимно исключающим по отношению к At(Flat, Axle) на уровне S2, поскольку единственным способом достижения цели At (Spare, Axle) является выполнение действия PutOn (Spare, Axle), а оно является взаимно исключающим с сохраняющим действием, которое представляет собой единственный способ достижения литерала At(Flat,Axle). Таким образом, взаимно исключающие отношения позволяют обнаруживать непосредственные конфликты, которые становятся следствием попыток поместить два объекта в одно и то же место одновременно.