2015-06-11 7 views
1

Я рассматривал некоторые материалы о представлении плана AI с учетом формата STRIPS и обнаружил, что разные люди, похоже, формулируют одну и ту же проблему по-разному.STRIPS представление обезьяны в лаборатории

Например, в Википедии есть пример относительно обезьяны в лабораторной задаче. Проблема заключается в том, что:

Имеется коробка, которая позволит обезьяне добраться до бананов, свисающих с потолка, если он взбирается на него. Первоначально обезьяна находится на A, бананах в B и коробке на C. Обезьяна и коробка имеют высоту Низкий, но если обезьяна взбирается на ящик, он будет иметь высоту Высокий, то же, что и бананы. Действия, доступные для обезьяны, включают в себя переход из одного места в другое, перетаскивание объекта из одного места в другое, ClimbUp на или CLimbDown из объекта и захват или UnGrasp объекта. При захвате объекта происходит удержание объекта, если обезьяна и объект находятся в одном и том же месте на одной высоте.

Вот план из Википедии (пожалуйста, обратите внимание, что это не соответствует именно этому описанию проблемы, но это та же проблема, это, кажется, не осуществлять Ungrasp, что не важно для обсуждения этого вопроса.):

Wikipedia solution to problem

Сейчас нигде в этом плане не могу видеть, что бананы находятся на уровне (высокий), так что единственный способ это действительно может быть разглашена от плана будет прочитать весь набор действий и выведите оттуда, что обезьяна должна быть на Уровне (высокий), чтобы взаимодействовать с бананами, следовательно, они должны быть на Уровне (высокий).

было бы хорошей идеей, чтобы положить эту информацию в исходном состоянии, и что-то вроде:

мартышки (м) & Бананы (ба) & Box (BX) & Level (низкий) & уровня (высокая) & позиции (А) & Позиции (В) & позиции (С) & В (м, А, низкая) & В (ба, B, высокий) & В (BX, C, низкий)

Это выглядит довольно v erbose, как это, но в то же время, это позволяет читателю понять сценарий только через чтение исходного состояния. Мне также сказали, что мы не должны использовать константы в любом месте STRIPS, поэтому я думал, что объявление A, B и C как Позиций было хорошей идеей.

Является ли это тем, что некоторые люди делают это по-другому (что, по моему мнению, может испортить идею о стандартизированном языке для представления вещей), или это один из способов, которые я представил, не в правильном формате ? Я новичок в STRIPS, поэтому вполне возможно (и, вероятно), что у меня отсутствуют некоторые ключевые моменты.

ответ

1

Это не самая большая википедия. Описание STRIPS является точным, но немного устаревшим.

Как правило, вам не нужно беспокоиться о том, чтобы определить все переменные в исходном состоянии, поскольку переменные определяются доменом (P в четверке в связанной статье). Для интуиции о том, почему у вас есть оператор для MONKEY в вашем начальном состоянии, но вы по-прежнему вводите бесплатную переменную m, которая больше не определена. В итоге у вас проблема с курицей и яйцом, если вы попытаетесь сделать это таким образом, поэтому факты в системе - это просто пропозициональные переменные, которые являются фактически дозорными значениями, которые означают что-то для пользователей системы, а не для самой системы.

Вы правы, что вам нужно определить уровень для каждого элемента в составе исходного состояния, но начальное состояние на примере реально исправить с учетом ограничений, что бананы всегда высоко, коробка всегда низкий, а обезьяна - единственное, что меняет уровень. Я бы, вероятно, изменил пример, чтобы предложение At учитывало рассматриваемый объект вместо использования разных имен предложений для каждого объекта, но это только выбор стиля; семантика такая же.

Операторов в STRIPS, как правило, представляет 3 различных компонентов:

  • предпосылка - каждый переменная в списке предварительных условий должны точно совпадать с соответствующим переменным в текущем состоянии (истины должны быть истинными, falses должен быть falses), но вы игнорируете все другие переменные не явные в предпосылках
  • добавляют эффекты - при выполнении действия, эти эффекты, что переменные, которые добавляются в состоянии
  • Удалять эффекты - при выполнении действия, эти эффекты, которые будут удалены из состояния
  • и иногда четвёртая стоила компонента при рассмотрении вопроса о стоимости оптимальность

Почтовых условия, перечисленных в вашем примере являются объединением эффектов добавления и удаления. Преимущество разделения их придет позже, когда вы входите в удаленные релаксационные абстракции.


В вашем предлагаемом исходном состоянии у вас есть предложения, которые содержат несколько свойств для одного объекта (например, At(bx, C, low)). Обычно этого избегают в пользу наличия предложения для каждого свойства каждого объекта в состоянии. Выполнение этого так делает вас в конечном итоге с большим состоянием, но делает его гораздо более простой, поскольку вам не нужно разлагать переменную состояния, чтобы идентифицировать значение определенного свойства объекта в списке предварительных условий.

+0

Благодарим вас за очень информативный ответ, он дал некоторые вещи, о которых стоит подумать. Я особенно ценю те моменты, о которых вы сказали, что в более сложных ситуациях я хотел бы пойти с конкретной реализацией; всегда хорошо сосредоточиться на хороших соглашениях раньше и использовать их во всех ситуациях, просто для того, чтобы повторно применять концепции. – Stevo