Ajuda com Desnvolvimento de IA de Luta - Teoria

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por theguitarmester em Qui 03 Jan 2013, 20:13

Olá Pessoal, Preciso de uma ajuda Para Desenvolver um Sistema de IA(Inteligência Artificial) de Luta, como o Personagem Atacar, usar Poder, Pular...
Estou Precisando da TEORIA de como Fazer Isto, por Exemplo, no Mortal Kombat, Quando a Máquina escolhe Atacar, parar, andar a Trente, atrás, Pular, Usar Poder...

Alguem sabe a Teoria das IAs de jogos de Luta?


>>Se conseguir uma Teoria Boa, Irei fazer uma Engine de Luta, e No Futuro até um Criador de jogos de Luta, cmo o Mugen(já tentei um pouco isso, mas não tive vontade de Continuar por alguns motivos, e um dos Fortes Motivo é este da IA).

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por Lukbebalduke em Qui 03 Jan 2013, 20:58

Encontrei este topico:

http://gmbr.forumeiros.com/t8773-resolvidoia-de-jogo-de-luta

Onde um membro faz uma pergunta quase identica, ai o PedroX responde com um link deve te ajudar.

Lukbebalduke

Ranking : Nota B
Número de Mensagens : 764
Data de inscrição : 06/07/2011
Notas recebidas : B - B - A - B
Reputação : 30
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 2

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por theguitarmester em Qui 03 Jan 2013, 21:44

pinpi, Obrigado por Tentar me Ajudar, mas Antes de Postar alguma Pergunta, eu Semre Vejo se Já não há a Resposta, eu Achei esse Tópico, mas só que Seu Link não Está Funcionando.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por Davichococat em Sex 04 Jan 2013, 00:12

Não sei se entendi muito bem sua pergunta, mas vou tentar. Avise se eu não estiver respondendo a dúvida.

Creio que as decisões (de golpe) da máquina são baseadas em padrões aleatórios com probabilidades diferentes dependendo da dificuldade.

Por exemplo: Vamos supor que em um jogo, a máquina tem a opção de escolher entre dois possíveis golpes, que são chutar e esmurrar. Supondo que chutar é um golpe mais poderoso que esmurrar, é de intenção natural do programador que a máquina use menos esse golpe, para dar equilíbrio ao jogo. Os intervalos de tempo entre um golpe ou outro podem ser(citando alguns): Aleatórios, lineares(sempre o mesmo intervalo) ou podem ser modificados de acordo com a configuração de dificuldade escolhida pelo jogador(fácil, médio e díficil, por exemplo).

Então, o jogo poderia funcionar da seguinte maneira(supondo um intervalo linear):
A cada meio segundo, a máquina gera um número aleatório entre 1 e 4. Caso seja um, ela aplica um chute. Caso seja dois, três ou quatro, ela aplica um soco. Logo, há uma probabilidade de 25% para um chute e 75% para um soco.

Suponho que seja isso o que você quer. Pode-se adicionar, é claro, mais golpes, que teriam probabilidades diferentes.

Era isso o que você perguntou?

Davichococat

Número de Mensagens : 182
Data de inscrição : 29/12/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por PedroX em Sex 04 Jan 2013, 00:55

É algo do tipo:

Health menor que 20% = Contra atacar apenas
Caso contrário
Se estiver longe, aproxima. Se estiver perto e não estiver sendo atacado, ataca. Se estiver sendo atacado, defende e ataca quando der. Se está sendo sequenciado por socos, dá rasteira.

É claro que envolve mais coisas. Só que não é tão fácil elaborar uma IA e é testando que se aprende a criar a IA.

Qualquer algoritmo ou ideia relacionados a isso encontrado em outros sites pode ser aplicado. Caso eu ache uma página interessante, avisarei aqui.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por theguitarmester em Sex 04 Jan 2013, 12:21

Davichococat, Não bem essa parte que eu Queria Saber, Não esta errado, mas é mais algo como o Pedro Falou, quando é a hora de Atacar, se Está longe ir para Perto.

Só que eu Quero a Teoria mais Complexas, usadas em jogos, nem sempre que ele está longe ele vai para perto atacar, mas acredito que não é algo usado com aleatório(talves um Pouquinho).

Pedro, se Você achar mais coisas não deixe de Postar, Planejo fazer uma Engine com isto tambem.
Obrigado.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por saim em Sex 04 Jan 2013, 16:36

1 - Máquina de estados finitos. Não consigo conceber nem um ye-ar-kung-fu sem ela, imagina um street fighter.
2 - Reação ao momento. Bloquear quando atacado, atacar quando o jogador abrir a guarda. Pra ser honesto com o jogador, saber o que ele está fazendo em função do que se vê na tela, não depender das entradas de comando. Mas pode-se prever o que for previsível, tipo avançar caminhando e, ao chegar perto do jogador, defender mesmo sem ele ter atacado.
3 - Seguir as regras estabelecidas pela própria engine. Meio óbvio, mas importante. Se a engine permite combos, iniciar ataques com golpes que permitem sequencia, etc.

Tudo tirado da minha cabeça, que nunca fez jogos de luta, então siga essas regras por conta própria.
exemplos escreveu:Dificuldade: baixa
Situação: jogador atacando à distância (hadouken)
Estado: parado, de bobeira (longe do jogador)
Reação: 90% de probabilidade de defender, 10% de probabilidade de não fazer nada (levar na cara), 10% de probabilidade de pular o hadouken, aproximando-se do jogador.

Dificuldade: alta (fora isso, a situação é igual)
Situação: jogador atacando à distância (hadouken)
Estado: parado, de bobeira (longe do jogador)
Reação: 40% de probabilidade de defender, 1% de probabilidade de não fazer nada (levar na cara), 59% de probabilidade de pular o hadouken, aproximando-se do jogador.

Dificuldade: média
Situação: jogador atacando de perto
Estado: parado, de bobeira (perto do jogador)
Reação: 40% de probabilidade de defender, 20% de probabilidade de não fazer nada (levar na cara), 40% de contra-atacar.

Dificuldade: qualquer uma
Situação: jogador no meio de um combo
Estado: levando golpe
Reação: 100% de chance de não fazer nada até sair do estado "levando golpe", que tem tempo pra acabar

Dificuldade: baixa
Situação: jogador parado, de bobeira, o contador de tempo já chegou a 100
Estado: parado, de bobeira (longe do jogador)
Reação: a cada 1 segundo, 30% de chance de usar um ataque à distância, 30% de chance de se aproximar do jogador, 10% de chance de provocar o jogador, 30% de chance de não fazer nada, permanecendo no estado.

Lembre-se que os estados só devem mudar nas situações que permitem mudança. Óbvio. Se a IA está levando um golpe, não pode defender a sequencia do combo.

Ah, e as reações também podem levar em conta a health dos dois lutadores e o tempo de luta restante. Mais trabalho, mas IA melhor.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por PedroX em Sex 04 Jan 2013, 18:45

O que pode ser útil é você jogar com alguma pessoa e então ver quais são as reações dependendo de cada situação. Assim a IA será mais humana e consequentemente mais inteligente. Lembre-se de ir anotando cada informação útil, como o health, o estado de cada um (ataque/defesa), o golpe usado em cada situação, entre outros.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por Davichococat em Sex 04 Jan 2013, 18:49

Bem, considerando que já disseram muita coisa, não tenho muito a acrescentar, exceto alguns pontos.

1. Eu conheço vários artigos excelentes de IA, mas estão todos em inglês. Eu posso lhe dar links se você estiver interessado.

2. Algo meio complicado de se fazer(talvez você não ache tão díficil) e que dá muita inteligência(e dificuldade) a alguns IAs:
> Lembrando que se bem planejado, esse IA pode tornar o jogo muito díficil, use com cuidado(pelo menos é o que eu vi em um artigo de IA usando essa técnica e um jogo de exemplo).
Você faz uma tabela de golpes que o jogador aplicou, e dá a elas uma porcentagem de "uso". Em situações em que o IA precisa decidir qual golpe aplicar, ou se defender(como no caso em que a opção de atacar é escolhida, na lista de probabilidades que o saim citou), o IA vai na tabela de frequência do jogador, e baseia seu golpe nesta lista. Caso o jogador esteja perto e se notar um padrão agressivo nele(ou seja, ele não fica parado frequentemente), e o IA ver que na tabela 73% das vezes em que ele fica perto do jogador ele leva um soco, o IA escolhe se defender(seria bom se o IA também tivesse uma probabilidade de escolher outro golpe, para lhe dar uma certa característica humana e torná-lo mais díficil de prever).

Isso funciona melhor em jogos como "pedra, papel, tesoura" e outros, mas talvez você consiga fazer algo legal. Há mais neurociência aí do que você pode imaginar.

Eu também concordo plenamente com o que o PedroX disse, a melhor maneira de encontrar bases para programar inteligências artificiais é observando os padrões humanos e animais, como é o caso acima.

Boa sorte.

Davichococat

Número de Mensagens : 182
Data de inscrição : 29/12/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por theguitarmester em Sex 04 Jan 2013, 19:35

Valeu SAIM, Vou tirar uma Crande Base do que Você disse, Vou ver se Começo a fazer um Projeto, sempre tive vontade de Fazer um Bom Jogo de Luta, e Acredito que Muito aqui Tenham, mas não é algo que se Vê Muito por aqui.

Pedro, vou ver se Jogo com alguem para 'Examiná-lo', mas por Enquanto, vou jogar com a Própia Máquina do MK pelo Emulador de S.Nintendo.(no MK 3 é Muito Ruim Matar o Motaro!)

Davichococat, Nao sei o Nome que chamam para isso que você disse, mas é Basicamente "a Máquina Estudando o Adversário", é Algo que pode ser Considerado, e eu Acho que isso é usado em Alguns jogos(como o MK), porque as Vezes, no começo você dá varias vezes o Mesmo golpe e Acerta, mas daí no mesmo Combate, eles começam a defender tudo.


Obrigado a Todos Que Me Ajudaram, Já Tenho uma Base, Mas qualquer nova Informação, é so Postarem.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por PedroX em Sex 04 Jan 2013, 19:50

Como última dica (talvez), recomendo que baixe um exemplo de luta. Seria melhor que Não tivesse AI, mas que tivesse um bom funcionamento (bounding boxes, entre outros) e fosse para dois jogadores. Então o que você irá precisar fazer é adaptar para que durante a luta seja gerado um log. Por exemplo:

P1 deu soco, estava com 20% de health e na defensiva (recuando). P2 não defendeu, estava com 30% de health e de costas, tinha acabado de pular.

Seria complicado fazer a IA aprender por si só baseando-se apenas nos logs. Então você mesmo interpreta os dados e aplica no seu jogo.

Outras informações: http://scratch.mit.edu/forums/viewtopic.php?pid=15790

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por Kabeção em Sex 04 Jan 2013, 20:38

Já Tenho uma Base, Mas qualquer nova Informação, é so Postarem.
Também já pensei bastante sobre a teoria por trás de jogos de luta e tenho algumas coisa a acrescentar.

Se a IA está levando um golpe, não pode defender a sequencia do combo
Esse é o ponto crítico de uma AI de luta.
A máquina deve ser capaz de fazer tudo o que o jogador pode e vice-e-versa.
Por isso você não deve programar algo para o jogador e outro separado para a cpu.
Os dois podem usar o mesmo sistema de máquina de estado.
A diferente é o jogador controla os estado manualmente e o AI automaticamente por exemplo:

Ao invez de fazer algo assim
Código:
// objJogador
if key_pressed(A) player_executar_soco();

// objCPU
if chance_de_chutar == true ai_executar_soco();

Defina estados.
Os estado possuem ids:
0 -> chute fraco
1 -> chute medio
2 -> chute forte

Código:
// objPersonagem - jogador e cpu serem instancias do mesmo objeto
switch (tipo) {
    case 'player':
        // Jogador - objPersonagem com variável que o define como jogador
        if key_pressed(A) estado = 0;
    break;

    case 'cpu':
        // AI - objPersonagem com variável que o define como CPU
        if chance_de_chutar estado = 0;
    break;
}

switch (estado) {
    case 0:
        // animar chute fraco
    break;

    case 1:
        // animar chute medio
    break;

    case 2:
        // animar chute alto
    break;
}

Assim você faz o mais difícil que é a ação dos estado uma só vez e controla tudo por ids evitando diferenças entre animação/ação/reação do jogador e da cpu e diminui o trabalho.

Ids também tornam muitas coisas possível como replays.
Pra fazer um sistema de replays o que você pode fazer é salvar as ids na ordem e no tempo em que são acionadas em uma uma string, por exemplo:

// id - tempo_em_steps_desda_do_inicio_da_luta
1-20,0-50,3-76,0-80

E então fazer um interpretador que le a id, a defini no tempo certo e passa para a próxima depois da vírgula.

Também é fácil fazer uma tabela de comandos mais usa-dos como foi sugerido acima.


É muito importante que as animações não tenham nada randomico.
O jogador deve saber exatamente o que vai acontecer.
Se as coisas forem diferentes toda vez que executar um comando, mesmo que só um pouco, a jogabilidade vai ser muito prejudicada.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por theguitarmester em Sex 04 Jan 2013, 21:00

Kabeção, A Tempos que venho Pensando em Sistemas de Jogos de Lutas (há nada Praticamente Sobre isso No Fórum), esse Code de Estados que você me Mostrou, eu já Tive essa idéia, e acho que Você, como eu, Há viu no Programa MUGEN, ele é um Programa que tem bastante coisa, e tem um Bom sistema de IA, quero Fazer Algo parecido, e Sei que Não é só eu(a uns Tempos, vi um Jogo em que o Tiger queria fazer de Luta, que colocasse Personagens do Fórum). Esse Sistema de ESTADO, foi algo que fui Percebendo Tambem que é a Melhor Maneira de Organização Tambem, Fica muito Melhor.

o Seu sistema de IDs, eu ainda não Tinha Pensado, essas Ids seriam para gravar os Estados, né? é um Bom sitema mesmo e deve Ser o Que é usado em Diversos Jogos e Emuladores, Vou ver se Consigo Algo Parecido.

Vou Tentar usar o Mínimo Possível o Sistema de Random, vou tentar fazer a IA se Comportar de Acordo com o que o jogador se Comporta.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Ajuda com Desnvolvimento de IA de Luta - Teoria

Mensagem por Conteúdo patrocinado Hoje à(s) 15:45


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum