Simulação de Jogos Cooperativos Baseada em
Transcrição
Simulação de Jogos Cooperativos Baseada em
Pontifícia Universidade Católica do Rio de Janeiro Simulação de Jogos Cooperativos Baseada em Decisões de Múltiplos Humanos e Agentes Peter Furtado Dam Relatório Final de Projeto Final de Graduação Centro Técnico Científico CTC Departamento de Informática Curso de Graduação em Bacharelado em Informática Rio de Janeiro, Janeiro de 2010 Peter Furtado Dam Simulação de Jogos Cooperativos Baseada em Decisões de Múltiplos Humanos e Agentes Relatório de Projeto Final, apresentado ao Curso Bacharelado em Informática da PUC‐Rio como requisito parcial para a obtenção do título de Bacharel em Informática. Orientador: Prof. Marcos Vianna Villas Rio de Janeiro, Janeiro de 2010 Resumo Dam, Peter Furtado. Villas, Marcos Vianna. Simulação de Jogos Cooperativos Baseada em Decisões de Múltiplos Humanos e Agentes. Rio de Janeiro, 2009. 21p. Relatório Final de Projeto Final - Departamento de Informática. Pontifícia Universidade Católica do Rio de Janeiro. Neste trabalho é estudada uma forma de simular um jogo cooperativo que envolva as decisões tomadas por diversos humanos e agentes. Para isto foi escolhido, como tema de simulação, o futebol, por se tratar de um jogo em equipe. Além disso, o futebol tem várias abordagens na área de simulação e tem um grande apelo cultural, o que tende a aumentar o interesse de usuários no sistema. Na simulação estão sendo levado em conta diversos atributos (habilidades) dos jogadores, pesando na chance de sucesso de determinadas ações de acordo com as habilidades relacionadas àquela ação. Com isso pretende-se atingir um grau maior de realismo. O produto final do trabalho será um simulador básico que pretende ser usado como serviço por outros sistemas. Palavras-chave: simulação, jogos, futebol, multi agente, multi usuário Abstract Dam, Peter Furtado. Villas, Marcos Vianna. Simulação de Jogos Cooperativos Baseada em Decisões de Múltiplos Humanos e Agentes. Rio de Janeiro, 2009. 21p. Relatório Final de Projeto Final - Departamento de Informática. Pontifícia Universidade Católica do Rio de Janeiro. In this work we study how to simulate a cooperative game involving decisions made by several humans and agents. For this soccer was chosen as the simulation theme because it is a teamwork game. Besides that, soccer has several approaches in the simulation area, besides having great cultural appeal, which tends to increase the interest of users in the system. For the simulation several attributes (skills) are considered, which weigh in the chance of success in certain actions according to the skills related to that action. With this we intend to achieve a higher degree of reality. The work's final product will be a basic simulator that will be used as a service by other systems. Keywords: simulation, games, soccer, multi agent, multi user Índice 1 2 3 4 5 6 7 8 9 Introdução .......................................................................................................................... 1.1 Ambiente Computacional ........................................................................................... 1.2 Adequação como Projeto Final .................................................................................. Estado da Arte .................................................................................................................... 2.1 Qualificação de um jogador através de atributos ...................................................... 2.2 Conjunto de Atributos ............................................................................................... 2.2 Decisões ..................................................................................................................... Objetivos ............................................................................................................................ 3.1 Objetivos Específicos .................................................................................................. 3.2 Usuários ..................................................................................................................... 3.3 Avanço em relação ao estado da arte ........................................................................ Atividades Realizadas ........................................................................................................ 4.1 Estudos preliminares .................................................................................................. 4.2 Estudos conceituais e de Tecnologia ........................................................................ 4.3 Testes e protótipos para aprendizado e demonstração ............................................ 4.4 Método ...................................................................................................................... Projeto e Especificação do Sistema .................................................................................. 5.1 Arquitetura ...................................................................................................... 5.2 Motor .................................................................................................................... 5.3 Decisões .................................................................................................................. 5.4 Interação Humana .................................................................................................... 5.5 Saída ......................................................................................................................... 5.6 Casos de Uso ............................................................................................................ 5.7 Diagramas de Classes ............................................................................................... 5.8 Diagramas de Seqüência .......................................................................................... Implementação e Avaliação ............................................................................................... 6.1 Ferramentas auxiliares desenvolvidas ...................................................................... 6.2 Comentários sobre implementação ........................................................................... Considerações Finais ....................................................................................................... 7.1 Aprendizagem ............................................................................................................ 7.2 O que faria de diferente ............................................................................................. 7.3 Trabalhos futuros ....................................................................................................... Referências Bibliográficas .................................................................................................. Anexos .............................................................................................................................. 1 3 3 4 4 9 10 12 12 12 13 14 14 14 14 15 17 17 19 22 24 25 26 29 35 36 37 38 40 40 40 40 43 45 SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 1. Introdução A simulação é uma área da computação que chama bastante atenção, pois existem vários estudos nesta área e, quando é bem feita, impressiona pelo grau de realismo que pode atingir, fazendo com que os usuários se envolvam profundamente com a experiência proporcionada. A sua implementação quase sempre envolve muitas fórmulas e contas, além de algoritmos complexos para que atinja esse maior grau de realismo. Em alguns casos a simulação se mistura com sistemas de tomada de decisão, principalmente quando é uma simulação que, em sua natureza, depende de vários agentes. Isso é bem comum em jogos atualmente, principalmente nos que envolvem equipes. Nem sempre toda a equipe de um jogo é composta por pessoas reais, então o sistema precisa ter um sistema de inteligência artificial capaz de preencher esses lugares, garantindo que essa equipe possa ainda ser completamente funcional. Uma tendência que vem se apresentando é o surgimento de jogos para múltiplos jogadores. Portanto, além do sistema ser capaz de interpretar as informações de decisões tomadas pelo próprio sistema, precisa ter um mecanismo que gerencie vários usuários tomando as suas próprias decisões independentes. Este mecanismo capturará todas as informações e as usará para fazer os cálculos necessários da sua simulação. O futebol é um tema bastante interessante e explorado em alguns aspectos na simulação. É um tema clássico para estudos de sistemas multi-agentes por ser, segundo Moemeng (2004), um problema distribuído de ambiente colaborativo e competitivo. É colaborativo porque envolve um conjunto de agentes que buscam obter êxito em uma tarefa através da colaboração entre si, e é competitivo porque existe um outro conjunto de agentes rivais, onde somente um destes conjuntos pode sair vitorioso. O conjunto de regras é relativamente bem conhecido pela maioria das pessoas e envolve um apelo emocional geralmente maior do que outras possíveis simulações. Em cima desta simulação, é possível criar um conceito de comunidade, onde pessoas participam da simulação através de uma representação virtual. Uma pessoa na vida real pode ser representada por um personagem no ambiente virtual, e, através deste, participa efetivamente tomando decisões por ele a fim de influenciar o resultado da simulação. Trata-se, então, de um sistema de simulação ‐ 1 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 de ambiente futebolístico virtual, onde os personagens (agentes) desta simulação são inúmeros humanos e computadores. Os personagens se reunirão em equipes, com a intenção de atingirem o sucesso pessoal, mas que dependerá necessariamente do sucesso coletivo. No conjunto de jogos eletrônicos de futebol que existem hoje é possível destacar alguns tipos de simulação. Alguns permitem que o usuário desenvolva um personagem e tenha uma carreira, outros se baseiam na equipe inteira, onde o usuário não tem definido um personagem fixo. Mas nenhum destes simuladores possui como ponto chave o desenvolvimento das habilidades de um personagem e na subsequente interação feita pelo usuário interpretando seu personagem com o sistema. Este projeto tem como objetivo a simulação de partidas de futebol, onde múltiplos usuários e jogadores controlados pela máquina (com o apoio de técnicas de inteligência artificial) tomarão decisões para cada ação executada por seus personagens. As decisões dos jogadores, aliado às habilidades que desenvolveram para seus personagens, contribuirão para que a sua equipe seja vitoriosa ao fim da simulação de uma partida. Roger Caillois (1961, apud Piccolo, G. M.) classificou os principais elementos que constituem os jogos humanos, enumerando quatro elementos: agôn, alea, mimesis e ilinx. Agôn são os jogos dominados fundamentalmente por atividades competitivas, onde o sucesso depende de habilidades previamente adquiridas. Os esportes são exemplos clássicos de agôn. Alea são, em oposição a agôn, jogos de "sorte", onde o jogador atua passivamente. Ele não faz uso de habilidades previamente adquiridas. Mimesis são jogos onde os participantes adotam papéis de determinados personagens, apropriando-se de uma outra realidade. Um exemplo claro de mimesis são os jogos RPG (Role Playing Game). Ilinx são jogos onde o prazer se dá pela perda de percepção do corpo através da busca por vertigem. Busca-se atingir uma espécie de afastamento súbito da realidade. Essas definições de Caillois podem ser reconhecidas neste trabalho, com exceção da Ilinx. O agôn está presente pois um jogador de futebol tem mais sucesso que outro principalmente pela habilidade que adquire no jogo, mas também depende de um fator externo, que é a sorte, fazendo-se presente também a alea. O mimesis é o outro elemento importantíssimo para este trabalho, pois o usuário do ‐ 2 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 sistema necessariamente adotará o papel de um personagem, que será o jogador, técnico ou presidente que o representa no jogo. O ponto principal do jogo é o agôn, pois o sucesso dos participantes depende de experiência e habilidades previamente adquiridas. Por isso é importante quantificar essas habilidades para que cálculos possam ser feitos determinando o sucesso ou falha de determinada atividade. Diversos jogos utilizam estes conceitos para fazer simulações esportivas, mas nenhum permite que uma pessoa interprete um único jogador ao mesmo tempo em que outras pessoas interpretem outros jogadores. 1.1 - Ambiente Computacional O sistema foi desenvolvido em Java por vários motivos. Um ponto importante que pesou na escolha por Java é a facilidade de transformar um código de aplicação "desktop" em um código web. Com isso espera-se que seja mais fácil futuramente criar um web service utilizando o código desenvolvido. Outro fator é a gratuidade dos ambientes de desenvolvimento e produção do Java. 1.2 - Adequação como Projeto Final A criação deste sistema leva em conta diversas disciplinas aprendidas durante a graduação. Todas as cadeiras de programação têm papel fundamental, mas vale a pena ressaltar Programação Distribuída e Concorrente, Programação Orientada a Objetos e Programação para a Web, que têm aplicação indiscutível neste projeto. Há também a aplicação de inteligência artificial nas decisões que o simulador precisará tomar. Também existem diversos conceitos aprendidos durante as cadeiras de modelagem de sistemas e programação orientada a objetos, com potencial aplicação de diversos padrões de projeto. No escopo do projeto não há previsão de utilização de banco de dados, pois os dados estarão persistidos em outro sistema que enviará os dados para o simulador e receberá o resultado de volta. Apesar disso, o simulador precisará ser desenvolvido levando em conta que os sistemas externos a ele persistirão os dados, por isso há uma necessidade de estruturar os dados de forma coerente, e, para isto, é importante ter um conhecimento básico sobre banco de dados relacionais. ‐ 3 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 2. Estado da Arte Na seção anterior abordei os tipos de simulação que dizem respeito a este trabalho. Existem vários trabalhos que também abordam uma ou outra simulação, e quase todos são jogos. Existe um gênero de jogo chamado “fantasy football” que aborda uma simulação de partida de futebol. Em quase todos estes jogos o usuário é um gerente, ou técnico, de um clube e a simulação se dá somente no momento das partidas. A diferença é que não existe intervenção humana durante a simulação, ou seja, todas as ações dos jogadores são decididas pela inteligência artificial do jogo. Basicamente a simulação recebe uma entrada de informações, definidas pelo usuário, e faz um cálculo para gerar o resultado final. Alguns fazem cálculos para apenas o resultado, outros fazem a simulação completa, jogada por jogada, para produzir de forma mais realista esse resultado. As informações quase sempre são (1) esquema tático, (2) definição de posições dos jogadores e (3) escalação. Para estas informações não existe uma evolução das habilidades de um personagem representado pelo jogador, pois são puramente baseadas no conhecimento que o usuário tem do jogo. 2.1 - Qualificação de um jogador através de atributos Para podermos avaliar um jogador na questão de habilidade (caracterizado pelo agôn) é necessário transformar certos fundamentos do futebol em o que podemos chamar de "atributos". Enquanto uma alta quantidade de atributos é capaz de definir com mais clareza a capacidade de um jogador, aumenta também a dificuldade para um usuário analisar um jogador. Por isso é importante fazer um levantamento de quantos e quais atributos são necessários para definir com boa clareza a capacidade de um jogador. O primeiro ponto dessa pesquisa foi avaliar as soluções existentes. Em ordem crescente de complexidade serão apresentadas as soluções pesquisadas. A. ELIFOOT (2 ATRIBUTOS) O Elifoot (2009) tem apenas dois atributos: Performance e Remate. A Performance é, na verdade, um grupo composto de cinco valores: Força, Estrela, País, Moral e Físico. A Força varia bastante (de 1 a 100) e é o principal valor que ‐ 4 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 compõe a Performance. É o valor que define a habilidade propriamente dita do jogador e varia lentamente. Temos também a Estrela, que é um valor binário (1 ou 0). É associado aos "grandes craques", mas efetivamente dá uma vantagem pequena em relação aos jogadores sem Estrela. O País define uma pequena melhora na Performance caso o jogador esteja atuando em seu país de origem. Já a Moral tem mais importância que a Estrela e o País, representando o estado psicológico do jogador. Diferentemente da Estrela, que é um valor que nunca varia, a Moral varia constantemente. Físico representa o condicionamento físico do jogador: em início de temporada este valor está no seu máximo (100%) e diminuirá conforme for jogando consecutivamente, assim como aumentará caso o jogador descanse. O Remate é o único atributo "técnico" explícito do jogador, representando a qualidade de chute a gol daquele jogador. Varia também de 1 a 100. Uma outra característica do jogador é o Comportamento, que se divide em 4 valores, definindo o grau de violência do jogador em campo. Contudo, de todos estes atributos, podemos extrair apenas dois que indiquem as habilidades do jogador: Força e Remate. Apenas dois atributos de habilidade não são capazes de dar idéia das capacidades do jogador nas várias tarefas que ele precisa executar durante o jogo, pois, excluindo-se chutes a gol, o atributo Força sugere que o jogador executa todas as outras tarefas com a mesma competência. B. ONLINE FOOTBALL MANAGER (2 ATRIBUTOS) No Online Football Manager (2009) os jogadores possuem 2 principais atributos: Ataque e Defesa, que partem de um mínimo de 0. Não existe valor máximo conhecido para um atributo, mas um jogador extraordinário estaria entre 95 e 100, porém com treinamentos é possível atingir valores acima de 130, por exemplo. Existe um terceiro atributo que é a média entre Ataque e Defesa. Para um atacante o atributo determinante é o Ataque, tendo pouca importância o atributo Defesa. Para um meio-campista o atributo mais importante é a média entre Ataque e Defesa, ou seja, precisa dos dois atributos altos. Para os defensores e goleiros o atributo Defesa é o mais importante, sendo que os goleiros nunca possuem mais que zero no atributo Ataque. Para defensores o atributo Ataque tem alguma importância, porém não é determinante no seu valor. Novamente, igual ao Elifoot, encontramos os atributos Físico e Moral. Ambos são atributos percentuais que ‐ 5 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 influenciam no rendimento do jogador na partida e têm a mesma importância para todas as posições. Diferentemente do Elifoot, o Online Football Manager não possui um atributo técnico explícito (remate), porém já diferencia tarefas ofensivas e defensivas, agrupando em dois atributos, porém ainda é pouco para termos real noção das capacidades de cada jogador. C. HATTRICK (8 ATRIBUTOS) O Hattrick (2009) é mais complexo que as duas soluções apresentadas até agora. Apresenta oito habilidades: Resistência, Armação, Finalização, Ala, Goleiro, Assistências, Defesa e Bola Parada. Esses atributos não cobrem todas as áreas desejáveis para as habilidades completas de um jogador, além de ter alguns atributos altamente específicos e outros altamente genéricos, complicando a análise do jogador, como, por exemplo, o atributo winger, que se aplica somente aos alas e o atributo passing que se aplica a todos os jogadores. Os valores dos atributos são adjetivos, como: brilhante, fenomenal, formidável, excelente, boa, razoável, etc. Isso é um problema, pois implica que o usuário terá que decorar todos esses adjetivos, complicando uma comparação entre jogadores. Existem 22 adjetivos, ou seja, podese dizer que os atributos variam de 1 a 22. D. NEW STAR SOCCER (12 ATRIBUTOS) No New Star Soccer (2009) os jogadores possuem uma quantidade maior de atributos do que nas soluções apresentadas acima. Estes atributos são agrupados em quatro grupos: Fundamentos, Técnica, Físico e Tática. No grupo dos Fundamentos encontramos: Bola Parada (cobrança de falta, escanteio), Chute a Gol, Cabeceio, Drible, Passe e Desarme. Na Técnica temos: Flair (é difícil encontrar uma tradução exata, mas a habilidade significa a qualidade e personalidade que o jogador possui para arriscar jogadas mais ousadas e diferenciadas), Controle de Bola e Ambos os Pés (significa o quão habilidoso o jogador é com a perna que não é a sua principal). Na parte física e tática apenas dois atributos cada: Velocidade e Força no Físico; e assim no Tático: Posicionamento e Visão de Jogo. Essa quantidade de atributos já é capaz de proporcionar uma boa noção das qualidades de um jogador, dando ao usuário uma chance de ponderar a respeito das chances de sucesso que aquele jogador terá ao tentar executar determinada tarefa. Todos os atributos variam entre valores de 0 a 30. ‐ 6 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 E. VIRTUAL MANAGER (18 ATRIBUTOS) O Virtual Manager (2009) divide os atributos em três grupos: Técnica, Mentalidade, Físico. Cada grupo possui seis atributos. Para a Técnica temos: Finalização, Drible, Passe, Desarme, Marcação e Cobrança de Pênaltis. Na Mentalidade: Coragem, Criatividade, Determinação, Influência (o poder de influenciar os outros jogadores em campo, essencial para capitães), Moral e Posicionamento. Finalmente, para o grupo Físico, os atributos são: Aceleração, Equilíbrio, Preparação Física, Salto, Força e Resistência (quanto tempo o jogador agüenta sem sentir cansaço). A variação dos atributos não é conhecida, mas em uma equipe inicial os jogadores tendem a ter atributos entre 0 e 10, os melhores chegam a 15 ou até mesmo 20. Já nas principais equipes é comum encontrar jogadores com atributos acima de 100, alguns, em determinados atributos, ultrapassam 200 pontos. 18 atributos ainda é uma quantidade boa para avaliar um jogador, mas não fica claro quais os atributos essenciais para cada posição, o que acaba dificultando um pouco a priorização por atributos. Além disso não existe um bom parâmetro de comparação, visto que não há limite aparente para os valores dos atributos, mas, por outro lado, os valores são bem altos, deixando a impressão de que variações pequenas nos atributos não são tão impactantes. F. UNIVERSAL SOCCER MANAGER (22 ATRIBUTOS) O Universal Soccer Manager (2009) é outro que divide os atributos em grupos: Goleiro, Defensivo, Meio-Campo e Ofensivo. Os grupos resolvem o problema encontrado no Virtual Manager a respeito de não saber quais atributos são importantes para as posições. Cada grupo, por mais que tenham atributos importantes para todas as posições, são cruciais para a posição que dá nome ao grupo. No grupo Goleiro temos: Agilidade, Salto, Controle Manual (habilidade de defender e controlar a bola com as mãos), Reflexos, Saída de Gol (habilidade de sair do gol para interceptar uma bola) e Força. O grupo Defesa é composta por: Marcação, Desarme, Agressividade, Velocidade, Cabeceio e Antecipação. No MeioCampo: Passe, Criatividade, Drible, Resistência, Bola Parada e Técnica. E, finalmente, no Ataque temos: Chute a Gol, Finalização (diferentemente de Chute a Gol, a finalização define a qualidade do jogador para "matar" a jogada, ou seja, colocar a bola para dentro do gol de qualquer maneira), Drible, Reflexos (é o mesmo ‐ 7 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 atributo encontrado no grupo Goleiro), Cabeceio (outro atributo repetido, encontrado no grupo Defesa), Cobrança de Pênalti. No fim das contas temos, efetivamente, 22 atributos, todos variando de 1 a 99. G. PRO EVOLUTION SOCCER (29 ATRIBUTOS) O Pro Evolution Soccer (2009) possui o problema de não saber quais atributos são importantes para cada posição e, além disto, não divide os atributos em grupos. Portanto são: Ataque, Defesa, Equilíbrio, Resistência, Velocidade, Aceleração, Reação (tempo que demora para o jogador perceber e reagir a uma situação), Agilidade, Precisão de Drible, Velocidade de Drible, Precisão de Passe Curto, Velocidade de Passe Curto, Precisão de Passe Longo, Velocidade de Passe Longo, Precisão de Chute, Potência de Chute, Técnica de Chute, Bola Parada, Efeito (quantidade de efeito que o jogador consegue aplicar à bola), Cabeceio, Salto, Técnica, Agressividade, Mentalidade, Habilidade de Goleiro, Trabalho em Equipe, Precisão com Perna Fraca, Freqüência com Perna Fraca. Todos os atributos variam de 1 a 99. Neste caso temos muitos atributos e, pior ainda, uma redundância enorme. Por exemplo: em vez de quatro atributos para definir o passe, poderia ter apenas um, assim como é com o chute, drible, perna fraca e bola parada. Fazendo uma reavaliação é possível chegar a 17 atributos sem perder muita informação, o que seria um número bem mais fácil de analisar. H. FOOTBALL MANAGER (37 ATRIBUTOS) O Football Manager (2009) tem a maior quantidade de atributos dentre os programas analisados. Estes atributos são divididos em três grupos. Técnico, que contém: Escanteios, Cruzamentos, Drible, Finalização, Primeiro Toque (a qualidade do primeiro toque na bola, seja para dominar ou passar a bola "de primeira"), Bola Parada, Cabeceio, Chutes à Distância, Cobrança de Lateral Longa, Marcação, Passe, Cobrança de Pênalti, Desarme, Técnica. Tem também o grupo Mental: Agressividade, Antecipação, Coragem, Compostura, Concentração, Criatividade, Decisões (capacidade de tomar boas decisões rapidamente), Determinação, Flair, Influência, Posicionamento, Trabalho em Equipe, Empenho (o quanto o jogador se esforça nos treinos e no trabalho do dia-a-dia). O menor grupo é o Físico: Aceleração, Agilidade, Equilíbrio, Salto, Preparo Físico Natural, Velocidade, Resistência, Força. O Football Manager também tem o problema de identificar os ‐ 8 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 atributos importantes para cada posição, além de uma quantidade alta de atributos para analisar. Os valores variam entre 1 a 20, que é o menor intervalo de todos os casos estudados. Isso leva a crer que uma variação de apenas um ponto tem um peso grande, fazendo a avaliação do jogador ficar ainda mais difícil. Além destas soluções que já existem, foi feito um levantamento com várias pessoas. De todas as respostas foram identificados 13 atributos diferentes considerados mais importantes: Velocidade, Passe, Chute a Gol, Mentalidade (Agressividade, Determinação), Desarme, Resistência, Cabeceio, Posicionamento, Defesa, Ataque, Controle de Bola (Técnica), Visão de Jogo, Força. 2.2 - Conjunto de Atributos Com base nessas respostas e nos estudos feitos sobre as soluções existentes, foi feito um mapeamento dos atributos e, posteriormente, uma contagem de quantas citações cada atributo teve para que se pudesse identificar uma ordem de importância. Após estabelecer essa ordem foi possível determinar a quantidade ideal de atributos e descartar os atributos excedentes. O mapeamento resultou em 33 atributos a seguir, na ordem de importância: Finalização, Drible, Mentalidade, Passe, Resistência, Bola Parada, Técnica, Velocidade, Desarme, Cabeceio, Força, Salto, Criatividade, Marcação, Posicionamento, Aceleração, Agilidade, Cobrança de Pênaltis, Equilíbrio, Habilidades de Goleiro, Influência, Reação, Antecipação, Coragem, Cruzamento, Flair, Habilidade com Perna Fraca, Trabalho em Equipe, Visão de Jogo, Compostura, Concentração, Decisões, Empenho. Destes atributos há um conjunto de atributos visivelmente mais importantes. Baseado nos estudos até agora feitos, chega-se à conclusão que o conjunto de atributos visivelmente mais importantes tem um número aceitável: 15. Assim foi estabelecido um conjunto que define adequadamente as habilidades de um jogador sem dificultar muito a análise e comparação. O conjunto resultante é: • Bola Parada: capacidade do jogador de cobrar bolas paradas (escanteio, lateral, falta, pênalti); • Cabeceio: capacidade do jogador de controlar o toque da bola com a cabeça, seja para o passe ou para finalizar a gol; • Criatividade: capacidade de enxergar e criar possibilidades de jogadas; ‐ 9 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 • Desarme: capacidade de roubar (desarmar) a bola do adversário sem cometer uma infração; • Drible: capacidade de passar por um adversário sem perder controle da bola; • Finalização: capacidade de colocar a bola dentro do gol adversário; • Força: força física do jogador, que servirá para disputas de corpo; • Marcação: capacidade de marcar um ou mais jogadores adversários; • Mentalidade: a determinação do jogador e o quanto ele afetado por pressão, cansaço e situações adversas em campo; • Passe: capacidade de mover a bola em direção a um companheiro; • Posicionamento: capacidade de posicionar-se em campo para receber passes ou rebotes; • Resistência: quanto tempo o jogador agüenta jogar até cansar; • Salto: altura do salto e "tempo" de bola (saltar na hora correta para executar a ação desejada); • Técnica: capacidade que o jogador tem de controlar a bola, seja ao dominá-la, ao tentar um drible, chute ou passe; • Velocidade: velocidade do jogador na corrida, aceleração e reação (reflexos). 2.3 - Decisões A todo momento o jogador estará tomando decisões. Primeiro foi feito uma análise sobre as decisões e a forma com que elas são apresentadas para o usuário nos sistemas atuais. Na maioria dos sistemas o usuário não recebe um pedido explícito para tomar a decisão, já que as decisões são tomadas em tempo real. Geralmente existe um mapeamento de teclas para determinados tipos de ação que o usuário pode tomar. Ele escolhe a direção e velocidade que seu jogador irá correr. Além disso, pode ser ao mesmo tempo em que está se movimentando, o jogador poderá fazer algumas ações, dependendo da posse de bola. Em todos os casos, quando o jogador está com a bola, ele pode tentar mantê-la, executar um drible, passar a bola ou chutar. Em alguns casos poderá fazer lançamentos e cruzamentos. Além disso, quando um companheiro de equipe tem posse da bola, o jogador poderá chamar a ‐ 10 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 atenção do companheiro para receber um passe. Nas vezes em que a bola estiver em posse da equipe adversária, o usuário poderá escolher se marca a bola para tentar roubá-la, e, quando estiver próximo, poderá tentar roubar a bola normalmente ou fazendo o chamado "carrinho" (deslizar o corpo no chão para tentar atingir a bola que está um pouco mais distante). Em poucos sistemas as opções são apresentadas periodicamente e o jogador escolhe dentre essas, ou combina várias. As mesmas decisões acima estão disponíveis para os casos encontrados. E em todos os sistemas estudados os jogadores possuem habilidades que influenciam no desempenho da execução de cada decisão. ‐ 11 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 3. Objetivos Neste trabalho a proposta é estudar e desenvolver algoritmos de simulação de partida em tempo real com a possibilidade de interação de múltiplos usuários. Basicamente trata-se da simulação de uma partida completa, descrita anteriormente, através da simulação de cada jogada da partida. A simulação da partida proporcionará a possibilidade real de testar habilidades desenvolvidas para o personagem, mas ao mesmo tempo usar da capacidade de decisão do usuário representado por este personagem. Além disto, existe a intenção de estudar mecanismos de maior interação com a partida, de forma a criar maior dificuldade e diversão. É imperativo que múltiplos usuários possam interagir na mesma partida para que exista uma dependência entre usuários do sistema, fazendo com que todos de uma mesma equipe dependam do desempenho individual de cada membro para atingirem suas próprias metas pessoais. 3.1 - Objetivos Específicos O objetivo do trabalho é produzir um sistema que possa ser posteriormente incorporado a outros ambientes. Dessa maneira, o sistema pretende fornecer um serviço de simulação, onde o utilizador deste serviço escolhe qual a finalidade que terá o simulador, além de fornecer os dados iniciais e interpretar, da maneira que preferir, os resultados obtidos pelo simulador. O sistema, uma vez pronto, pretende ser utilizado de várias maneiras. Principalmente para fazer estudos de como diferentes ações podem influenciar o resultado final. Também pode ser até possível realizar testes empíricos para determinar possibilidades mais prováveis de resultados e estudar determinados comportamentos de formações táticas no futebol. 3.2 - Usuários Como já foi dito anteriormente, o sistema pretende ser um serviço. Os usuários serão outros programadores que utilizarão o simulador nos seus sistemas. As pessoas que interagirão com o simulador não podem ser considerados usuários diretos, uma vez que o simulador não faz interface direta com o usuário, em vez disto, recebe as decisões do usuário através do sistema ao qual está acoplado. ‐ 12 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 3.3 - Avanço em relação ao estado da arte Não existe atualmente uma solução que permita que diversos usuários interajam em tempo real em um simulador de futebol onde são responsáveis por decisões pontuais de um único jogador. Desta forma será possível estudar comportamentos de usuários e como a forma de pensar de cada pessoa influenciará no resultado da simulação. ‐ 13 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 4. Atividades Realizadas 4.1 - Estudos Preliminares De conhecimento prévio, que auxiliou de qualquer maneira neste Projeto, havia várias linguagens de programação, destacando-se Java e PHP. Por conseqüência as tecnologias relacionadas, como ambiente de desenvolvimento e modelagem, já eram, em sua maioria, conhecidas, portanto não houve pesquisa muito grande em relação a isto. Também já havia conhecimento prévio básico de inteligência artificial, pesquisado anteriormente por conta própria, sem relacionamento com o projeto, mas que ajudou no desenvolvimento deste. 4.2 - Estudos Conceituais e de Tecnologia Houve a necessidade de fazer um estudo relacionado a sistemas multiagentes, pois pode-se considerar que cada elemento do simulador (jogadores e técnicos) são agentes e agem de forma independente. Diferencia-se um pouco pelo fato deste sistema ser muito mais dirigido à cooperatividade e busca de um objetivo comum, onde o conhecimento entre os agentes precisa ser dividido. Também estudou-se tecnologias web para criação de um web service. Apesar da criação do web service não estar previsto no escopo do trabalho, o estudo foi importante para a criação de um padrão de arquivos de comunicação e a forma como esta troca de arquivos será feita, assim permitindo que o sistema seja utilizado como um serviço. 4.3 - Testes e Protótipos para Aprendizado e Demonstração Para facilitar a criação de dados foram criados geradores onde o usuário (desenvolvedor) pode criar um time e será gerado um arquivo XML para leitura pelo sistema. Isso foi feito porque, na verdade, o sistema pretende ser um serviço, e, portanto, toda a persistência de dados (como times, jogadores e formações táticas) será feita pelo sistema cliente, e não pelo simulador. Assim há uma carência de dados e estes pequenos programas auxiliares ajudarão a criar dados para invocar o simulador. Foi feito também um módulo para geração de HTML, a fim de demonstrar visualmente o resultado da simulação. Uma série de arquivos interligados são gerados para que a visualização seja animada. ‐ 14 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 4.4 - Método 4.4.1 Criação de um Motor O primeiro passo foi desenvolver um "motor" para o sistema de simulação. O motor consiste em uma série de comandos que farão com que o simulador irá iterar por um tempo definido e, a cada iteração, forçará a atualização de todos os objetos simulados. Desta forma o simulador não precisa conhecer especificamente a forma com que os cálculos internos são feitos, apenas informa o tempo e força atualizações. Os componentes da simulação, por sua vez, usam o tempo para se atualizarem. A cada iteração o tempo decorre de acordo com um determinado passo de simulação, que é um número definindo quanto tempo incrementar a cada iteração. O passo poderá ser definido pelo usuário e fará com que a simulação seja mais ou menos minuciosa. 4.4.2 Estabelecimento dos Parâmetros Foram estabelecidos diversos parâmetros de configuração do sistema para que o cliente possa configurar de acordo com suas necessidades. Estes parâmetros são fornecidos através do arquivo de inicialização da simulação (XML). Dentro deste arquivo XML é esperado: dimensões do campo (largura e comprimento), equipes, jogadores (cada jogador possui um "papel", no sistema chamado de Role, um conjunto pré-determinado de habilidades, nome, número e posição XY inicial), tamanho do passo de simulação e modo de simulação. 4.4.3 Definição dos Modos de Simulação Três tipos de simulação foram previstos: Parcial com Intervalos, Total com Intervalos, Total sem Intervalos. A diferença entre Parcial e Total é se está previsto interação com humanos. Caso um humano possa tomar decisões, é considerada Parcial, caso contrário, o tipo de simulação é Total, pois todas as decisões ficarão a cargo da inteligência artificial do sistema. O conceito de com ou sem intervalos identifica se o simulador disponibilizará resultados das parciais de cada intervalo ou não. No caso da simulação parcial só poderá ser com intervalos, pois os humanos que estão interagindo com o sistema precisam do resultado de cada ação para tomar sua próxima decisão. Quando escolhido o modo sem intervalos o simulador ainda processará todas as etapas, mas só fornecerá um XML com o resultado final. ‐ 15 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 Assim é possível obter uma resposta muito mais rápido, pois o sistema não precisará parar a cada passo para ler ou escrever dados. 4.4.4 Criação dos Papéis Um papel, do inglês role, determina a forma que um jogador deverá se comportar no jogo. Foram criados os seguintes papéis: GK (goleiro), CB (zagueiro central), WB (lateral), DM (volante), MF (meia), AM (meia-atacante), FW (atacante), ST (centro-avante). A cada papel é acoplado também um descritor do lado do campo que o jogador atua: L (esquerda), C (centro), R (direita). Estes papéis serão utilizados pelo sistema para gerar decisões. ‐ 16 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5. Projeto e Especificação do Sistema O projeto desenvolvido é um simulador. Este simulador recebe os dados de todos os jogadores e ambas as equipes envolvidas em uma partida de futebol, e, a partir destes dados, reproduz jogadas e ações similares ao que se espera na realidade. O sistema também é capaz de receber entradas pontuais de humanos com descrição de ações a serem executadas por alguns dos jogadores. O simulador criará arquivos de saída descrevendo o estado em cada momento da simulação, de maneira a ilustrar o decorrer das jogadas. Este sistema é desenvolvido com intenção de ser um serviço, e, por isso, não fornece nenhuma interface visual de controle. Sua comunicação com outros sistemas se dá através de arquivos XML, tanto de entrada quanto saída. Estes arquivos seguem um modelo padrão que será conhecido pelo cliente. 5.1 - Arquitetura O sistema desenvolvido possui módulos de: leitura de dados, escrita de dados e o núcleo onde o processamento ocorre. Conforme ilustrado na figura 5.1.1, a comunicação entre Cliente e Simulador é feita através de arquivos XML. O Cliente envia um XML Inicial, contendo as configurações e jogadores. Em seguida o Leitor de XML interpreta estes dados e "alimenta" o Simulador, que então prepara o sistema para a simulação. O Cliente então envia um XML de Entrada, que é um arquivo descrevendo as ações de cada jogador. Este arquivo é opcional, para cada jogador que o simulador não obtiver informações sobre que ação tomar, a inteligência artificial gerará uma decisão. Após processadas todas as decisões, o Escritor de XML interpreta os dados presentes no Simulador e os disponibiliza em um XML de Resultados para que o Cliente possa saber o que está acontecendo na simulação. ‐ 17 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Figura 5.1.1 ‐ 18 ‐ PUC – Rio – Pontifícia Universidade Católica Matrícula: 0611678 SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.2 - Motor O motor está centralizado na classe Simulator. Essa classe controla o tempo de simulação e chama no momento adequado cada função do sistema. Há uma validação inicial dos parâmetros do sistema, lidos no arquivo de inicialização. Uma vez validados, o sistema utiliza estes parâmetros para inicializar sua configuração, como tamanho do passo de simulação e modo de simulação (parcial/total, e com/sem intervalos). A partir deste instante o sistema itera até que o passo seja o final. A cada passo o motor faz uma avaliação da bola, para saber qual o estado em que esta se encontra (em jogo, fora de jogo, gol, etc.). Além disso, na avaliação são aplicados os movimentos pendentes à bola. Uma vez feito isso, o sistema solicita a cada elemento do jogo (tipicamente os jogadores) a sua decisão ou a lê do arquivo de entrada, caso fornecido pelo cliente. O processamento das decisões é feito separadamente da tomada de decisão para que todos os elementos façam a avaliação a partir do mesmo estado de simulação. Com as decisões colhidas o motor solicita que o simulador de ações processe cada decisão, retornando a nova posição dos jogadores e possíveis influências sobre a bola. Com essas informações o resultado é formulado e, caso o cliente tenha solicitado o resultado deste passo, o sistema escreverá um arquivo de saída, seguindo para o próximo passo de simulação. ‐ 19 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 Figura 5.2.1 O processo acima é descrito através do diagrama na figura 5.2.1. Esta figura é uma máquina de estados que demonstra o fluxo, por alto, do programa. 5.2.1 Validação dos Parâmetros A validação de parâmetros é uma etapa simples e curta, verificando simplesmente a integridade dos dados fornecidos. 5.2.2 Inicialização Na inicialização o sistema lê o arquivo de configuração fornecido pelo cliente (ver anexo simInit.xml). Da leitura deste arquivo tem-se os jogadores que compõem ambos os times e suas posições no campo, além dos seus papéis. Uma vez lidos os dados, o sistema posicionará os jogadores e a bola para o início da partida. 5.2.3 Iniciar Passo / Próximo Passo Essa etapa apenas incrementa o passo do sistema, para, em seguida, disparar as funções necessárias para a simulação. ‐ 20 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.2.4 Avaliar Bola Movimenta a bola de acordo com as forças aplicadas a ela. Depois da movimentação ser feita, o sistema avaliará o estado da bola: com quem está a posse, se está em jogo ou fora. Também é nesta etapa que será feito o teste para saber se ocorreu gol. 5.2.5 Colher Decisões O sistema irá colher as decisões fornecidas pelo cliente para cada jogador, caso se trate de uma simulação parcial (com intervenção humana). A inteligência artificial do sistema fornecerá uma decisão para os jogadores que não tiverem uma decisão fornecida. Essa decisão é formada em 3 bases: as habilidades do jogador, o papel do jogador e uma pequena parte aleatória. As decisões serão validadas e cada decisão inválida será gerada novamente. 5.2.6 Processar Decisões Uma vez que todas as decisões estiverem válidas o sistema prosseguirá para processar cada uma. Neste momento será calculado a influência daquela ação nos elementos do sistema: o jogador atuante, a bola e os outros possíveis jogadores que sofrerem alguma influência decorrente daquela ação. É importante notar que este é um ponto que pode gerar inconsistências, pois a decisão de um jogador pode não estar mais válida após a ação de algum outro jogador. A melhor forma de proceder neste caso ainda está sendo estudada. 5.2.6 Formular Resultado Esta etapa do processo resume-se em decidir se será produzida uma saída para este passo ou não. 5.2.7 Escrever Resultado Caso o sistema tenha decidido produzir uma saída, esta etapa se encarrega de "traduzir" as variáveis e informações internas em um resultado compreensível para o cliente, seja por HTML ou por XML. ‐ 21 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.3 - Decisões Cada elemento do sistema precisará tomar uma decisão a cada passo. Para cada decisão o sistema solicita a cada equipe as decisões dos seus jogadores. A partir desse instante serão geradas as decisões de acordo com três premissas: habilidade individual do jogador, papel do jogador, aleatoriedade. As possíveis decisões são representadas por tabelas. A primeira premissa segue uma tabela comum a todos os jogadores. São feitas contas baseadas nas habilidades do jogador, distância entre certos elementos e posse de bola. Figura 5.3.1 Esta tabela é traduzida em uma série if. As decisões não são mutuamente exclusivas, ou seja, se a condição for satisfeita a decisão será acrescentada ao vetor de decisões com o peso determinado na tabela. Posteriormente uma das decisões será sorteada usando este vetor. O simulador varre a tabela seqüencialmente, adicionando ao vetor conforme as condições forem satisfeitas. A tabela acima seria percorrida da seguinte forma: 1. Primeiro há algumas contas comuns que podemos guardar o valor em variáveis, como distância da bola: double ballDist = player.distance( Ball.instance() ); double ballPoss = Ball.instance().getPossession(); 2. A bola está longe? Vamos estipular "longe" sendo o valor numérico 50. Teremos: if( ballDist > 50 ) decision.addPossibility( 500, (Action)new RunToPosition( player) ); ‐ 22 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 3. Se ninguém possui a bola e ela está próxima (novamente estipulando um valor, neste caso 15), temos: if( ballPoss == null && ballDist < 15 ) decision.addPossibility( 10 + player.getAttribute( Attribute.SPEED ) ballDist, (Action)new RunToBallTarget( player ) ); 4. O próximo caso é mais complicado, então é estruturado assim: if( !player.getTeam().hasBall() && Ball.instance().getPossession() != null ) { double oppDist = player.distance( Ball.instance().getPossession() ); double defDist = team.closestTeammate( player ); if( oppDist < 15 && defDist > 15 ) { decision.addPossibility( 50 + player.getAttribute( Attribute.TACKLING ) - oppDist + defDist, (Action)new Challenge( player ); } } 5. E assim sucessivamente. Nenhum dos casos é excludente e novas possibilidades são acrescentadas em seqüência. Em seguida o papel do jogador é consultado e, baseado nas tarefas daquele papel, serão geradas mais decisões de acordo com esta outra tabela. A última premissa é a aleatoriedade, mas o peso atribuído às decisões desta forma geradas é muito pequeno. As seguintes tabelas foram geradas: geral, aleatórias, GK, CB, WB, DM, MF, AM, FW e ST. Estas tabelas são apresentadas no anexo. Cada decisão está ligada a uma ou mais ações. Estas ações são instruções simples implementadas no simulador. Uma decisão combina e calcula os parâmetros para as suas ações. Por exemplo uma decisão de passar a bola invoca a mesma ação que um chute (movimentar a bola) com parâmetros bem diferentes. Cada ação é uma classe que implementa a interface Action e, uma vez fornecidos ‐ 23 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 os parâmetros da ação, a sua execução é chamada através do método execute(). Estas classes estão agrupadas no pacote action. Existe uma ação chamada Composite, que é uma composição de uma ou mais ações, tipicamente usada para encadear ações, a fim de estruturar uma possível decisão mais complexa. No sistema existe uma classe chamada Decision. Esta classe é um agregador de ações. Conforme dito anteriormente, diversas decisões serão geradas de acordo com as tabelas do sistema. Estas decisões estão representadas por uma lista de ações cujos parâmetros já foram preenchidos. A esta lista foi dado o nome de vetor de decisões. Cada ação é encadeada com seu peso anotado e um número é sorteado. O sistema itera dentro do vetor até que o peso acumulado supera o número sorteado e assim determina a ação selecionada para execução. Como todas as ações do vetor já estão com os parâmetros preenchidos, basta chamar o método execute() na ação sorteada. Os papéis também são classes, cada papel tem sua classe, que é uma implementação de uma interface comum chamada Role. Os papéis têm apenas um método: decide(). Cada jogador tem uma instância de um role e chama a função de decisão desta instância para que a parte das decisões relativas ao seu papel seja completado. 5.4 - Interação Humana Vale lembrar que as classes de decisão e toda essa lógica de tomada de decisão só é usada no caso da ausência de um decisão de humanos. Na simulação parcial com intervalos é possível (e esperado) que pelo menos um humano tome decisões. O sistema cliente é quem apresentará as possíveis decisões, a capturará e enviará ao simulador. Esta comunicação é feita por arquivo XML através de um trecho como o seguinte: <players> <player> <pid>5</pid> <act_chain> <action>ACT.PASS</action> ‐ 24 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 <action>ACT.RUN</action> </act_chain> </player> </players> Poderiam haver mais jogadores, mas neste caso apenas um jogador tomou decisão. Há uma cadeia de ações e a primeira tem prioridade sobre a segunda e assim sucessivamente. Isso significa que cada ação será executada e a próxima será validada. Se estiver válida a cadeia continua a executar, senão é interrompida e nenhuma ação subseqüente é interpretada. 5.5 - Saída De acordo com a escolha do cliente poderão ser produzidos arquivos de saída. Um arquivo de saída (XML) fornecerá informações acerca da bola (velocidade, jogador com posse da bola, posição da bola, alvo da bola se estiver em movimento) e informações sobre cada jogador na partida (posição, ações executadas, velocidade). Com estas informações o cliente é capaz de montar uma visualização do estado atual da simulação. A figura 5.5.1 ilustra um exemplo de visualização a partir dos dados do simulador: cada jogador é posicionado em um campo, além da bola. Figura 5.5.1 Exemplo de visualização de estado da simulação. ‐ 25 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.6 – Casos de Uso 5.6.1 – Caso: Inteligência Parcial com Intervalos Quando o simulador está no modo parcial com intervalos é esperada uma entrada de dados informando ações de um ou mais jogadores. Assim o Cliente enviará os dados iniciais e pode submeter as ações a cada intervalo de simulação. Este intervalo é um tempo dado para que o cliente agregue possíveis entradas de dados e monte um arquivo XML para enviar ao simulador, comumente chamado de timeout. Além disso o cliente pode recuperar resultados de cada intervalo. ‐ 26 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.6.2 – Caso: Inteligência Total com Intervalos No caso de Inteligência Total com Intervalos o simulador está operando sem intervenção humana, então o cliente não envia dados durante os intervalos de simulação, mas pode recuperar as informações de cada intervalo. Este caso é como se fosse um "vídeo" da partida, já que não se pode interferir no jogo, mas pode-se observá-lo do início ao fim. ‐ 27 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.6.3 – Caso: Inteligência Total sem Intervalos O último caso, Inteligência Total sem Intervalos, só permite que o cliente recupere o resultado final. Este resultado final contem informações sintetizadas da partida, como se fosse um relatório. Esta é a forma em que a simulação se completa mais rapidamente, já que não há quase leitura e escrita de dados nem troca de informações. ‐ 28 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.7 – Diagramas de Classes O sistema é dividido em diversos pacotes de acordo com as funcionalidades das classes. Os pacotes presentes são: actions, core, decision, geom, io, main, roles. Os três pacotes principais, e mais complexos, são apresentados com diagramas de classes: actions, core e roles. O pacote decision desempenha a tomada de decisões do sistema, porém possui apenas duas classes. Uma classe é chamada Decider, que se encarrega de processar uma tabela geral de decisões. A outra classe se chama Decision, que é produto do processamento de uma tabela. Esta classe é onde está, na verdade, o vetor de decisões e, na solicitação de uma ação ser desempenhada, a classe sorteará randomicamente uma das decisões do vetor. O pacote geom contem classes responsáveis por cálculos geométricos e algébricos. O pacote io é constituída de classes responsáveis por leitura e gravação de dados. Por fim, o pacote main contém apenas a classe que inicializa o programa. 5.7.1 – Pacote: Actions No pacote actions temos a classe Action, que é uma interface. Esta interface tem 3 métodos: ‐ 29 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 • execute() – chamada para executar (pôr em prática) a ação • inProgress() – uma função que retornará se aquela ação ainda está em curso ou já concluiu • getName() – retorna o nome da ação, usado somente para informações ao cliente Cada Action implementa estes 3 métodos. Algumas ações são instantâneas, como Pass, por exemplo. Outras ações podem demorar mais tempo, como, por exemplo, RunToBallTarget. A tendência é que um jogador mantenha a sua linha de ação, e é por este motivo que essa função é importante no sistema. ‐ 30 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.7.2 – Pacote: Core Este é o núcleo do sistema. Existem 3 classes singleton: Simulator, Ball e Field. Na classe Ball está concentrada a lógica da bola do jogo. Essa classe calcula e mantém a velocidade, altura, velocidade, movimento e posse da bola. Existem 4 métodos importantes nesta classe: • setKickoff() – Posiciona a bola no centro do gramado para início (ou reinício) do jogo. • step( double ) – Avança um passo na simulação da bola. Ou seja, calcula novamente todas as variáveis da bola. • stop() – Encerra qualquer movimento atual e futuro da bola, ou seja, zera as variáveis de movimentação. • kick( double, int, int, Point2D ) – Esta é uma das funções mais importantes do sistema. É através dela que é feito qualquer movimento da bola. Um drible consiste em pequenos “kicks”, ou seja, a chamada da função kick com pequenos parâmetros. Um passe, um lançamento e um chute a gol também são outros exemplos do uso da ‐ 31 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 função kick, que recebe a distância do chute, a velocidade inicial da bola, altura máxima e a direção. Na classe Ball temos os seguintes atributos: • currentPosition - a posição atual da bola no campo • inertia - a quantidade de movimento potencial que a bola possui • speed - velocidade de movimentação da bola • direction - direção de movimentação da bola • target - posição onde a bola irá parar, se não tiver sua trajetória interrompida • kicked - ponto do campo de onde a bola foi chutada pela última vez • height - distância que a bola está do chão • possession - jogador que está com a posse de bola A classe Field é apenas uma classe contendo informações a respeito, principalmente das dimensões do campo. Possui também variáveis para rápida referência como center, que é o ponto central do campo e homeGoal/awayGoal, que são os gols em cada ponta do campo. A classe Team tem as referências para todos os jogadores da sua equipe e é mais usada para fazer mudanças em vários jogadores de uma só vez. Os métodos importantes são: • hasBall() – Usado para cálculo de decisões, retorna se algum jogador do time tem a posse de bola. • changeSides() – Usado apenas para inverter uma equipe de lado do campo, por exemplo usado após o intervalo de jogo. ‐ 32 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam • Matrícula: 0611678 setKickOff( boolean ) – Posiciona todos os jogadores para início da partida. Recebe um parâmetro indicando se o time iniciará com posse de bola ou não. • makeDecisions() – Função usada pelo simulador para que a classe Team recolha as decisões dos seus jogadores. A classe Player agrega todas as informações de um jogador, e é onde todo o processo de tomada de decisão ocorre. As funções changeSides() e kickOffPosition() são chamadas pelo time ao qual o jogador pertence e já foram explicadas. Há uma série de métodos sobrecarregados para calcular a distância de um jogador a um ponto, a outro jogador ou à bola. São funções para rápida referência, já que o mesmo cálculo poderia ser feito usando a classe Point2D. Além dessas, existe uma função, getLastAction(), que resgata a última ação do jogador, usado para exibir ao cliente e também nos casos em que a ação perdura por mais de um ciclo de simulação. A função chave desta classe é a decide(), onde uma série de testes e condições serão feitas para gerar o vetor de decisões de cada jogador. Parte desta tarefa é repassada para o papel (role) do jogador. Os atributos da classe Player são: • startPoint - ponto do campo onde o jogador iniciou a partida • currentPoint - ponto do campo onde o jogador se encontra atualmente • name - nome do jogador • jersey - número da camisa do jogador • role - papel desempenhado pelo jogador • changedSides - se o jogador trocou de campo. Uma equipe sempre estará com esta variável verdadeira e a outra falsa • decision - vetor de decisões do jogador • team - time ao qual o jogador pertence ‐ 33 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam • Matrícula: 0611678 receivePass - variável indicando se o jogador está sendo alvo de um passe (torna-se falsa quando algum jogador tomar posse da bola) 5.7.3 – Pacote: Roles Cada role é uma implementação da interface Role, que tem apenas um método. Este método recebe um vetor de decisões (para escrita) e uma instância de Player, que é o jogador para quem a decisão será tomada. É com esta instância que o role acessará os atributos do jogador para a tomada das decisões. Todas estas classes são singleton, pois não é necessário criar múltiplas instâncias, já que não possuem dados. Há também uma classe, RoleUtil. Esta classe possui apenas o método fromString( String ), que recebe um valor em texto e retorna uma instância referente àquele texto. Esta função é usada apenas na montagem inicial dos elementos, já que os valores são lidos em texto. ‐ 34 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.8 – Diagramas de Seqüência 5.8.1 – Motor Neste diagrama está representado a seqüência de mensagens desde o início de uma simulação até o final. A saída de dados não está ilustrado, pois é isto é feito implicitamente ao final de cada iteração do loop. ‐ 35 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5.8.2 – Decisões Agora pode-se ver a representação das mensagens trocadas durante o processo de tomada de decisão. A requisição é feita pelo simulador ao time, que repassa aos seus jogadores. Cada jogador cria uma instância de Decision, que é retornada até o simulador. Uma vez que o simulador recebe a decisão ele manda executar. Esta execução "adiada" é feita para que as decisões tomadas não influenciem nas decisões subseqüentes dos outros jogadores na mesma rodada. Em outras palavras, se a decisão fosse executada no mesmo instante em que fosse tomada, este resultado influenciaria na decisão dos jogadores seguintes, provavelmente comprometendo uma das decisões. ‐ 36 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 6. Implementação e Avaliação 6.1 - Ferramentas Auxiliares Desenvolvidas 6.1.1 Gerador de Formação Tática Para facilitar o desenvolvimento do sistema foi criado um gerador de time. Este gerador é drag-n-drop, permitindo que se arraste os jogadores para as posições desejadas e, em seguida, gere um XML que represente aquela formação. Isso foi feito porque o sistema não persiste dados, portanto é carente de informações suficientes para funcionar sem uma entrada de dados externa. Com esta ferramenta auxiliar é possível gerar esses dados para que a simulação possa ocorrer. Figura 6.1.1 ‐ 37 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 6.1.2 Visualizador de Estado da Simulação Figura 6.1.2 Outra ferramenta criada foi o visualizador de estados. Na verdade consiste em uma saída alternativa de dados em formato HTML que o simulador gera para que possamos visualizar passo-a-passo o decorrer das ações. É importante lembrar que o simulador não possui nenhum método de visualização, apenas gera os dados em formato XML e os retorna ao cliente, este responsável por gerar sua visualização. 6.2 - Comentários sobre implementação Durante a execução do projeto houve três dificuldades. A primeira foi a reformulação da API. Antes pensado para ser um código incorporado ao sistema cliente, percebemos que não era uma forma boa e alteramos para a comunicação através de arquivos XML, pois, desta forma, o sistema poderá ser remodelado rapidamente para um web service e utilizado em conjunto com o AJAX, fazendo um ‐ 38 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 simulador poderoso e muito flexível. A segunda dificuldade foi fazer a implementação das regras. Reconhecer que a bola saiu, gol e falta. O conseqüente re-posicionamento dos jogadores quando a bola não está em jogo também foi complicado. A última dificuldade (não em ordem cronológica) foi fazer os jogadores realmente jogarem. Este é um trabalho contínuo e é preciso estar sempre alterando as tabelas de decisões para, cada vez mais, melhorar o desempenho dos jogadores e, desta forma, aumentar o realismo do simulador. Eventualmente poderá ser necessário a criação de uma nova ação, mas o sistema está construído de forma modular e as ações atualmente estão adequadas a descrever a maioria das decisões que poderão vir a existir. ‐ 39 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 7. Considerações Finais Com este projeto é possível que outros programadores desenvolvam sistemas mais complexos sem precisarem se preocupar com a simulação de partidas. Isso permite estudos mais profundos a respeito de interação de humanos com outros humanos e inteligência artificial, por exemplo. 7.1 - Aprendizagem Com este trabalho aprendi um pouco sobre web services (que até antes do trabalho não sabia nada) e aprofundei o meu uso de Java. Até então eu não havia desenvolvido nenhum sistema em Java. Durante a execução do projeto eu estive cursando a matéria de Simulação Física para Jogos e, apesar de não ter ligação direta com o projeto, aprendi um conceito que me ajudou bastante a fazer funcionar o projeto: o conceito de motor de simulação. 7.2 - O que faria de diferente Talvez não usasse Java. Fiquei um pouco frustrado com Java por limitações que a linguagem impõe. Sinto falta de ponteiros, devido à forte cultura adquirida na programação de C++. Não fiquei plenamente satisfeito com a forma com que o código acabou ficando, pois o planejamento inicial previa técnicas possíveis em C++, mas não em Java, como descobri posteriormente. Fora isso fiquei satisfeito com o resultado e ainda gostaria de ver o sistema evoluir mais. 7.3 - Trabalhos futuros O sistema ainda não foi portado para ser um web service, e este é um trabalho possível a ser feito. Seria muito interessante ver o sistema funcionando mesmo como um web service, com um cliente utilizando este serviço. Há também uma idéia que surgiu durante a implementação como uma opção adicional para o simulador. A idéia foi denominada percepção simulada. Pode ser que o cliente deseje que os seus usuários não vejam o estado exato da simulação, a fim de aumentar a complexidade e realismo do jogo. O cliente poderá então habilitar a esta opção. Esta opção utilizará o atributo de "visão de jogo" de cada jogador para produzir uma visão personalizada do jogo para aquele jogador. Isto ‐ 40 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 acarretará na criação de até mais 22 XMLs (um XML específico para cada jogador), então há um custo adicional. O que a função fará é distorcer o posicionamento dos elementos de forma radial (com o centro sendo o jogador em questão) e proporcional à distância (elementos mais distantes tendem a sofrer um deslocamento maior). Caberá, porém, ao sistema cliente garantir que o usuário veja somente a versão distorcida gerada para o seu jogador. Utilizando este trabalho é possível criar uma ferramenta para estudo de estratégias e formações do futebol, ou até mesmo um jogo, como comentado na proposta, que crie um ambiente futebolístico completamente virtual. O trabalho a ser realizado neste jogo seria criar uma espécie de comunidade e usar o simulador para fazer a simulação das partidas, permitindo que os usuários interajam com o jogo em tempo real. ‐ 41 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Figura 5.5.1 (Estado Real) Matrícula: 0611678 Figura 7.3.1 (Estado Percebido) Figura 7.3.2 (Comparativo) Na figura 7.3.1 podemos ver a área de visualização do jogador 6 do time vermelho no círculo verde-claro. Tudo dentro deste círculo é visto corretamente, fora dele há um deslocamento dos jogadores e bola, criando uma visualização baseada na percepção que aquele jogador tem do jogo. Na figura 7.3.2 podemos ver a comparação entre o real e o percebido através das linhas vermelhas pontilhadas, onde o início da linha é a posição real do jogador, traçando a distância até a posição percebida. ‐ 42 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 8. Referências Bibliográficas Bagatini, D. S., Alvares, L. O., Um Agente Reativo Jogador de Futebol: teoria e desenvolvimento. Disponível em: <http://www.donnicision.com/downloads/Agente_fute.pdf>. Acesso em: Junho, 2009. Bagatini, D.S. Um Sistema Multiagente para o Simulador Soccerserver. 2001. 149 p. Dissertação (Mestrado) - Universidade Federal do Rio Grande do Sul, Instituto de Informática, Porto Alegre, 2001. Elifoot. Disponível em: <http://www.elifoot.net/>. Acesso em: Abril, 2009. Football Manager. Disponível em: <http://www.footballmanager.com/>. Acesso em: Abril, 2009. Hattrick. Disponível em: <http://www.hattrick.org/>. Acesso em: Maio, 2009. Mateos, C., Testa, D., Software System Engineering - Soccer Match Simulation. Disponível em: <http://www.engr.sjsu.edu/fayad/current.courses/cmpe202spring06/docs/04-Soccer-Match-Simulation-pp-4.doc>. Acesso em: Junho, 2009. Matsubara, H., Noda, I., Kazuo, H., Learning of Cooperative actions in multiagent systems: a case of study of pass play in Soccer. Disponível em: <https://www.aaai.org/Papers/Symposia/Spring/1996/SS-96-01/SS96-01-012.pdf>. Acesso em: Junho, 2009. Moemeng, P., Issues in Soccer Simulation Software Development. Disponível em: <http://www.journal.au.edu/au_techno/2004/apr04/vol7num4_article04.pdf>. Acesso em: Abril, 2009. New Star Soccer. Disponível em: <http://www.newstargames.com/>. Acesso em: Abril, 2009. ‐ 43 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 Online Football Manager. Disponível em: <http://www.onlinefootballmanager.co.uk/>. Acesso em: Maio, 2009. Piccolo, G.M., O Universo Lúdico Proposto por Caillois. Disponível em: <http://www.efdeportes.com/efd127/o-universo-ludico-proposto-por-caillois.htm>. Acesso em: Maio, 2009. Pro Evolution Soccer. Disponível em: <http://www.konami.com/games/pes09/>. Acesso em: Abril, 2009. RoboCup. Disponível em: <http://www.robocup.org>. Acesso em: Abril, 2009. Universal Soccer Manager. Disponível em: <http://www.universalsoccermanager.com/>. Acesso em: Maio, 2009. Virtual Manager. Disponível em: <http://www.virtualmanager.com/>. Acesso em: Maio, 2009. ‐ 44 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam 9. Anexos ‐ 45 ‐ PUC – Rio – Pontifícia Universidade Católica Matrícula: 0611678 DECISÕES GERAIS PESO AÇÃO 500 RunToBallTarget - 250 * lastAction - 20+X+Y Dribble 50+X-Y Pass 20-X+Y Hold CONDIÇÃO PARÂMETROS X = habilidade de drible; Y = distância de adversários X = habilidade de passe; Y = distância do companheiro X = distância de adversários; Y = distância de companheiros O jogador é alvo de um passe A ação anterior executada pelo jogador ainda não se concluiu Jogador possui a bola Jogador possui a bola Jogador possui a bola 20 RunToPosition - Time do jogador possui a bola 60 RunToClear - Time do jogador possui a bola 100 GetBall - Time não possui a bola e a bola está muito próxima 50 RunToPosition - Adversário possui a bola e está distante 20-X RunToBall X = distância da bola 20-X RunToBallTarget X = distância do alvo da bola 50+X-Y Challenge X = habilidade de desarme; Y = distância do adversário X = menor distância da trajetória da bola; Y = velocidade do jogador; Z = velocidade da bola Time não possui a bola e está relativamente próxima Time não possui a bola e o alvo está relativamente proximo Adversário possui a bola e está relativamente próximo Adversário executou um passe e a trajetória da bola passa relativamente próxima ao jogador 30+X+Y-Z Intercept Kick X = habilidade de chute; Y = distância do gol; Z = adversários cortando trajetória da bola Jogador possui a bola e está no campo de ataque 10+X-Y-Z 50+X-Y+Z Kick X = habilidade de chute; Y = distância do gol; Z = distância do goleiro adversário ao gol Jogador possui a bola e goleiro adversário está relativamente longe do gol Assist X = habilidade de passe; Y = distância do companheiro ao gol; Z = distância do companheiro ao jogador; W = adversários próximos ao companheiro Jogador possui a bola e está relativamente próximo ao gol adversário 10+X-Y+Z-W ALEATÓRIAS PESO AÇÃO 2 Kick 2 Pass 2 Run 2 Halt 1 Hold ROLE: GK PESO 500 10+X-Y 50+X-Y+Z 500 50+X-Y 100 AÇÃO CONDIÇÃO PARÂMETROS - Bola está longe X = velocidade do jogador; Y = distância da bola X = habilidade de desarme do goleiro; Y = distância do atacante; Z = distância dos defensores Nenhum time possui a bola e ela está próxima ao goleiro Defend - Bola foi chutada em direção ao gol Intercept X = habilidade de desarme do goleiro; Y = distância da bola; Bola foi cruzada na área CloseAngle - Bola está próxima ou dentro da área RunToPosition RunToBallTarget Challenge Atacante está próximo ao gol e defensores estão longe (típico "mano-a-mano") <?xml version="1.0"?> <simInit> <field> <width>358</width> <length>493</length> </field> <team> <name>Real Desportivo</name> <players> <player> <number>1</number> <name>Mario</name> <role>GKC</role> <position> <x>178</x> <y>453</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>2</number> <name>Ricardo</name> <role>WBR</role> <position> <x>291</x> <y>324</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>3</number> <name>Luciano</name> <role>CBC</role> <position> <x>215</x> <y>372</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>4</number> <name>Lauro</name> <role>CBC</role> <position> <x>138</x> <y>378</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>5</number> <name>Boris</name> <role>DMC</role> <position> <x>179</x> <y>313</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>6</number> <name>Batista</name> <role>WBL</role> <position> <x>54</x> <y>316</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>7</number> <name>Washington</name> <role>MFC</role> <position> <x>251</x> <y>200</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>8</number> <name>William</name> <role>MFC</role> <position> <x>114</x> <y>200</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>9</number> <name>Renato</name> <role>STC</role> <position> <x>161</x> <y>59</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>10</number> <name>Joao Pedro</name> <role>AMC</role> <position> <x>179</x> <y>133</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>11</number> <name>Everaldo</name> <role>FWC</role> <position> <x>250</x> <y>79</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> </players> </team> <team> <name>Clube Atletico</name> <players> <player> <number>1</number> <name>Otavio</name> <role>GKC</role> <position> <x>178</x> <y>453</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>2</number> <name>Giovanni</name> <role>WBR</role> <position> <x>298</x> <y>332</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>3</number> <name>Victor Hugo</name> <role>CBC</role> <position> <x>221</x> <y>375</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>4</number> <name>Airton</name> <role>CBC</role> <position> <x>137</x> <y>375</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>5</number> <name>Guido</name> <role>DMC</role> <position> <x>180</x> <y>321</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>6</number> <name>Breno</name> <role>WBL</role> <position> <x>56</x> <y>335</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>7</number> <name>Diniz</name> <role>MFR</role> <position> <x>266</x> <y>229</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>8</number> <name>Guilherme</name> <role>MFL</role> <position> <x>101</x> <y>231</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>9</number> <name>Douglas</name> <role>STC</role> <position> <x>130</x> <y>76</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>10</number> <name>Henrique</name> <role>AMC</role> <position> <x>177</x> <y>135</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> <player> <number>11</number> <name>Matias</name> <role>STC</role> <position> <x>229</x> <y>68</y> </position> <abilities> <strength>10</strength> <resistance>10</resistance> <jumping>10</jumping> <speed>10</speed> <creativity>10</creativity> <mentality>10</mentality> <heading>10</heading> <tackling>10</tackling> <dribbling>10</dribbling> <finishing>10</finishing> <passing>10</passing> <technique>10</technique> <set_pieces>10</set_pieces> <marking>10</marking> <positioning>10</positioning> </abilities> </player> </players> </team> </simInit> Simulação de Jogos Cooperativos Baseada em Decisões de Múltiplos Humanos e Agentes Proposta Aluno: Peter Furtado Dam Matrícula: 06116783 Orientador: Prof. Marcos V. Villas Período: 2009.1 Data de Entrega: 13 de abril de 2009 _______________________________________________________ _______________________________________________________ SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 Índice 1 Introdução 2 Estado da Arte ................................................................................................................ 2 .......................................................................................................... 4 3 Proposta e Objetivos do Trabalho .............................................................................. 3.1 Sistema de posicionamento de elementos .............................................................. 8 ............................................................................ 8 ............................................................................................. 8 3.2 Sistema de regras bem definido 3.3 Sistema de atributos 3.4 Sistema de tomada e processamento de decisão 3.5 Sistema de turnos ..................................................... ................................................................................................ 3.6 Sistema de saída de dados .................................................................................... 3.7 Sistema de apresentação do estado da simulação 4 Plano de Ação .................................................. ........................................................................................................... 5 Referências Bibliográficas 7 ........................................................................................... ‐ 1 ‐ PUC – Rio – Pontifícia Universidade Católica 8 8 9 9 10 11 SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 1. Introdução A simulação é uma área da computação que chama bastante atenção, pois existem vários estudos nesta área e, quando é bem feita, impressiona pelo grau de realismo que pode atingir, fazendo com que os usuários se envolvam profundamente com a experiência proporcionada pela simulação. Quase sempre envolve muitas fórmulas e contas, além de algoritmos complexos para que atinja esse maior grau de realismo. Em alguns casos a simulação se mistura com sistemas de tomada de decisão, principalmente quando é uma simulação que, em sua natureza, depende de vários agentes. Isso é bem comum em jogos atualmente, principalmente nos que envolvem equipes. Nem sempre toda a equipe de um jogo é composta por pessoas reais, então o sistema precisa ter um sistema de inteligência artificial capaz de preencher esses lugares, garantindo que essa equipe possa ainda ser completamente funcional. Uma tendência que vem se apresentando é o surgimento de jogos para múltiplos jogadores. Portanto, além do sistema ser capaz de interpretar as informações de decisões tomadas pelo próprio sistema, precisa ter um mecanismo que gerencie vários usuários tomando as suas próprias decisões independentes. Este mecanismo capturará todas as informações e as usará para fazer os cálculos necessários da sua simulação. O futebol é um tema bastante interessante e explorado em alguns aspectos na simulação. É um tema clássico para estudos de sistemas multi‐agentes por ser, segundo Moemeng [1], um problema distribuído de ambiente colaborativo e competitivo. É colaborativo porque envolve um conjunto de agentes que buscam obter êxito em uma tarefa através da colaboração entre si, e é competitivo porque existe um outro conjunto de agentes rivais, onde somente um destes conjuntos pode sair vitorioso. O conjunto de regras é relativamente bem conhecido pela maioria das pessoas e envolve um apelo emocional geralmente maior do que outras possíveis simulações. Em cima desta simulação, é possível criar um conceito de comunidade, onde pessoas participam da simulação através de uma representação virtual. Uma pessoa na vida real pode ser representada por um personagem no ambiente virtual, e, através deste, participa efetivamente tomando decisões por ele a fim de influenciar o resultado da simulação. Trata‐se, então, de um sistema de simulação de ambiente futebolístico virtual, onde os personagens (agentes) desta simulação são inúmeros humanos e computadores. Os personagens se reunirão em equipes, com a intenção de atingirem o sucesso pessoal, mas que dependerá necessariamente do sucesso coletivo. ‐ 2 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 No conjunto de jogos eletrônicos de futebol que existem hoje é possível destacar alguns tipos de simulação. Alguns permitem que o usuário desenvolva um personagem e tenha uma carreira, outros se baseiam na equipe inteira, onde o usuário não tem definido um personagem fixo. Mas nenhum destes simuladores possui como ponto chave o desenvolvimento das habilidades de um personagem e na subsequente interação feita pelo usuário com o sistema. Esta linha de jogo segue um gênero conhecido como RPG, do inglês Role Playing Game (jogo de interpretação), que tem, como base, o desenvolvimento de vários aspectos de um personagem baseado em decisões tomadas durante o longo de uma história. Este projeto tem, como objetivo, desenvolver uma simulação em dois aspectos: o desenvolvimento de um personagem, como um RPG, e a simulação de partidas de futebol, onde múltiplos usuários e jogadores controlados pela máquina (com o apoio de técnicas de inteligência artificial) tomarão decisões para cada ação executada por seus personagens. As decisões dos jogadores, aliado às habilidades que desenvolveram para seus personagens, contribuirão para que a sua equipe seja vitoriosa ao fim da simulação de uma partida. Existem muitos trabalhos em ambos os aspectos acima citados, mas não conheço um que utilize as duas, e por este motivo surgiu o interesse em estudar uma implementação que tire proveito de todos estes elementos. ‐ 3 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 2. Estado da Arte Na seção anterior abordei os tipos de simulação que dizem respeito a este trabalho. Existem vários trabalhos que também abordam uma ou outra simulação, e quase todos são jogos. Existe um gênero de jogo chamado “fantasy football” que aborda uma simulação de partida de futebol. Em quase todos estes jogos o usuário é um gerente, ou técnico, de um clube e a simulação se dá somente no momento das partidas. A diferença é que não existe intervenção humana durante a simulação, ou seja, todas as ações são decididas pela inteligência artificial do jogo. Basicamente a simulação recebe uma entrada de informações, definidas pelo usuário, e faz um cálculo para gerar o resultado final. Alguns fazem cálculos para apenas o resultado, outros fazem a simulação completa, jogada por jogada, para produzir de forma mais realista esse resultado. As informações quase sempre são (1) esquema tático, (2) definição de posições dos jogadores e (3) escalação. Para estas informações não existe uma evolução de um personagem, pois são puramente baseadas no conhecimento que o usuário tem do jogo. É possível classificar o “fantasy football” em pelo menos três tipos: básico, parcial e completo. O básico é quando o único elemento presente é o controle de uma equipe, porém sem simulação. É o caso do Cartola FC [2], onde os jogadores existem na vida real. O usuário cria uma equipe e seleciona os jogadores da sua equipe. Estes jogadores não são exclusivos para cada equipe e não há partida simulada, ou seja, não há enfrentamento entre as equipes. Cada equipe soma pontos de acordo com o desempenho dos jogadores no mundo real. Este tipo de jogo é bastante comum por não envolver muitas complicações técnicas, porém exige bastante manutenção para atualizar o desempenho de cada jogador. O Cartola FC funciona somente durante o Campeonato Brasileiro de futebol, e somente para a série A (20 equipes). O “fantasy football” parcial é quando existe simulação, independentemente da sua complexidade. Existem exemplos muito simplistas e outros com um grau de complexidade enorme. Geralmente neste tipo de jogo o usuário é técnico de um clube que existe no mundo real com jogadores também reais. A diferença é que nestes jogos não há uma ligação contínua entre o mundo virtual e o mundo real, ou seja, uma vez que se está jogando a situação dos clubes e dos jogadores virtuais pode e provavelmente não será a mesma do mundo real. Existe enfrentamento direto entre os clubes e os resultados são simulados. Um exemplo é o Elifoot [3] que existe há bastante tempo. Nas suas versões iniciais a simulação era muito simples: os jogadores possuíam ‐ 4 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 apenas um atributo e não havia simulação de jogadas, apenas demonstrava quando era marcado gol. Um outro exemplo é o Football Manager [4]. Este jogo é consideravelmente mais complexo que o Elifoot, onde os jogadores possuem uma grande quantidade de atributos e a simulação é feita jogada por jogada, sendo exibida em forma de texto. Após algumas versões o jogo passou a exibir o jogo em tempo real, em um campo bidimensional. No tipo completo de “fantasy football” não existe mais nada ligando ao mundo real: os jogadores são puramente virtuais, bem como os times e quaisquer outros elementos do âmbito futebolístico. Há também simulação de partidas, bem como no tipo parcial. É, basicamente, a única diferença entre os dois tipos, podendo a “engine” (sistema central do jogo) ser a mesma em ambos os casos. Outro estilo de jogo que utiliza técnicas de simulação são os jogos de futebol, como FIFA Soccer [5] e Pro Evolution Soccer [6]. Estes jogos dão ao usuário a possibilidade de participar ativamente da partida. Além disto, permite que vários usuários joguem ao mesmo tempo, mas em ambos os casos o usuário não controla somente um jogador. O jogador controlado é constantemente alterado, ou seja, não há ainda o conceito de personagem. É possível até mesmo ser técnico, pois o usuário tem a possibilidade de alterar padrões táticos e fazer substituições, mas estes jogos raramente são jogados com mais de duas pessoas ao mesmo tempo, geralmente uma em cada equipe. Outro fato é que nestes jogos não há uma identificação forte entre um jogador e o usuário, pois ele controla vários ao mesmo tempo. O elemento interessante do RPG está exatamente na ligação emocional entre a pessoa e o personagem por ela interpretada. Alheio a tudo citado acima existe uma competição muito interessante: RoboCup [7]. O RoboCup é uma competição entre desenvolvedores, onde a idéia é construir uma IA (inteligência artificial) capaz de tomar decisões. Cada time é representado por uma IA, que é incorporado a um servidor do RoboCup para disputar partidas contra outras IA. As partidas são simuladas em tempo real pelo servidor, que é a única máquina que sabe todas as variáveis do jogo. As máquinas cliente (uma para cada equipe) são chamadas para tomar decisões para cada um dos seus jogadores e comissão técnica. As informações que essas máquinas recebem não são integrais, ou seja, são defasadas para simular a percepção humana que cada agente tem da situação. Uma iniciativa para a união entre RPG e simulação de partidas está presente no jogo New Star Soccer [8]. O usuário é representado no jogo por um único personagem que ele precisa evoluir para conquistar fama e sucesso. Esta fama e sucesso vêm de acordo com decisões que o ‐ 5 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 usuário escolhe em fatores fora do campo de jogo e durante a simulação de uma partida. Ao decorrer da partida são apresentadas opções ao jogador, dependendo das suas escolhas a atuação do seu personagem pode ser boa ou ruim, em uma escala de 1 a 10. A sequência de jogos define a relação do personagem com o treinador, o restante do elenco, a torcida, família, amigos, patrocinadores e outros meios sociais. Nas versões mais recentes é possível até mesmo jogar (graficamente semelhante aos jogos mais antigos de FIFA Soccer) a partida. É uma simulação muito interessante, porém só se pode jogar com um usuário, ou seja, não existem múltiplos usuários e, consequentemente, relação entre estes jogadores. Fugindo um pouco do futebol existe um jogo que simula um ambiente do cotidiano de músicos. Trata‐se do Popmundo [9]. O Popmundo é uma espécie de RPG, onde o usuário é representado por um músico, que pode participar de uma banda musical. O desempenho da banda, tanto nos shows como no geral, depende do desempenho individual de cada membro. O empenho que cada usuário tem com o seu personagem refletirá no reconhecimento e fama que ele obterá no jogo. Essa forma de induzir um pensamento coletivo, ou seja, uma comunidade, através de um jogo é pouco explorada com o tema futebol, mas tem potencial para ser amplamente utilizado, pois em sua natureza é uma atividade coletiva. ‐ 6 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 3. Proposta e Objetivos do Trabalho Objetivos Gerais Neste trabalho a proposta é estudar e desenvolver algoritmos de simulação de partida em tempo real com a possibilidade de interação de múltiplos usuários. Basicamente trata‐se da simulação de uma partida completa, descrita anteriormente, através da simulação de cada jogada da partida. A simulação da partida proporcionará a possibilidade real de testar habilidades desenvolvidas para o personagem, mas ao mesmo tempo usar da capacidade de decisão do usuário representado por este personagem. Além disto, existe a intenção de estudar mecanismos de maior interação com a partida, de forma a criar maior dificuldade e diversão. É imperativo que múltiplos usuários possam interagir na mesma partida para que exista uma dependência entre usuários do sistema, fazendo com que todos de uma mesma equipe dependam do desempenho individual de cada membro para atingirem suas próprias metas pessoais. Além desta simulação existe toda uma interface necessária para que o usuário desenvolva o seu personagem, ou seja, é preciso criar também um ambiente cotidiano simulado onde o usuário precisará tomar decisões em fatores que não sejam dentro da partida. Por exemplo: treinamento, aquisição de bens, contratos de patrocinadores, relação com a mídia ou qualquer outro fator que esteja presente em um ambiente do cotidiano futebolístico. Esta simulação não será abordada neste projeto por se tratar de dois sistemas diferentes onde ambos têm um elevado grau de complexidade. Por motivos de tempo, foi escolhida a simulação de partida, que é tecnicamente mais complicada e menos explorada. O objetivo do trabalho é produzir um sistema que possa ser posteriormente incorporado facilmente a um ambiente simulado que forneça os dados iniciais para a simulação da partida e disponha de uma interface para a interação em tempo real com esta simulação para que um ou mais usuários possam interferir diretamente no resultado final da partida. Em relação ao que já existe no estado da arte, o trabalho proporcionará um avanço no sentido de que vários usuários podem influenciar de várias maneiras a simulação em tempo real, mas sempre representados por um único personagem, o que visa a criar uma ligação emocional com este personagem. ‐ 7 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 Objetivos Específicos Para atingir esta meta, alguns itens precisarão ser desenvolvidos. A seguir serão apresentados estes itens e a descrição de cada. 3.1 Sistema de posicionamento de elementos É necessário, para iniciar o sistema de simulação, que este sistema possa receber informações de jogadores, comissão técnica e, principalmente, instruções táticas. Com estes dados os agentes precisarão se posicionar de acordo para dar início à partida. 3.2 Sistema de regras bem definido Será de suma importância definir as regras do jogo para que os agentes possam tomar as suas decisões. Essas regras precisam ser interpretadas pelo simulador e por cada agente que estará envolvido na simulação, além de proibir ações ilegais que o usuário possa cometer. 3.3 Sistema de atributos Cada agente no sistema possuirá um conjunto de atributos dependendo do seu papel no jogo. A princípio podemos dividir em três funções: goleiro, jogador de linha e técnico. Cada um dos três terá um conjunto diferente de atributos que influenciarão na capacidade de executar cada decisão tomada. 3.4 Sistema de tomada e processamento de decisão Os agentes do sistema precisarão tomar decisão quando não estiverem sob controle de um usuário. Estas decisões precisam ser tomadas com base nas regras que foram definidas, na definição tática e no seu conjunto de atributos. Estes agentes precisam ser inteligentes o suficiente para não tentarem executar uma ação que eles possuem pouquíssimo talento, além de precisarem respeitar, dentro de certo limite, os padrões táticos definidos para eles. Uma vez que o agente decidiu qual ação realizar ele precisará informar ao simulador, que recolherá todas as decisões que ele precisa e calculará o resultado daquele instante. 3.5 Sistema de turnos Considero que a melhor maneira de implementar a interação com o sistema é trabalhar em turnos, ou seja, o simulador funcionará em ciclos. A cada ciclo o simulador esperará uma decisão de cada agente e, com todas essas informações, faz o processamento necessário para calcular o resultado do ciclo, retornando, para cada agente, a situação atual. ‐ 8 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 3.6 Sistema de saída de dados É importante, também, criar uma interface bem definida para a comunicação do resultado dos turnos a um sistema que apresente o estado atual da simulaçao para que os usuários tenham ciência do que está ocorrendo na partida. 3.7 Sistema de apresentação do estado da simulação Uma vez que toda a simulação de um turno foi concluída é preciso apresentar os dados, ou seja, as informações atualizadas daquele instante, para o usuário. Desta maneira o usuário saberá o que ocorreu e o ajudará a tomar a sua próxima decisão. Para não criar complicações técnicas foi escolhido criar um sistema de apresentação por texto, descrevendo o estado atual ao redor do personagem do usuário que está recebendo o texto. Esta forma de apresentação já se provou relativamente eficiente e menos complexo de implementar. Depois que todos estes itens estiverem devidamente funcionando, é esperado ter um sistema completo de simulação de uma partida, capaz de receber instruções de nenhum, um ou vários usuários, produzindo resultados coerentes. Para apresentar o sistema serão feitas várias simulações, alterando informações iniciais (conjunto de jogadores, instruções táticas) e interagindo com a simulação com nenhum, um e mais de um usuário. ‐ 9 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 4. Plano de Ação Antes de realmente fazer qualquer algoritmo de simulação será preciso criar um ambiente capaz de receber e reunir todas as informações que a simulação utilizará. Também será preciso criar uma forma de analisar o resultado gerado, então será determinada uma maneira de ler este resultado. Uma vez que estes ambientes estiverem funcionando é que a simulação poderá ser atacada de fato. 4.1 Estudos a serem realizados • Uma interface (API) básica para “input” (entrada) de dados para o simulador • Uma interface (API) básica para “output” (saída) de dados do simulador • Como implementar um sistema multi‐agente • Como criar “micro‐visões” para cada agente (percepção simulada) • Como estabelecer regras e limites que sejam respeitados durante a tomada de decisão • Uma interface (API) para receber instruções de um usuário e sobrescrever a decisão de um agente que represente o personagem deste usuário • Como compor todas as informações e calcular um resultado com base em múltiplas variáveis de cada agente 4.2 Tecnologias utilizadas Para que o sistema seja acessível a múltiplos usuários que utilizem qualquer sistema operacional capaz de acessar páginas de internet foi escolhido o uso de tecnologia web. Inicialmente será utilizada uma interface gráfica local para testes, então a linguagem escolhida foi Java por alguns motivos: é portável, possui ferramentas de desenvolvimento poderosas e gratuitas e é facilmente acoplável em um sistema web (JSP). ‐ 10 ‐ PUC – Rio – Pontifícia Universidade Católica SIMULAÇÃO DE JOGOS COOPERATIVOS BASEADA EM DECISÕES DE MÚLTIPLOS HUMANOS E AGENTES Peter Furtado Dam Matrícula: 0611678 5. Referências Bibliográficas [1] P. Moemeng, Issues in Soccer Simulation Software Development, http://www.journal.au.edu/au_techno/2004/apr04/vol7num4_article04.pdf, Abril, 2004. [2] Cartola FC, http://cartolafc.globo.com/, Abril, 2009. [3] Elifoot, http://www.elifoot.net/, Abril, 2009. [4] Football Manager, http://www.footballmanager.com/, Abril, 2009. [5] FIFA Soccer, http://www.fifa09.ea.com/br, Abril, 2009. [6] Pro Evolution Soccer, http://www.konami.com/games/pes09/, Abril, 2009. [7] RoboCup, http://www.robocup.org, Abril, 2009. [8] New Star Soccer, http://www.newstargames.com/, Abril, 2009. [9] Popmundo, http://www.popmundo.com/, Abril, 2009. ‐ 11 ‐ PUC – Rio – Pontifícia Universidade Católica