ACT-r: назначение чанка как значения слота буфера в производственном правиле - PullRequest
0 голосов
/ 13 ноября 2018

Не уверен, что здесь много программистов на act-r, но я не могу найти форум / группу для этого где-либо, поэтому ...

Я пишу программу, которая в качестве чанка определяется как (и цель ниже):

(chunk-type position position-x position-y)

(chunk-type goal state last-pos)

В производстве я извлекаю положение объекта на экране из визуального местоположения, а затем мне нужно создать блок позиции и поместить его в слот последнего пункта моей цели. Вот производственное правило:

(P attend-projectile
   =goal>
      ISA         goal
      state       nil
   =visual-location>
        screen-x                =pos-x
        screen-y                =pos-y
   ?visual>
      state       free
==>
   +visual>
      cmd         move-attention
      screen-pos  =visual-location
   =goal>
      state       attended
      last-pos    (position pos-x screen-x pos-y screen-y)
)

Или что-то в этом роде. Я пробовал различные синтаксисы. Проблема сводится к:

  • Мне нужно создать экземпляр чанка внутри производства (чанк позиции) на основе значений, восстановленных в lhs,
  • затем назначьте этот кусок в ячейку ворот.

Каким-то образом я не могу найти эквивалентный пример в документе ...

EDIT:

Мне нужно, чтобы это был кусок, а не просто сохранение позиции x & y. В конечном итоге этот фрагмент будет расширен для включения идентификатора (который будет получен из визуального местоположения, например, для каждого движущегося объекта будет назначена другая буква). Я буду отслеживать эти объекты во времени. Поскольку я отслеживаю время, другой блок (траектория) будет содержать 3 блока позиции (с их идентификаторами).

Другие производители ожидают найти этот фрагмент (траекторию, когда у меня будет 3 блока позиции) и примут решения на основе этого.

Очевидно, что выше приведен фрагмент кода. Но концептуальная трудность, с которой я столкнулся, - это манипулирование (создание / создание, как это называется в актерской нотации) кусками во время выполнения, по сути.

1 Ответ

0 голосов
/ 19 ноября 2018

Зачем вам нужен еще один кусок?У вас есть блок в буфере визуального местоположения с этой информацией, так почему бы не использовать его:

(P attend-projectile
   =goal>
      ISA         goal
      state       nil
   =visual-location>
   ?visual>
      state       free
==>
   +visual>
      cmd         move-attention
      screen-pos  =visual-location
   =goal>
      state       attended
      last-pos    =visual-location
)  

Конечно, это не отвечает на вопрос, который был задан.

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

(P attend-projectile
   =goal>
      ISA         goal
      state       nil
   =visual-location>
      screen-x =pos-x
      screen-y =pos-y
   ?visual>
      state       free
==>
   +visual>
      cmd         move-attention
      screen-pos  =visual-location
   =goal>
      state       attended
   +imaginal>
      position-x =pos-x
      position-y =pos-y
)  
...