SOAR: Tutorial 1
Objetivo
O objetivo desta aula é iniciar o estudo do SOAR, que é uma arquitetura cognitiva desenvolvida na Universidade de Michigan, pela equipe do Prof. John Laird.Serão desenvolvidas as atividades do Tutorial 1.
Relatório das Atividades
Atividade 1: Instalando o SOAR
Foi realizado o download do arquivo SoarTutorial_9.3.2-Linux_64bit.zip e instalado em ${home}/SoarTutorial_9.3.2-Linux_64bit, referenciado no restante deste documento como ${soar_home}.
Atividade 2: Construindo um Agente SOAR Simples usando Regras
Conforme o Tutorial 1, localizado em ${soar_home}/Documentation/Soar Tutorial Part 1.pdf, o arquivo ${soar_home}/Agents/hello-world-rule/hello-world-rule.soar foi carregado e executado no Soar Debugger.
No Soar, todo o conhecimento é representado por regras se-então, também chamadas de produções. O agente hello-world-rule possui apenas uma regra: "Se o agente existe então imprima "Hello World" e pare. O código fonte, carregado no editor VisualSoar é mostrado na Fig. 2.1.
A Fig. 2.2 mostra o Soar Debugger após a execução do agente hello-worl-rule. O procedimento realizado, passo a passo, foi:
- Iniciar o SoarJavaDebugger (um agente padrão soar1 é criado e mostrado no título da interface)
- Menu File; seleção da opção Load source file...; seleção do arquivo ${soar_home}/Agents/hello-world-rule/hello-world-rule.soar
- Execução através do botão Run, parte inferior esquerda da interface
- Verificação das etapas da execução na janela de interação (maior à esquerda)
- Verificação do conteúdo da memória de trabalho nas janelas à direita
|
Fig. 2.1 - hello-world-rule.soar no editor VisualSoar |
|
Fig. 2.2 - hello-world-rule.soar no Soar Debugger |
A Memória de Trabalho do Soar
A memória de trabalho contém todas as informações dinâmicas que um agente no Soar possui sobre o seu mundo e o estado de seu raciocínio interno. Contém informações dos sensores, cálculos intermediários, operações correntes e objetivos e é organizada em grafos de estados. Seus elementos (working memory elements - WME) estão conectados direta ou indiretamente a um símbolo de estado. Há dois tipos de nós: identificadores e constantes. Identificadores (nós não terminais) podem possuir ligações com outros nós enquanto constantes (nós terminais) não. As ligações são chamadas de atributos. A memória de trabalho é constituída de elementos individuais que são triplas com um identificador, um atributo e um valor, onde este último é um nó apontado pelo atributo e pode ser tanto um outro identificador ou quanto uma constante. Um conjunto de WMEs que compartilham o mesmo identificador é chamado um objeto que usualmente representa algo no mundo. Cada WME componente de um objeto é chamado extensão (augmentation) e representa uma propriedade do objeto ou uma relação com outros objetos.
Entrada e Saída no Soar
Atividade 3: Agentes Simples utilizando Operadores
O arquivo ${soar_home}/Agents/hello-world-operator/hello-world-operator.soar (fig 3.1) foi carregado no SoarJavaDebugger (fig 3.2).
|
Fig. 3.1 - hello-world-operator.soar no VisualSoar |
|
Fig. 3.2 - hello-world-operator.soar no Soar Debugger |
Vantagens do uso de operadores
Ação dos operadores
Vantagens do Visual Soar
Atividade 4: Criando um Agente para o Water Jug Problem
Foi criado um agente para resolver o problema dos jarros de água (Water Jug Problem), clássico na área de Inteligência Artificial.
O enunciado do problema é:
"São dados dois jarros. um comporta cinco galões de água e o outro comporta três galões.
Há uma fonte de água ilimitada que pode se usada para encher os jarros.
Também é possível esvaziar os jarros ou transferir o conteúdo de um jarro para o outro.
Não há marcas de níveis intermediários nos jarros.
O objetivo é encher o jarro de três galões com um galão de água."
O código do agente foi desenvolvido no Visual Soar, conforme o Tutorial 1, acrescentando-se passo a passo as regras e operadores necessários:
Iniciação, Elaboração de Estado, Proposição de Operadores, Aplicação de Operadores, Monitoramento de Estados e Operadores, Reconhecimento do Estado Desejado e Controle de Busca.
A Fig. 4.1 mostra os alguns dos códigos e o Datamap do agente completo.
|
Fig. 4.1 - códigos monitor, record e goal-test e Datamap para o agente para resolver o problema dos jarros de água |
A Fig. 4.2 mostra o Soar Debugger após a execução do agente completo (incluindo o controle de busca) para resolver o problema dos jarros de água.
Essa foi o melhor resultado em dezenas de tentativas.
|
Fig. 4.2 - Soar Debugger após a execução do agente completo |
Persistência de WMEs
Elaboração de Estado
Proposição de Operadores
Aplicação de Operadores
Monitoramento de Estados e Operadores
Reconhecimento do Estado Desejado
Controle de Busca
Conclusão
Os experimentos dessa aula introduziram os mecanismos por trás do funcionamento básico do Soar.
Assim como os sistemas especialistas, o Soar utiliza regras Se-então mas difere daqueles pela capacidade de remover automaticamente resultados que não correspondem mais a nenhuma regra ativa.