Informática I Aula 21 http://www.ic.uff.br/~bianca/informatica1/ Aula 21-07/11/06 1
Aula de hoje Explicação sobre o trabalho 3 Jogo de prospecção de petróleo por robôs. http://www.inf.puc-rio.br/~mascarenhas/robots/ Data de entrega: 04/12 Data da competição: 05/12 Técnicas de busca local que podem ser úteis para o trabalho. Técnica de inteligência artificial que serve para criar robôs inteligentes Aula 21-07/11/06 2
Cenário do Jogo Robôs marinhos são lançados no mar numa região onde se acredita haver petróleo. Dois times lançam dois robôs cada um para competir por poços na região. Os robôs são ocupados com sensores que fornecem informação sobre: A posição do robô. A pressão subterrânea no local. O gradiente da pressão no local. Cada robô pode perfurar o solo e iniciar a prospecção de petróleo em sua posição corrente. A produção de petróleo em um local será proporcional à pressão subterrânea no local. Cada time de robôs é controlado por um programa escrito pelo aluno. Vence o jogo o time que produzir mais petróleo no tempo determinado. Aula 21-07/11/06 3
A Arena A região onde os robôs competem chamada de arena consiste de uma região quadrada sobre a qual há uma distribuição de pressão. Os limites extremos da arena funcionam como paredes. A arena é dividida em pequenas unidades de espaço denominadas células. Cada célula é representada pelas coordenadas cartesianas (x,y). Aula 21-07/11/06 4
A Arena Cada célula têm um valor de pressão associado, variando dentro do intervalo [0, 1]. A figura ao lado mostra seis exemplos de arenas. Pontos claros representam locais de pressão elevada e pontos escuros representam locais de baixa pressão. Os robôs devem encontrar os locais mais claros da arena e perfurar nesses locais para maximizar a produção de petróleo. Aula 21-07/11/06 5
Os robôs Cada robô se posiciona sobre uma célula da arena. Sua posição pode ser descrita a cada instante pelas coordenadas (x r, y r ) desta célula. O robô está sempre voltado para uma das quatro direções (Norte, Sul, Leste, Oeste). A função robo:anda(), faz com que o robô mova-se para frente na direção para a qual está voltado. A função robo:volta() faz com que o robô mova-se para trás. Além disso, o programa pode instruir o robô a girar 90 o para a direita ou para a esquerda, com o uso das funções robo:direita() e robo:esquerda(). Aula 21-07/11/06 6
robo:anda() Aula 21-07/11/06 7
robo:direita() Aula 21-07/11/06 8
Programação dos robôs Os programas devem ser escritos utilizando a linguagem Lua. Linguagem estruturada criada na PUC nos anos 90. Exemplo de programa: while 1 do robo:anda() for i = 0, random(0,3) do robo:esquerda() end end Esse programa faz o robô perambular aleatoriamente. Um loop executa repetidamente o mesmo conjunto de ações. Aula 21-07/11/06 9
Programação dos robôs De modo a decidir onde realizar as perfurações, os robôs podem usar duas funções: robo:pressao() e robo:deltas(). A função robo:pressao() retorna o valor da pressão na célula em que o robô se encontra. A função robo:deltas() retorna dois valores, que informam como a pressão está variando na direção para a qual o robô está virado (direção tangencial) e na direção perpendicular à direção do robô (direção normal). A função robo:sonda() inicia a perfuração. dt = P(7,8) - P(5,8) dn = P(6,7) - P(6,9) Aula 21-07/11/06 10
O tempo O fator limitante do jogo é o tempo. Todas as ações executadas pelo robô levam um determinado número de unidades de tempo para serem concluídas. Durante essa ação, o programa do robô fica paralisado, aguardando a conclusão de sua ação. Uma partida leva 3 minutos. Aula 21-07/11/06 11
Comandos robo:anda() Desloca o robô uma célula para frente. A função retorna o valor 1 se a ação foi completada com sucesso, ou nil caso algum obstáculo tenha impedido o robô de se deslocar. (Duração: 0.02s) robo:volta() Desloca o robô uma célula para trás. A função retorna o valor 1 se a ação foi completada com sucesso, ou nil caso algum obstáculo tenha impedido o robô de se deslocar. (Duração: 0.02s) Aula 21-07/11/06 12
Comandos robo:direita() Faz com que o robô vire 90 o para a direita. A operação sempre completa com sucesso. (Duração: 0.02s) robo:esquerda() Faz com que o robô vire 90 o para a esquerda. A operação sempre completa com sucesso. (Duração: 0.02s) Aula 21-07/11/06 13
Comandos robo:pressao() Retorna o valor da pressão na célula onde o robô se encontra. O valor da pressão está sempre no intervalo [0,1]. A operação sempre completa com sucesso. (Duração: 0.02s) robo:deltas() Retorna dois valores, dt e dn, onde dt é o gradiente na direção tangencial ao movimento do robô, e dn é o gradiente na direção normal ao movimento do robô. A operação sempre completa com sucesso. (Duração: 0s) Aula 21-07/11/06 14
Comandos robo:posicao() Retorna dois valores, x e y, tal que (x,y) é a a célula onde o robô se encontra. A operação sempre completa com sucesso. (Duração: 0.02s) robo:sonda() Perfura um poço na célula onde se encontra o robô. A função retorna 1 se a perfuração ocorreu com sucesso, ou nil caso haja uma outra perfuração muito próxima. (Duração: 30s) robo:tempo() Retorna o tempo decorrido em segundos, desde o inicio da partida. (Duração: 0s) Aula 21-07/11/06 15
Como jogar O programa principal robots.bat deve ser executado. Aparece uma janela de simulação. Clicando com o botão direito do mouse na janela, aparece um menu. Aula 21-07/11/06 16
Itens do menu Aula 21-07/11/06 17
Visualização Aula 21-07/11/06 18
Diálogo de Configuração Coloca-se os nomes dos time, a cor de seus robôs e seus programas. Escolhe-se também em qual arena será feita a disputa. Após pressionar a tecla OK não há volta, só podendo ser trocada a arena. Aula 21-07/11/06 19
Problemas de otimização O problema de prospeção de robôs encaixa-se numa classe de problemas estudados na inteligência artificial. São os problemas de otimização. Este tipo de problema se caracteriza por: Um espaço de possíveis estados. Ex: arena Uma função de avaliação que indica o quão desejável é aquele estado. Ex: pressão Operadores que permitem a transição entre estados. Ex: anda, volta, esquerda, direita Aula 21-07/11/06 20
Exemplo de espaço de estados Aula 21-07/11/06 21
Problemas de Otimização O ponto mais alto (máximo global) corresponde à solução ótima. Exemplos de problemas que podem ser representados como problemas de otimização: Projeto de circuitos integrados Problemas de roteamento Problemas de escalonamento Aula 21-07/11/06 22
Algoritmos de Busca Local Esses algoritmos representam apenas o estado atual e não vêem além dos vizinhos imediatos do estado. São os melhores para tratar de problemas reais muito complexos, em que não é possível representar todos os estados. Baixo uso de memória. Uma alternativa: busca exaustiva Percorre todos os estados para encontrar o máximo. Só é possível quando o número de estados é pequeno. Outra alternativa: otimização global Exige que a função possa ser representada analiticamente. Usa técnicas de cálculo para determinar o máximo. Aula 21-07/11/06 23
Espaço de estados unidimensional Aula 21-07/11/06 24
Tipos de Busca Local Hill-Climbing = Subida pela encosta Só faz transições que melhoram o estado atual. Simulated Annealing = Têmpera Simulada Pode fazer transições que pioram o estado para depois melhorá-lo. Local Beam Search = Busca em Feixe Local Mantém k estados em vez de um único. Aula 21-07/11/06 25
Subida pela Encosta Guarda apenas o estado atual. É simplesmente um ciclo que move o estado na direção crescente da função de avaliação. Muda o estado para o melhor vizinho. Problemas: Máximos locais Platôs Encostas e picos Aula 21-07/11/06 26
Subida pela Encosta Quando a função é diferenciável, calcula-se o gradiente da função no ponto. O gradiente indica a direção de maior aumento na função de avaliação. Dá-se um passo na direção do gradiente. O tamanho do passo pode ser fixo ou variável. Aula 21-07/11/06 27
Têmpera Simulada Semelhante à subida pela encosta, mas oferece meios para se escapar de máximos locais. Com uma probabilidade e E/T, vai para uma direção aleatória. E é a diferença da função de avaliação entre o estado atual e o estado aleatório. T é a temperatura que vai caindo ao longo do tempo. Aula 21-07/11/06 28