You are here

Aula 2 - SOAR: Tutorial 1 (06/03/2015)

Atividade 1: Instalando o SOAR

1) Download do SOAR -OK

2) O tutorial parte 1  (Soar Tutorial Part 1.pdf) tem como objetivo ensinar como criar agentes de software no Soar. Nao é necessário conhecinho do Soar e nem de programação para executar as atividades deste tutorial. Este tutorial contempla:

- Introduzir os princípios operacionais básicos do Soar;

- ensinar executar programas Soar e entender o que eles fazem;

- ensinar a escrever programas em Soar.

Atividade 2: Construindo um Agente SOAR Simples usando Regras

1) Executar SOAR Debugger (./SoarJavaDebugger.sh)

2) Agente SOAR, com o nome "soar1", que pode ser verificado no título da janela.

 

3) Executando o Hello World SOAR

A saída deste programa é a impressão do texto "Hello World" na tela.

hello-world:
If I exist, then write “Hello World” and halt.
Segue abaixo o conteúdo do hello-world-rule.soar:

sp {hello-world
   (state <s> ^type state)
-->
   (write |Hello World|)
   (halt)
}

sp ( Soar Production) : inicia uma regra

{ : caractere que inicia o corpo da regra.
hello-world: nome da regra

(state <s> ^type state): condição da regra

-->: Separador de da parte se (if) e então (then) da regra
(write |Hello World|): ação a ser executa, no caso é escrever Hello World

}: caractere que finaliza o corpo da regra

Passo 1 - File --> Loas source file...:

SoarJavaDebugger.sh

 

Passo 2 - abrir diretório hello-world-rule :

Passo 3 - selecionar hello-world-rule.soar :

 

Passo 4 - após o ok da seleção do arquivo soar :

 

Passo 5 - Neste passo será acionado o botão Run:

 

 

Passo 6 - após o acionamento do botão Run:

4) Utilizando a memória de trabalho (TODO - NÃO FEITO, página 10-11 do tutorial)

Descubra como funciona a memória de trabalho do SOAR, e documente em seu relatório. Descubra, principalmente, como funciona o mecanismo de entrada e saída de dados do SOAR, que será importante depois quando utilizarmos o SOAR em produção.

Working memory contains all of a Soar agent’s dynamic information about its world and its internal
reasoning. It contains sensor data, intermediate calculations, current operators and goals. In Soar, all of
working memory is organized as graph structures in states. Thus, every working memory element is
connected directly or indirectly to a state symbol. For the first agents you will build, there will be a single
state. Below is a simple example of what the structure of working memory might be like if the agent were
representing that there were two blocks, one on top of the other, which is then on a table as shown in the
figure below.

Working memory is actually built of individual elements which are triples of an identifier, an attribute, and
value, and where the value is that node pointed to by the attribute. The value can be either a constant or
an identifier.

A working memory object usually represents something about the world, such as a block, a wall, a piece
of food, or a cell on the board. The individual augmentations represent properties (such as color, size, or
weight), or relations with other objects (such as on top of, behind, or inside).
 

 

Atividade 3: Agentes Simples utilizando Operadores

3.1) Funcionamento do mecanismo de Agentes simples utilizando operadores.(TODO - NÃO FEITO, página 13 do tutorial)

Nesse mecanismo, algumas regras são utilizadas para propor "operadores", que depois vão concorrer para serem selecionadas pelo procedimento de decisão, para que ao final, algum operador seja executado. Investigue como funciona esse mecanismo, e documente em seu relatório.

algumas regras são utilizadas para propor "operadores", que depois vão concorrer para serem selecionadas pelo procedimento de decisão, para que ao final, algum operador seja executado.

 

Regras para selecionar e aplicar operadores

Operadores realizam ações no mundo ou internamente na "mente" de um agente.

--> Operadores Propostos (regras) --> Seleção de Operador (procedimento de decisão) --> Operador de aaplicar (regras) --> retorna para Operadores Propostos (regras)

3.2) Executando o Hello World com operadores

É necessário criar duas regras para utilizar operador:

  1. Uma para propor o operador;
  2. e outra para aplicar o operador.
If I exist, propose the hello-world operator.
Apply*hello-world:
If the hello-world operator is selected, write “Hello World” and halt.

sp {propose*hello-world
   (state <s> ^type state)
-->

   (<s> ^operator <o> +)
   (<o> ^name hello-world)
}
sp {apply*hello-world
   (state <s> ^operator <o>)
   (<o> ^name hello-world)
-->
   (write |Hello World|)
   (halt)
}

Passo 1:

Executar o comando “excise --all" para remover todas as regras da memória e inicializar o Soar ( a outra maneira é criar um novo agente e então destruir o agente criado nas atividades anteriores) .

Carregar o hello-world-operator.soar

 

 

 

Passo 2: configurar o watch level para 5

watch --level 5

 

Passo 3:

 

 

3.2.1 Quais as vantagens que você pode imaginar para o uso de regras com operadores ? Como elas podem ser diferentes das regras convencionais ?

 

3.3) Examinando a Memória de Trabalho

Passo 1:

Entrar com comando "print s1" e seguido por tecla "enter"

Selecionar "print" e "print state"

 

 

Passo 2:

Selecionar aba "operator" para examinar a estrutura "o1"

Entrar com "p o1" seguido de enter

Passo 3:

Examinar I1

 

3.4) Utilizando o Visual Soar

3.4.1) Executar Visual Soar (./VisualSoar.sh)

3.4.2) Vantagens adicionai que o VisualSoar oferece

É recomendado utilizar o VisualSoar porque ele oferece suporte interno para a criação de programas Soar. As principais vantagens estão (TODO continuar ......)

One of the toughest parts of writing Soar code is visualizing the tree-like structure of working memory.
VisualSoar has a structure called the Datamap for describing working memory structure. In some ways, it
is like making type definitions in other languages. To examine the Datamap, right-click on the root of the
tree entitled ‘water-jug’ and click on Open Datamap in the pop-up window. Doing this displays the
hierarchical structure of the working memory of your agent in the Datamap water-jug window. VisualSoar
not only lets you visually construct what memory should look like, it also lets you run tests to make sure
your code follows the proper structure, automatically finding spelling mistakes, misplaced structures, and
so on. You can close the Datamap water-jug window by clicking on the [x] in its top-right corner.
 

Atividade 4: Criando um Agente para o Water Jug Problem

 

4.1) Persistências de WMEs

Depois que uma regra é executada, por quanto tempo o resultado permanece na memória de trabalho ? Como o Soar resolve esse problema, para que os resultados da inferência de uma regra possam ser utilizados em outras regras, sem fazer explodir a memória de trabalho ?

4.2) Elaboração de estado

 

4.3)

 

 

 

 

 

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer