Relatório Atividade 1
A Figura1.1 mostra o Soar Java Debuger e Visual Soar rodando no ambiente Linux
Figura1.1 - Inicializando Soar e Visual Soar
Relatório Atividade 2
Para criar um aplicativo para a plataforma Soar, pode-se usar qualquer editor de texto. No caso abaixo (Figura2.1) um pequeno "Hello World" foi escrito utilizando o vi.
Figura2.1 - Criação de um Hello World no vi
Após iniciar o Agente e carregar o arquivo, é possível executa-lo para observar-mos a resolução do problema pelo Soar. A Figura2.2 mostra o Soar após a resolução de um problema.
Figura2.2 - Rodando um Hello World no Soar
Nesse caso, o problema resolvido foi muito simples: Caso haja um estado qualquer, escreva "Meu Primeiro Olá Mundo".
É possível observar as fases de execução quando definido o nível de visualização 5 (watch --level 5). Isso será detalhado mais adiante nesse relatório.
O Soar trabalha com memória de trabalho. A memória de trabalho é o mecanismo utilizado pelo Soar para representar o estado atual durante a resolução dos problemas. A organização básica da memória de trabalho é um grafo.
Cada elemento é definido por uma tripla identificador/atributo/valor que dão a forma ao grafo. Essas triplas definem estados e conhecimentos do Soar do ambiente de trabalho. A combinação dessas triplas relacionadas a um mesmo identificador definem um objeto.
Figura2.3 - Visualização de elementos da memória de trabalho em um grafo
Exemplificando o grafo da Figura2.3, o primeiro item abaixo define um elemento na memória de trabalho, e a combinação dos 3 elementos definem um objeto.
O mecanismo de entrada e saída do Soar utiliza a memória de trabalho. Quando por exemplo um sensor externo (ou qualquer outro tipo de elemento) precisa enviar um dado para o Soar, isso é feito mediante a criação de um novo elemento na memória de trabalho.
Relatório Atividade 3
Operadores são utilizados para multiplas decisões. No caso de regras simples, uma determinada regra ditaria todas as ações a serem tomadas, já com operadores, uma regra poderá dizer quais caminhos poderiam ser seguidos para que se possa alcançar a resoluçao do problema, cabendo a árvore de decisão do Soar decidir por qual dentre as possíveis escolhas seguirá.
Figura3.1 - Exemplo de aplicação com operadores
Durante a execução é possível explorar os diversos elementos da memória de trabalho, verificar os identificadores, atributos e valores.
Figura3.2 - Explorando elementos no Soar
Além disso, durante a depuração, é possível também identificar como os operadores propõe as ações e quais foram escolhidas.
Figura3.3 - Visualização das fases de execução do Soar - Input/Propose/Decide/Apply/Output
Conforme dito anteriormente nesse relatório, podemos escrever uma aplicação para o Soar utilizando qualquer editor de texto, porém o Soar disponibiliza uma ferramenta chamada VisualSoar que permite uma melhor experiência para o desenvolvedor. Tendo uma organização em árvore, é possível organizar melhor o código agrupando funcionalidades e arquivos.
Outro ponto positivo é a possibilidade de visualização mais estruturada da memória de trabalho.
Um exemplo de visualização do VisualSoar pode ser visto na Figura3.4.
Figura3.4 - Visual Soar
Relatório Atividade 4
O Soar mantém os elementos da memória de trabalho enquanto ela estiver ligada, direta ou indiretamente, ao estado corrente. Isso significa que, por exemplo, um estado criado para resolver um impasse de uma decisão é removido quando a decisão é resolvida. Os elementos podem ser removidos tambem por meio da interface com sistemas externos, como por exemplo quando um dado de um sensor não é mais válido.
Como o Soar trabalha com regras e operadores, a resolução pela elaboração de estados consiste na determinação de regras que definem os operadores a serem aplicados. A aplicação desses operadores causam a mudança de estado, onde as regras definidas irão propor novos operadores, entrando assim no ciclo do Soar (input/propose/decide/apply/output).
Para que isso funcione, devemos definir o espaço de possibilidades. No caso do nosso problema esse espaço está exemplificado na Figura4.1.
Figura4.1 - Espaço de possibilidades - Estados 5,1 e 0,1 definem nosso objetivo.
Nesse ponto devemos definir o estado inicial e o objetivo para que nosso agente possa resolver o problema. Nessa atividade foi definido o estado 0,0 (os dois jarros vazios) com inicial. O objetivo do problema é conter 1 galão de água no jarro menor, logo nosso objetivo poderá ser os estados 5,1 e 0,1.
Figura4.2 - Inicialização
Durante a execução, o Soar pode enfrentar situações onde mais de um operador foi proposto. O Soar possui uma área de memória de preferência para tomar suas decisões. Dessa maneira, é possível definir algumas preferências como fator de desempate no Soar, como por exemplo Indiferente, Indiferente Numérico, Melhor, Pior, Melhor que, Pior que, Rejeitado, Requerido, Proibido. Um típico exemplo de preferência é na seleção da regra que seta o estado final. Nesse caso deve ser utilizado a preferência Requerido para que em caso de várias regras sugeridas, a que resolve o problema seja escolhida.
Para definição do objetivo, um dos métodos é a elaboração de uma regra que identifica se o estado atual é o desejado, resolvendo o problema. Outro método que pode ser utilizado é a criação de elementos na memória de trabalho e definir regras comparando o estado atual com o valor criado. Essa segunda opção leva algumas vantagens (como dinamismo) que serão estudadas em outro tutorial.
Figura4.3 - Preferencia e Monitoramento
Um outro mecanismo a ser considerado durante o desenvolvimento é o monitoramento dos estados e operadores. Para monitorar os estados e operadores de maneira eficiente, pode se usar regras para imprimir os detalhes de cada operador e os conteúdos de cada estado.
Para evitar com que estados que se anulem ou então que o mesmo estado seja escolhido diversas vezes seguindo o mesmo caminho, é possível definir regras no Soar para controlar sua busca. Um exemplo disso é que no caso da busca cega, o Soar não evita que o Jarro Grande, que acabou de ser preenchido, seja esvaziado, por exemplo. Esse tipo de aplicação acaba fazendo com que a busca pela solução seja mais demorada. Um outro exemplo seria ficar jogando o conteudo do Jarro Grande no Jarro Pequeno e vice e versa. Uma técnica estudada no tutorial 1 consiste em guardar o último estado visitado de modo a impedir que o operador atual retorne ao estado anterior.
O Soar é uma ferramenta poderosa para resolução de problemas. Ele pode assumir diversos comportamentos dependendo da forma com que a aplicação é codificada. Assumindo a forma de um sistema de processamento de regras, ele pode resolver um problema complexo conhecendo apenas as regras que podem ser aplicadas, mesmo quando não se tem conhecimento do problema como um todo, incluindo sua solução (Figura 4.4, Figura4.5 e Figura4.6 mostram como mesmo um problema simples pode ser resolvido com muitas decisões em uma busca cega). Utilizando o controle de busca, o sistema pode ser direcionado o quanto se queira para a solução, tendendo a ser um sistema especialista, porém nessa situação é necessário ter um conhecimento mais detalhado do problema e até mesmo a prévia solução do problema para direcionar as regras de modo que o operador ideal seja sempre o escolhido (Figura4.7 e Figura4.8 mostram como com regras mais elaboradas, é possível direciona-lo a solução do problema de maneira rápida).
Figura4.4 84 Decisões para resolução do problema
Figura4.5 248 Decisões para resolução do problema
Figura4.6 196 Decisões para resolução do problema
Figura4.7 5 Decisões para resolução do problema
Figura4.8 7 Decisões para resolução do problema
Uma opção intermediária para resolução de problemas é a inclusão de regras que seguem o que podemos chamar no mundo real de bom senso. No caso do problema Water Jug, não é necessário conhecer o problema inteiramente e todos os seus estados para definir que regras "inversas" podem ser evitadas para facilitar a resolução do problema, como por exemplo evitar jogar a água de um jarro para o outro em ciclo, ou então evitar ficar enxendo e esvaziando o mesmo jarro em sequência.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer