Buscar

Trabalho 03 - Desenvolvimento de Inteligência Artificial de Robôs

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Robots V2
· Introdução
· Noticias
· A idéia do jogo
 · A arena
 · Os robôs
 · O tempo
 · Os comandos
· Como jogar
· Download
· Links úteis
Introdução
As Engenharias em geral, e em particular a Engenharia de Computação,
giram em torno da solução de problemas reais apresentados pelo mercado.
Cabe ao Engenheiro, munido de sua criatividade e de seu conhecimento,
encontrar soluções realizáveis para esses problemas, criando novas
tecnologias caso as ferramentas existentes não lhe sejam suficientes.
Com a intenção de estimular esse espírito nos alunos do curso de Introdução
à Engenharia, o Departamento de Informática (DI), em conjunto com o
Tecgraf/PUC-Rio, desenvolveu um jogo. O jogo simula um ambiente real de
prospecção de petróleo, no qual atuam automatos programados pelo aluno.
Participando desse jogo, o aluno terá um primeiro contato com a Engenharia
de Computação, aprendendo noções de programação, de algorítmos de
busca e de inteligência artificial.
Ao final do curso, será promovido um compeonato entre os autômatos
criados pelos alunos. Os vencedores serão premiados pelo Centro Técnico
Científico (CTC).
Notícias
Versao 1.2! Agora com interface e comandos em Português. Detalhes
aqui.(8 mar 2004)
A idéia do jogo
O jogo apresenta o seguinte cenário: um conjunto de robôs marinhos é
lançado ao mar, a partir de um helicóptero, sobre uma região onde se
acredita haver petróleo. Esses robôs atingem o solo submarino em posições
aleatórias. Duas ou mais companhias competidoras, representadas por
alunos diferentes, lançam robôs semelhantes para competir por poços na
mesma região.
Esses robôs são equipados com diversos sensores que fornecem
constantemente informações como a posição do robô, a pressão subterrânea
no local, o gradiente da pressão no local etc. Além disso, cada robô pode
perfurar o solo e iniciar a prospecção de petróleo em sua posição corrente.
Sabe-se que a produção de petróleo em um local será proporcional à pressão
subterrânea no local. Por isso, os robôs devem encontrar os locais com maior
potencial de produção e iniciar perfurações nesses locais.
Cada time de robôs é controlado por um programa escrito pelo aluno. O
programa controla o robô por meio de um conjunto de comandos
predefinidos. Baseado nas informações provenientes dos sensores, esse
http://www.inf.puc-rio.br/~mascarenhas/robots/
1 of 8 16/12/2014 00:14
programa deve decidir para onde direcionar a robô, quando iniciar a
perfuração de petróleo etc, efetivamente controlando todo o comportamento
do robô.
Vence o jogo a companhia cujos robôs conseguirem produzir mais petróleo
durante um período predeterminado.
A arena
A arena onde competem os robôs consiste de uma região quadrada, sobre a
qual há uma distribuição qualquer de pressão, desconhecida dos robôs. Os
limites extremos da arena funcionam como paredes: os robôs não
conseguem sair da arena. A arena é dividida em pequenas unidades de
espaço, denominadas células, cada célula sendo identificada por suas
coordenadas cartesiandas (x, y), onde x e y são inteiros. Na figura abaixo,
por exemplo, encontra-se ressaltada a célula (5, 7) da arena:
Cada célula têm um valor de pressão associado, variando dentro do intervalo
[0, 1]. Abaixo vemos alguns exemplos distribuições possíveis de pressão na
arena:
Nas figuras acima, pontos claros representam locais de pressão elevada e
pontos escuros representam locais de baixa pressão. Desta forma, os robôs
devem encontrar os locais mais claros da arena e perfurar nesses locais para
maximizar a produção de petróleo. Para isso, os robôs dispõem apenas das
medições realizadas por seus sensores.
http://www.inf.puc-rio.br/~mascarenhas/robots/
2 of 8 16/12/2014 00:14
Os robôs
Cada robô se posiciona sobre uma célula da arena. Desta forma, sua posição
pode ser descrita a cada instante pelas coordenadas (xr, yr) desta célula.
Além disso, o robô está sempre voltado para uma das quatro direções
(Norte, Sul, Leste, Oeste).
Usando a função robo:anda(), o programa de um robô pode instruí-lo a
mover-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:
robo:anda()
Além disso, o programa pode instruir o robô a girar 90o para a direita ou
para a esquerda, com o uso das funções robo:direita() e robo:esquerda(),
repectivamente.
robo:direita()
Os programas responsáveis pelo controle controle dos robô devem ser
escritos pelo aluno usando a linguagem Lua. Essa linguagem foi escolhida
por ser de fácil integração ao ambiente de simulação, bem como por ser uma
linguagem de rápida aprendizagem.
1:
2:
3:
4:
5:
6:
7:
8:
 while 1 do
 for i = 1, random(1, SIZE) do
 if not robo:anda() then
 for i = 1, random(1,9) do robo:esquerda() end
 end
 end
 for i = 1, random(1,9) do robo:esquerda() end
 end
http://www.inf.puc-rio.br/~mascarenhas/robots/
3 of 8 16/12/2014 00:14
Louco
Este primeiro exemplo não faz nada de útil. É um robô que perambula
aleatoriamente pela arena. Entretanto, já mostra alguns dos comandos
entendidos pelo robô: robo:anda() e robo:esquerda(). Outros comandos, como
random() são comandos da linguagem Lua, descritos pelo manual da
linguagem (em inglês).
Além disso, o programa ilustra a estrutura que será seguida pela maioria dos
alunos: um laço executa repetidamente o mesmo conjunto de ações (linhas
2-7).
De modo a decidir para onde se deslocar e onde realizar as perfurações, os
robôs devem usar as duas funções de medição de pressão: robo:pressao() e
robo:deltas(). A função robo:pressao() simplesmente 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 a direção
do robô (direção normal).
Seja P(x,y) o valor da pressão na célula (x,y). Assim, na figura acima, a
função robo:deltas() retornaria os valores dt e dn tais que dt = P(7,8) - P(5,8) e
dn = P(6,7) - P(6,9). Com essas funções, é possível construir um robô útil:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 while 1 do
 dt, dn = robo:deltas()
 if abs(dt) > abs(dn) then
 if dt < 0 then robo:direita() robo:direita() end
 else
 if dn > 0 then robo:direita()
 else robo:esquerda() end
 end
 vai()
 if robo:pressao() > 0.7 then robo:sonda() end
 end
Busca gradiente
Este segundo robô usa as funções robo:deltas(), robo:pressao() e robo:sonda()
para efetivamente encontrar pontos de alta pressão, nos quais inicia a
perfuração. O método usado pelo robô acima é conhecido como busca
gradiente, e pode ser usado como base para vários algorítmos mais
sofisticados. A função abs() é uma função definida pela linguagem Lua que
http://www.inf.puc-rio.br/~mascarenhas/robots/
4 of 8 16/12/2014 00:14
retorna o valor absoluto de um número.
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.
Os comandos
Abaixo segue a lista de todas as funções aceitas pelos robôs, bem como uma
breve descrição de seu funcionamento e o número de unidades de tempo
gastas em sua execução.
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)
robo:direita()
Faz com que o robô vire 90o para a
direita. A operação sempre
completa com sucesso.(Duração: 0.02s)
robo:esquerda()
Faz com que o robô vire 90o para a
esquerda. A operação sempre
completa com sucesso.
(Duração: 0.02s)
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()
Retornar 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)
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)
http://www.inf.puc-rio.br/~mascarenhas/robots/
5 of 8 16/12/2014 00:14
robo:tempo()
Retorna o tempo decorrido em
segundos, desde o inicio da partida.
robo:enviamsg([tipo], mensagem)
Envia uma mensagem para todos os
robos de seu time.
Se o tipo não for especificado, ele
terá o valor "default".
robo:pegamsg()
Tenta retirar uma mensagem da lista
de mensagens do robô.
Ela e um estrutura de modo que:
mensagem.tipo = tipo da mensagem
mensagem.msg = o corpo da
mensagem
Não havendo mensagens na lista, a
função retorna nulo.
Mensagens:
Cada robô tem uma lista de mensagens com limite de 5 mensagens.
Ultrapassando esse limite, a mensagem mais antiga é retirada e subsituida
pela mais recente.
TEMPO
Constante que contém o tempo
limite em segundos para o final do
jogo. (Não há duração)
TAMANHO
Constante que contém o tamanho de
um lado da arena. (Não há duração)
Como jogar
Os comandos foram colocados dentro da interface, por meio de um menu de
contexto. Não é mais necessário o uso da linha de comando.
O Menu de Contexto
http://www.inf.puc-rio.br/~mascarenhas/robots/
6 of 8 16/12/2014 00:14
Por meio dele podemos realizar as ações do programa:
Esse item mostra a caixa de diálogo para
adicionar os times e escolher a arena
Esse item mostra uma caixa para escolha
de um arquivo de definição de arena
(.ARN)
Esse item inicia a simulação. Só está
disponível quando há uma arena e um ou
mais times carregados
Esse item alterna entre os modos 2D e
3D. Como padrão, o modo 3D é o
utilizado. O modo 2D é recomendado para
máquinas sem aceleração por hardware. O
primeiro item do menu de contexto mostra
o modo atual
Esse item alterna entre iniciar os robôs
em posições fixas (os quatro cantos da
arena) ou posições aleatórias. Como
padrão são usadas posições fixas
Esse item fecha o programa
Modo 2D Modo de 3D
O Diálogo de Configuração
http://www.inf.puc-rio.br/~mascarenhas/robots/
7 of 8 16/12/2014 00:14
Neste diálogo coloca-se os nomes dos time,
a cor de seus robôs e seu programa de
inteligência artificial. 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. Para trocar os
robôs será necessário executar o programa
novamente. Os dois times podem usar o
mesmo programa de inteligência artificial.
Download
Pegue aqui o arquivo zip com todos os componentes do jogo:
Última Versão:
Menus e comandos em Português
Robots120.zip(1.909kb)
Links úteis
Site da linguagem Lua:
www.lua.org/portugues.html
Last modified by Fabio Mascarenhas on
Tue Mar 9 2004
http://www.inf.puc-rio.br/~mascarenhas/robots/
8 of 8 16/12/2014 00:14

Continue navegando