Jacques Robin CIn-UFPE O que é RoboCup? Copa de mundo de futebol para robôs físicos e software multi-agentes (softbots) Competição anual associada a uma conferência internacional de IA, robótica ou sistemas multiagentes Roteiro da apresentação: Motivação e desafios da RoboCup Competições e resultados SoccerServer RoboLog Times do CIn-UFPE Melhores times da RoboCup’99 divisão softbots Motivação e desafios da RoboCup Integrar pesquisa e tecnologia fragmentadas da IA Percepção computacional (visão, integração de sensores) Robótica (controle e integração de ações físicas) Raciocínio, representação do conhecimento e planejamento (reativo e deliberativo) Aprendizagem de máquina Sistemas multi-agentes e IA distribuída (comunicação, cooperação, inteligência coletiva emergente) IA tempo-real Novo teste de Turing para a IA depois do xadrez já que conseguimos tornar os computadores mais inteligentes do que Kasparov, vamos agora tentar eleva-los a um nível de inteligência muito mais alto: o de Zidane ! Histórico 1992: idéia nasce em um workshop japonês de robótica 1993: anuncio da Robot-J-League, que logo globalizase em Robot World Cup Initiative atendendo apelos da comunidade científica internacional 1996: pré-RoboCup em Osaka na International Conference on Inteligent Robotics and Systems 1997: 1a RoboCup em Nagoya no IJCAI’97 1998: 2a RoboCup em Paris no ICMAS’98 durante a Copa do Mundo de futebol humano 1999: 3a RoboCup em Stockholm no IJCAI’99 2000: 4a RoboCup em Melbourne no PRICAI’2000 Competições 4 divisões: Robôs grandes 11 robôs do tamanho de R2D2 em quadra de futebol de salão Robôs pequenos 5 robôs de diâmetro max 18cm em mesa de ping-pong visão global autorizada Robôs com pernas 3 robô-cachorros da Sony hardware padronizado Software multi-agentes (robôs virtuais) Arquitetura cliente-servidor simulando jogo SoccerServer implementa o ambiente 22 clientes implementam os agente jogadores Comunicação entre jogadores apenas através de strings passadas via o SoccerServer Competições: fotos Robô grande: Robôs pequenos: Robôs cachorros: Campeões 1997: Grandes: 5 times, 1. ISI/USC (us) Pequenos: 4 times, 1. CMU (us) Virtuais: 33 times, 1. Humboldt U. (de), 2. Tokyo IT (jp), 3. ISI/USC, 4. CMU 1998 Grandes: 16 times, 1. Freiburg U, (de), 2. Tubligen U. (de) Pequenos: 12 times, 1. CMU, 2. Roborros (au) Virtuais: 34 times, 1. CMU, 2. Humboldt U. 1999 Grandes: 20 times, 1. Sharif (?), 2. ART (?), 3. Freiburg U. Pequenos: 16 times, 1. BigRed (?), 2. FUFighter (?), 3. Lucky Star (?) Cachorros: 9 times, 1. LRP (fr), 2. UNSW (uk), 3. CMU Virtuais: 38 times, 1. CMU (us), 2. Freiburg U. (de), 3. Essex (uk) SoccerServer: arquitetura Arquitetura clientes-servidor implementa simulador multi-agentes Soccer Monitor Time A Time B Client 1 Client 1 UDP/IP Client 11 Soccer Server UDP/IP Client 11 Servidor atualiza: ambiente dos agentes = campo dos jogadores Cliente do SoccerServer = agente = jogador Time = software multi-agentes distribuído em 11 clientes SoccerServer: comunicação Recebe strings dos clientes jogadores codificando suas ações no campo (correr, girar, chutar...) Atualiza seu modelo do ambiente campo as conseqüências das ações escolhidas pelos agentes Manda strings para os clientes jogadores codificando suas percepções no campo atualizado visão da bola, dos outros jogadores, audição de mensagens,... Modelo do campo: bi-dimensional, atualizado cada 100ms Comunicação entre jogadores apenas indireta: ação de falar mandada para o SoccerServer percepção auditiva recebida do SoccerServer SoccerMonitor SoccerServer: propriocepção Parâmetros: senseBody(Time, % momento da propriocepção viewMode(Quality, Width), % compromisso entre largura, % qualidade e freqüência da visão stamina(Stamina, % reserva de energia do jogador % parcialmente: - consumida por cada ação % - reabastecida a cada ciclo Effort) % f(Stamina) = percentual da força desejada % da próxima ação efetivamente disponível Speed, % ~ velocidade do jogador HeadAngle, % ângulo cabeça/corpo actionCounts(Kicks, Dashes, Turns, Says, NeckTurns) % número de ações de cada tipo já executada pelo jogador ) Freqüência: 1 por ciclo SoccerServer: parámetros da visão see(Time, % tempo da visão ObjName, % estrutura identificando objeto visto Distance, % posição relativa do objeto visto em coords Direção, % polares centrado no jogador olhando DistChng, DirChng, % derivadas dessas coordenadas polares BodyDir, % quando objeto visto é um jogador, orientação HeadDir) % do corpo e da cabeça relativamente a direção ObjName = ball | player(Team,Number) | goal({l;r}) | % l = left, r = right line({l|r|t|b}) % t = top, b = bottom flag/1 | % pontos de referência no campo: flag/2 | % com argumentos l,r,t,b, e/ou flag/3). % c = center, p = penalty area, g = goalpoast. SoccerServer: limites da visão Campo: circulo de raio VisibleDistance fixo ao redor do jogador cone centrado no rosto do jogador de ângulo ViewWidth = {180;90;45} escolhido pelo jogado Clareza: diminuí com a distância de perto direção e distância do objeto e se for jogador também cor e número de longe apenas direção do objeto e se for jogador sem cor nem número variação contínua entre os dois influência pela escolha de ViewQuality pelo jogador Confiabilidade: ruído aumenta com distância Freqüência: inversamente proporcional a ViewQuality e ViewWidth SoccerServer: audição Parâmetros: hear(Time, % tempo da audição Direction, Message) % % % % % % angulo da procedência da mensagem auditíva 2 exceções: Direction = self ou referee string da mensagem em linguagem natural exceção: linguagem artificial para mensagens do juiz = kick_off_l | kick_in_l | corner_kick_r | ... Limites: Raio = 50m Freqüência: 1 mensagem de jogador por ciclo caso vários são mandados, apenas o primeiro é ouvido Nenhum limite para mensagens do juiz SoccerServer: ações move(X,Y): posicionar jogador no início do jogo dash(Power): acelerar no eixo com força Power turn(Moment): girar corpo de um angulo dependente de Moment e da velocidade do jogador turnNeck(Angle): girar pescoço relativo ao corpo kick(Power,Dir): chutar na direção Dir com força Power catch(Dir): mergulhar na direção Dir para pegar bola; reservado para goleiros say(Message): mandar string no único canal de comunicação compartilhado pelos 22 jogadores change_view(Angle,Quality): mudar compromisso entre largura, profundidade e freqüência da visão Angle = ângulo do cone de visão, 180, 90 ou 45 Quality = high: direção e distancia de cada objeto no cone de visão low: apenas direção dos mesmos Freqüência diminua automaticamente quando Angle e Quality aumentam SoccerServer: tipo de ambiente inacessível (percepção parcial e ruidosa) não determinístico: execução ruidosa das ações imprevisibilidade das escolhas do agentes adversários não confiabilidade de UDP/IP episódico? (melhor ação depende apenas do estado atual do ambiente e não da sua história?) dinâmico (o jogo é tempo-real, limite de 100ms para raciocinar sem o ambiente mudar) contínuo (parâmetros reais em algumas percepções e ações) ambos cooperativo e antagônico RoboLog Interface de alto nível para usar o SoccerServer a partir de Eclipse Prolog (implementado em C) Estruturado em 4 camada: camada de redes: predicados Prolog isomorfos aos comandos do SoccerServer mas discretizando flux de percepções a ações e assim implementando sincronização cliente/servidor camada de raciocínio qualitativo e trigonometria camada de percepções e ações complexas: predicados de percepção e ação de granularidade maior do que os comando do SoccerServer camada de jogador: código de um agente exemplo com estratégia de jogo simplória base para prototipagem rápido de times RoboLog camada 2: ações e percepções complexas self(Time,X,Y,Dir): posição absoluta instantânea do jogador myside(Side) e goalside(Side): lado do time do jogador e do gol oposto goalie(Team,Nr): número dos goleiros goals(Time,Team,N): placar object(Time,Name,Id, Dist,Dir,DDist,DDir,X,Y,FaceDir): coords relativas e absolutas do um objeto qualquer kick_to(Distance,Dir): chama primitiva kick_to(Power,Dir) várias vezes até a bola estar na distancia Distance RoboLog camada 4: jogador exemplo com habilidades mínimas Procura ver a bola e o gol do adversário Se bola estiver bastante perto para ser dominada: girar para ficar atrás dela na direção do gol se a trajetória bola-gol estiver bloqueada por um jogador tentar driblar jogador lateralmente senão se a bola estiver bastante perto do gol, chutar para o gol senão driblar na direção do gol Senão se a bola estiver abaixo de um certo limiar de distância: girar para ficar orientado na sua direção e acelerar senão voltar para sua posição de base no campo CMUnited bi-campeão do mundo: arquitetura em camadas camada 1: atualização do modelo do ambiente(t) interpretação das percepções recebidas (passivo) ações de percepção e de comunicação (ativo, guiado por objetivos das camadas mais altas) ex,: onde está a bola agora? camada 2: previsão do modelo do ambiente(t+n) ex,: onde estará a bola daqui a 3 ciclos se chutar nela com força F? envolve modelagem do comportamento dos outros camada 3: habilidades técnicas decomposta em sub-camadas ex, driblar adversários envolve saber conduzir a bola camada 4: habilidades táticas individuais decomposta em sub-camadas ex, chutar ou passar? se passar, passar para quem? camada 5: participação em planos de jogadas coletivas jogadas de bola parada impedimento marcação coordenada CMUnited bi-campeão do mundo: tecnologias Representação do conhecimento e raciocínio simbólico regras heurísticas analíticas Aprendizagem de máquina aprendizagem supervisionado conexionista (redes neurais) na camada 3, ex, getToBall simbólico (árvores de decisão) na camada 4, ex, o que fazer com a bola: driblar, passar, chutar para o goal? aprendizagem por reforço simbólico na camada 4, ex, para onde lançar a bola? Ambiente de avaliação e treinamento empírico usando: SoccerServer Coach Client Rastreamento em camada Implementação em C++ Time UMGP (Univeristy of Maryland’s Genetic Programming) Time automaticamente programada usando aprendizagem evolucionista 2 vitórias e 2 derrotas na RoboCup’97 Prêmio da contribuição científica O que é aprendizagem evolucionista? Entrada: sopa primordial de instruções primitivas e construtores critério de seleção natural (fitness measure) operadores de criação de novos indivíduos-programas reprodução, mutação Saída: programa combinando instruções primitivas por meio de construtores melhor indivíduo da ultima geração Processo iterativo: criar geração inicial de combinações (programas) aleatórias organizar torneio entre eles e selecionar os vencedores criar nova geração combinando seus genes (sub-programas) recomeçar até veteranos derrotam novatos Evolução dos times da UMGP Time aleatória (arqueozóico) Futebol de quintal (paleozóico) Evolução dos times da UMGP Aprender a proteger gol (mesozóico) Aprender ocupação racional do território (cenozóico) RoboJornalistas: ISAAC Zeng99 annihilated by CMU99! CMU99 absolutely devastated Zeng99 in a 11-0 rout. CMU99 showed their offensive muster, pressing the attack on Zeng99 and keeping the ball in their half of the field for 86% of the game. With this field dominance, they had an easy time scoring on Zeng99. CMU99 handled the ball well, keeping control of the ball for 74% of the game. Zeng99 had their players close together in this game. Better positioning may have helped them contain the CMU99 offense. CMU99 scored using their dribbling technique for 2 of their goals. CMU99 scored using their passing skills for 8 of their goals. CMU99 scored after stealing the ball from an opponent for 1 of their goals. CMU99 did not keep a good amount of distance between their players. Zeng99 did not keep a good amount of distance between their players. CMU99 showed some good ball control skills. This game summary was produced by ISAAC. Idéias de projetos RoboCup no CIn-UFPE Times do CIn: MaracatuRC00 para RoboCopa Brasil 2000 MaractuRC01 para RoboCup 2001 Divisão Lego Mindstorm Ambiente de Desenvolvimento de SoccerBots: GUI com vasto menu de predicados e classes prontos para testar rapidamente idéias táticas via “cortar e colar” Ambiente de Suporte a Decisão: Data Warehouse de estatísticas de jogos Mineração de dados do data warehouse para descobrir táticas vencedoras Geração de resumos (hiper)textuais dos resultados da mineração de dados Disponibilizado na Web para usuários externos