
1.4. «Мир блоков»
В качестве примера использования исчисления предикатов рассмотрим описание «мира блоков» с целью планирования действий робота. «Мир блоков» ограничен множеством одинаковых блоков на поверхности стола и действиями руки робота, который имеет информацию о координатах расположения блоков на столе. Рука робота имеет захват, который может схватить свободный блок, т.е. блок со свободной верхней гранью, и переместить его в любую точку стола или установить на свободный блок.
Состояние мира можно описать следующими предикатами:
-
на_столе(Х) – блок Х находится непосредственно на столе;
-
на(Х,Y) – блок Х находится на верхней грани блока Y;
-
чисто(Х) – верхняя грань блока Х свободна, т.е. блок свободен и может быть захвачен;
-
захват(Х) – захват удерживает блок Х;
-
пусто( ) – захват свободен.
Тогда мир блоков, показанный на рис.1, можно представить конъюнкцией следующих предикатов: на_столе(b), на_столе(c), на_столе(e), на(a,b), на(d,e), чисто(a), чисто(c), чисто(d), пусто( ).
Для состояний мира можно составить отношения, позволяющие проверять их истинность, например:
-
X((Y)на(Y,X)чисто(X)) – если не существует блока Y, находящегося на блоке Х, то блок X свободен;
-
X(захват(X) пусто( )) – если в захвате нет блока, то он свободен.
Команды робота, воздействующие на состояние мира и приводящие к новому состоянию можно описать как операторы:
-
взять(X) – взять со стола блок Х и держать его в захвате, причем
X(взять(Х)(захват(Х)(пусто( )чисто(Х)на_столе(Х));
-
поместить(Х) – поместить в некоторую точку стола блок Х, находящийся в захвате, причем
X(поместить(Х)((пусто( )чисто(Х)на_столе(Х)захват(Х));
-
снять(Х,Y) – снять свободный блок Х, стоящий на блоке Y, причем
(XY)(снять(Х,Y)((чисто(Y)захват(Х))(на(Х,Y)чисто(Х)пусто( )));
-
поставить(Х,Y) – поставить блок Х, находящийся в захвате, на свободный блок Y, причем (XY)(поставить(Х,Y)
((на(Х,Y)чисто(Х)пусто( ))(чисто(Y)захват(Х )))
Правило А(ВС) означает, что из оператора А следует новый предикат В, если условие С истинно. Во всех предикатах предполагается наличие информации о координатах блоков и возможность перемещения руки робота в заданную точку.
Используя операторы для изменения мира блоков, следует учитывать проблему границ, т.е. сформулировать правила, определяющие предикаты, инвариантные к данному оператору. В наиболее компактной форме каждый оператор можно представить виде списков предусловий (П), которым должен удовлетворять мир блоков для применения оператора, дополнений (Д) к описанию состояния мира и удалений (У) из этого описания, которые являются результатом применения данного оператора. Эти списки приведены в таблице 2.
Таблица 2
-
взять(X)
П: пусто( )чисто(Х)на_столе(Х)
Д: захват(Х)
У: пусто( )чисто(Х)на_столе(Х)
поместить(Х)
П: захват(Х)
Д: пусто( )чисто(Х)на_столе(Х)
У: захват(Х)
снять(Х,Y)
П: на(Х,Y)чисто(Х)пусто( )
Д: чисто(Y)захват(Х)
У: на(Х,Y)чисто(Х)пусто( )
поставить(Х,Y)
П: чисто(Y)захват(Х)
Д: на(Х,Y)чисто(Х)пусто( )
У: чисто(Y)захват(Х)
Как видно из таблицы 2, списки добавления и вычеркивания обладают некоторой избыточностью, например, предусловия и удаления, описывая аксиомы границ, дублируют друг друга. Однако преимущество такой избыточности в том, что каждый предикат из описания состояния, который не упоминается в списках П и У, остается истинным в описании нового состояния.
Используя описание мира блоков и правила исчисления предикатов, система управления робота может планировать его действия для выполнения поставленной задачи. Например, переход от состояния 1 к состоянию 2, приведенному на рис.1, может быть выполнен при помощи следующей последовательности операций: снять(a,b), поместить(a), взять(b), поставить(b,c), снять(d,e), поставить(d,a). Однако вопрос автоматического поиска этой последовательности относится уже к проблеме поиска пути в пространстве состояний.
Состояние 1 Состояние 2
Рис.1 – «Мир блоков»