Скачиваний:
45
Добавлен:
02.04.2015
Размер:
111.1 Кб
Скачать

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, причем

(XY)(снять(Х,Y)((чисто(Y)захват(Х))(на(Х,Y)чисто(Х)пусто( )));

  • поставить(Х,Y) – поставить блок Х, находящийся в захвате, на свободный блок Y, причем (XY)(поставить(Х,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 – «Мир блоков»

Соседние файлы в папке СИИ пособие