You are here

Projeto

Proposta

A proposta do projeto é a implementação de um mecanismo para controlar um jogo, utilizando diversos recursos da plataforma para exemplificar a evolução humana com os diversos módulos da arquitetura.

Jogo

Como base de estudo, utilizaremos o jogo de blackjack (21). O objetivo é ter mais pontos do que o adversário, mas sem ultrapassar os 21 (caso em que se perde). A mão mais elevada no blackjack é um Ás e uma carta de 10 pontos e é chamada justamente de blackjack. O jogador ganha se a sua mão tiver mais pontos que a do dealer, sem ir acima de 21. Assim uma mão de 21 pontos é a mais elevada e é por isso que o jogo é chamado às vezes de 21. Se o jogador ou o dealer forem acima de 21 perde automaticamente. Depois que todos os jogadores jogaram suas mãos, da esquerda do dealer à direita, o dealer jogará sua mão. O dealer não tem nenhuma vontade livre mas deve sempre jogar por determinadas regras da casa.

A forma prática de jogar é a seguinte:

  • Dealer distribui duas cartas para o jogador dando inicio ao jogo
  • Jogador decide se continua (desce mais uma carta) ou para, em uma sequencia, até que o jogador decida parar
  • Caso o jogador não tenha estourado, o Dealer vira duas cartas e toma sua decisão entre continuar e parar, em uma sequencia, até que o dealer pare
  • Os pontos são computados e o vencedor é definido.

Arquitetura

A arquitetura escolhida para a implementação é CLARION, pois se aplica diretamente a evolução proposta nesse projeto.

Evolução

Podemos dividir as habilidades em 3 tipos:

  • Iniciante - um paralelo com o ser humano seria uma criança que não tem muito raciocínio lógico
  • Intermediário - podemos dizer que seria um jovem ou adulto, com pouca experiência no jogo, mas com algumas ideias que direcionam suas atitudes
  • Avançado - um jovem ou adulto meticuloso, com avançadas capacidades matemáticas, capaz de inferir regras e tendencias.

O jogador iniciante, joga as cartas ao acaso, como se fosse um "chute". Nesse caso, podemos utilizar o módulo de ACS do Clarion, sem regras definidas, sem conhecimentos pré adquiridos, metacognição ou motivação.

A arquitetura é bem simples e pode ser resumida com a figura abaixo.

  • Definição do agente
            //Initialize the Beginner Agent
            PlayerBeginner = World.NewAgent("PlayerBeginer");
            net = AgentInitializer.InitializeImplicitDecisionNetwork(PlayerBeginner, SimplifiedQBPNetwork.Factory);
 
  • Definições das entradas 
            dvs = new List<DimensionValuePair<string, int>>();
            for (int i = 1; i < 21; i++)
            {
                dvs.Add(World.NewDimensionValuePair("Points", i));
            }
            net.Input.AddRange(dvs);
  •  Definições das saídas
            hit = World.NewExternalActionChunk("hit");
            done = World.NewExternalActionChunk("done");
 
            net.Output.Add(hit);
            net.Output.Add(done);
  • Feedbacks

PlayerBeginner.ReceiveFeedback(si, 1.0); //para vitória

PlayerBeginner.ReceiveFeedback(si, 0.0); //para estouro

PlayerBeginner.ReceiveFeedback(si, 0.5); //para empate

Para o jogador intermediário, ele é tendencioso. Após algumas poucas jogadas, pode-se notar que com experiência prática, chega a um valor X, podemos dizer aqui 16 ou 17 que, quando a somatória das cartas atuais atingir esse patamar, podemos parar a jogada, pois as chances são altíssimas de estourar.

A arquitetura do agente intermediário pode ser resumida na figura abaixo.

  • Definição do agente
            PlayerIntermediate = World.NewAgent("PlayerIntermediate");
  • Definição das regras
        private static double FixedRuleDelegateToAvoidExplode(ActivationCollection currentInput, Rule target)
        {
            return (total >= 16) ? 1.0 : 0.0;
        }
        private static double FixedRuleDelegateToDoHit(ActivationCollection currentInput, Rule target)
        {
            return (total < 16) ? 1.0 : 0.0;
        }
 
            SupportCalculator avoidExplode = FixedRuleDelegateToAvoidExplode;
            FixedRule ruleAvoidExplode = AgentInitializer.InitializeActionRule(PlayerIntermediate, FixedRule.Factory, done, avoidExplode);
            PlayerIntermediate.Commit(ruleAvoidExplode);
 
            SupportCalculator doHit = FixedRuleDelegateToDoHit;
            FixedRule ruleDoHit = AgentInitializer.InitializeActionRule(PlayerIntermediate, FixedRule.Factory, hit, doHit);
            PlayerIntermediate.Commit(ruleDoHit);
 
            // Disable Rule Refinement
            PlayerIntermediate.ACS.Parameters.PERFORM_RER_REFINEMENT = false;
 

O jogador avançado pode ter diversas formas de implementação e utilizar diversos recursos da plataforma Clarion, como NACS, metacognição, motivação. Uma maneira mais simples e funcional de se implementar essa estratégia é pela contagem de cartas. Alguns métodos podem ser escolhidos e de tal forma podemos codificar nosso Agente.

Hoje temos bem difundidos alguns métodos de contagem, porém em nosso projeto vamos abordar o sistema HiLo pois ele é uma evolução das regras definidas no Jogador Intermediário desse projeto. Nesse método as cartas possuem pontuação. Cartas 2 a 6 valem 1, 7 a 9 valem 0, 10 a A valem -1. Dessa forma, acompanhando a contagem, após aproximadamente metade das cartas corridas, podemos ter uma noção grande de quais cartas são as predominantes no final do deck (cartas altas ou baixas) e considerar isso na sua meta. Caso tenhamos cartas mais baixas no deck, podemos aumentar nosso limiar . Caso tenhamos cartas mais altas no deck, podemos diminuir nosso limiar.

Tomando por exemplo o Jogador intermediário, que possui um valor fixo de 16 ou 17, o jogador avançado aumenta ou diminui esse valor ao passar do tempo, baseado no peso das cartas restantes no deck. 

A arquitetura do agente avançado pode ser resumida na figura abaixo.

Devido a alguns problemas técnicos, não foi possível a conclusão da implementação do jogador avançado.

Como resultado, pudemos acompanhar melhora significativa na eficiencia do Basico para o Intermediário, de 30% de casos de vitória em 1000 rodadas para o básico, para 60% no intermediário. A queda de estouros foi muito significativa tambem.

O código pode ser encontrado aqui.

 

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer