示例#1
0
        public void AnaliseConvergenciaMaoQuantidadeJogos()
        {
            IList <AnaliseConvergencia> analises = new List <AnaliseConvergencia>();

            for (int numCartasAleatorias = 0; numCartasAleatorias < this.NumeroCartasAleatorias; numCartasAleatorias++)
            {
                Carta[] maoOff = this.GetNovaMaoIneditaOff();

                for (int numJogosJogados = this.QuantidadeInicialJogosSimulados; numJogosJogados <= this.LimiteMaximoJogosSimulados; numJogosJogados += this.PassoSimulacoes)
                {
                    AnaliseConvergencia analise = new AnaliseConvergencia()
                    {
                        NumeroDeCartas = maoOff.Length,
                        Cartas         = maoOff
                    };

                    var watch = System.Diagnostics.Stopwatch.StartNew();

                    analise.QuantidadeDeJogosExecutados = numJogosJogados;
                    analise.Probabilidade = AvaliaProbabilidadeMao.GetRecalculaVitoria(maoOff, (uint)numJogosJogados);

                    watch.Stop();
                    var elapsedMs = watch.ElapsedMilliseconds;
                    analise.TempoDeExecucao = new TimeSpan(elapsedMs * TimeSpan.TicksPerMillisecond);
                    analises.Add(analise);
                }
            }

            // Persiste a analise de convergência
            AnaliseConvergencia.Persiste(analises);
        }
        private void GerarMaosOff()
        {
            for (uint i = 2; i <= 14; i++)
            {
                for (uint j = i; j <= 14; j++)
                {
                    IProbabilidadeMaoInicial probMao = new ProbabilidadeMaoInicial()
                    {
                        NumCarta1   = i,
                        NumCarta2   = j,
                        OffOrSuited = 'O',
                        QuantidadesJogosSimulados = this.QuantidadeJogosPorSimulacao
                    };

                    if (ProbabilidadeMaoInicialContext.JaExisteProbabilidadeCadastrada(probMao))
                    {
                        continue;
                    }

                    Carta[] maoOff = new Carta[] {
                        new Carta(i, Enuns.Naipe.Copas),
                        new Carta(j, Enuns.Naipe.Espadas)
                    };

                    probMao.ProbabilidadeVitoria = AvaliaProbabilidadeMao.GetRecalculaVitoria(maoOff, this.QuantidadeJogosPorSimulacao);

                    ProbabilidadeMaoInicialContext.Persiste(probMao);
                }
            }
        }
        private void GerarMaosSuited()
        {
            for (uint i = 2; i < 14; i++)
            {
                for (uint j = i + 1; j <= 14; j++)
                {
                    IProbabilidadeMaoInicial probMao = new ProbabilidadeMaoInicial()
                    {
                        NumCarta1   = i,
                        NumCarta2   = j,
                        OffOrSuited = 'S',
                        QuantidadesJogosSimulados = this.QuantidadeJogosPorSimulacao
                    };

                    if (ProbabilidadeMaoInicialContext.JaExisteProbabilidadeCadastrada(probMao))
                    {
                        continue;
                    }

                    Carta[] maoSuited = new Carta[] {
                        new Carta(i, Enuns.Naipe.Copas),
                        new Carta(j, Enuns.Naipe.Copas)
                    };

                    string chaveMaoSuited = maoSuited[0].ToString() + " " + maoSuited[1].ToString();

                    probMao.ProbabilidadeVitoria = AvaliaProbabilidadeMao.GetRecalculaVitoria(maoSuited, this.QuantidadeJogosPorSimulacao);

                    ProbabilidadeMaoInicialContext.Persiste(probMao);
                }
            }
        }
示例#4
0
        public void Teste1()
        {
            IList <Carta> MaoP = new List <Carta>()
            {
                new Carta(2, Enuns.Naipe.Ouros),
                new Carta(2, Enuns.Naipe.Copas)
            };

            Carta[] maoPrimaria = new Carta[]
            {
                new Carta(2, Enuns.Naipe.Ouros),
                new Carta(2, Enuns.Naipe.Copas)
            };

            IList <Carta> MaoS = new List <Carta>()
            {
                new Carta(2, Enuns.Naipe.Ouros),
                new Carta(2, Enuns.Naipe.Copas),
            };

            IList <Carta> Mesa = new List <Carta>()
            {
                new Carta(4, Enuns.Naipe.Paus),
                new Carta(5, Enuns.Naipe.Espadas),
                new Carta(11, Enuns.Naipe.Copas),
                new Carta(11, Enuns.Naipe.Ouros)
            };

            Carta[] mesa = new Carta[]
            {
                new Carta(4, Enuns.Naipe.Paus),
                new Carta(5, Enuns.Naipe.Espadas),
                new Carta(11, Enuns.Naipe.Copas),
                new Carta(11, Enuns.Naipe.Ouros)
            };


            uint numeroDeJogos = 120000;

            float prob   = 0.0f;
            float prob_2 = 0.0f;

            var sw = Stopwatch.StartNew();
            AvaliaProbabilidadeMao teste = new AvaliaProbabilidadeMao(MaoP, null, Mesa, numeroDeJogos);

            teste.Avalia();
            prob_2 = teste.Probabilidade;
            long elapsedMilliseconds = sw.ElapsedMilliseconds;

            sw.Stop();

            sw   = Stopwatch.StartNew();
            prob = AvaliaProbabilidadeMao.GetRecalculaVitoriaParalelo(maoPrimaria, mesa, null, numeroDeJogos, 5);
            long elapsedMilliseconds_2 = sw.ElapsedMilliseconds;

            sw.Stop();

            Console.WriteLine("Singular: " + elapsedMilliseconds + " " + teste.RetornaProbabilidade((int)numeroDeJogos, (int)teste.Vitorias));
            Console.WriteLine("Paralelo: " + elapsedMilliseconds_2 + " " + prob);

            Assert.AreEqual(numeroDeJogos, (teste.Vitorias + teste.Empates + teste.Derrotas));
        }