Nesta atividade foi proposta a excução do código de um Hello World provido na documentação do SOAR no Soar Debugger e a compreenção do funcionamento da memória de trabalho (working memory) no contexto do SOAR.
1) Execução do código Hello World fornecido
O Soar Debugger permite realizar a execução e depuração de arquivos de código do SOAR. Nesta ativade, foi carregado o código do Hello World implementado apenas com uma regra simples e foi feita sua execução. A seguir o código, sua explicação e a imagem da tela do Soar Debugger após a execução do código:
sp {hello-world | Declaring a Soar Production of name hello-world |
(state <s> ^ type state) | If there exists an identifier with property type with value state, puts this identifier in <s> variable |
--> | then |
(write |Hello World|) | write string Hello World |
(halt) } | Halts agent |
2) A memória de trabalho:
A memória de trabalho do SOAR é uma grande composição de tuplas compostas por identificador, atributo e valor. Esta tupla define que existe uma relação entre o identificador e o valor identificada por um atributo. O valor do atributo pode ser uma constante ou um outro identificador. Através da agregação destas relações se monta a estrutura da memória de trabalho do soar. Este caráter relacional da memória de trabalho favorece sua interpretação através de grafos, onde um identificador é um nó, um atributo uma aresta e o valor um nó que pode ser um identificador ou uma constante.
No exemplo do tutorial, temos uma relação de posicionamento entre objetos (blocos e mesa):
Pode-se perceber que um mesmo identificador pode possuir mais de um atributo com mesmo nome porém valores diferentes. É o caso de S1. Cabe ao programador manter a estrutura da memória de trabalho coerente com o problema em mãos. Neste exemplo, o bloco B1 poderia ter outro atributo ontop com valor T1, por exemplo, mas neste contexto simplista não faz sentido um objeto estar sobre mais de um ao mesmo tempo.
Chamamos uma colação de elementos da memória de trabalho que compartilham um mesmo identificador origem de Objeto. Sendo assim, um objeto pode ser descrito por um conjunto de tuplas (identificador, atributo, valor) com o mesmo identificador. Na figura acima, podemos identificar objetos S1, T1, B1 e B2. A sguir uma imagem de como estas tuplas são representadas na linguagem do SOAR.
Estrutura Inicial
Ao iniciar a execução, o SOAR se encarrega de criar um estado inicial com alguns atributos, conforme a figura a seguir:
Podemos ver que S1, o estado inicial padrão, possui um atributo IO com valor I1. É atravez deste objeto que serão, em projetos mais avançados, feitas leituras de informações externas e envio de informações internas. Estas informações podem ser, por exemplo, informações do mundo recebidas por uma criatura através de seus sensores ou uma ação que a criatura deseja realizar representada por um comando para seu corpo virtual.