Exemple #1
0
        public void Entrenar()
        {
            List <InputData> lista = ModeloAprendizaje.Estructuras2List();

            System.Console.WriteLine("Emprezando Entrenamiento: " + this.Descripcion());
            IDataView dataview = mlContext.Data.LoadFromEnumerable <InputData>(lista);


            //10% para testing
            DataOperationsCatalog.TrainTestData dataSplit = mlContext.Data.TrainTestSplit(dataview, testFraction: _level);
            IDataView trainData = dataSplit.TrainSet;
            IDataView testData  = dataSplit.TestSet;


            IEstimator <ITransformer> dataPrepEstimator =
                mlContext.Transforms.NormalizeMinMax("Features");


            ITransformer dataPrepTransformer     = dataPrepEstimator.Fit(trainData);
            IDataView    transformedTrainingData = dataPrepTransformer.Transform(trainData);

            var sdcaEstimator = mlContext.Regression.Trainers.Sdca();

            var trainedModel = sdcaEstimator.Fit(transformedTrainingData);


            //TESTEO
            // Measure trained model performance
            // Apply data prep transformer to test data
            IDataView transformedTestData = dataPrepTransformer.Transform(testData);

            // Use trained model to make inferences on test data
            IDataView testDataPredictions = trainedModel.Transform(transformedTestData);

            // Extract model metrics and get RSquared
            RegressionMetrics trainedModelMetrics = mlContext.Regression.Evaluate(testDataPredictions);
            double            rSquared            = trainedModelMetrics.RSquared;

            System.Console.WriteLine("ERROR {0}", rSquared);
            string fichero = "Level" + (int)(_level * 100) + ".zip";

            mlContext.Model.Save(trainedModel, dataview.Schema, fichero);



            System.Console.WriteLine("Fin Entrenamiento: " + this.Descripcion());
        }
Exemple #2
0
        public Partida Jugar(bool pintar = true)
        {
            Turno?ganador;



            do
            {
                //turno
                if (this.Turno == Turno.JUGADOR1)
                {
                    this.Jugador1.SiguienteMovimiento(this);
                }
                else
                {
                    this.Jugador2.SiguienteMovimiento(this);
                }
                string movimiento = ModeloAprendizaje.Tablero2String(this);
                this.Movimientos.Add(movimiento);
                if (pintar)
                {
                    this.Pintar();
                }
                //comprobar ganador
                this.Movimiento++;
                ganador = Ganador();
            } while (this.Movimiento < (this.Rango * this.Rango) && ganador == null);

            if (ganador != null)
            {
                if (pintar)
                {
                    System.Console.WriteLine("Ganador: {0}", ganador);
                }
                this.Estado = (ganador == Turno.JUGADOR2) ? Progreso.JUGADOR1GANA : Progreso.JUGADOR2GANA;
            }
            else if (pintar)
            {
                System.Console.WriteLine("TABLAS", ganador);
            }



            return(this);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            ILevel  jugador1 = new PlayerRandom();
            ILevel  jugador2 = new PlayerRandom();
            Partida partida;
            int     numeroPartidasModelo = 50;

            Console.WriteLine("Generando  {0} Partidas como modelo", numeroPartidasModelo);

            do
            {
                partida = new Partida(rango: 3, jugador1, jugador2);
                partida.Jugar(false);
                ModeloAprendizaje.AlmacenarModelo(partida);
            } while (ModeloAprendizaje.partidas.Count < numeroPartidasModelo);



            Console.WriteLine("Empezando partidas");



            int auxResultadoJugador1 = 0;
            int auxResultadoJugador2 = 0;
            int auxtablas            = 0;

            //Partida

            jugador2 = new PlayerIA(0.90);
            //  jugador1 =
            //    jugador2 = new PlayerIA(0.90);
            jugador1 = new PlayerIA(0.25, true);
            for (int j = 0; j < 2000; j++)
            {
                partida = new Partida(rango: 3, jugador1, jugador2);

                partida.Jugar(false);
                switch (partida.Estado)
                {
                case Progreso.JUGADOR1GANA: auxResultadoJugador2++; break;

                case Progreso.JUGADOR2GANA: auxResultadoJugador1++; break;

                default: auxtablas++; break;
                }
            }
            System.Console.WriteLine("********************************************************************");
            System.Console.WriteLine("jugador1-{0}:{1}", partida.Jugador1.Descripcion(), auxResultadoJugador1);
            System.Console.WriteLine("jugador2-{0}:{1}", partida.Jugador2.Descripcion(), auxResultadoJugador2);
            System.Console.WriteLine("Empate:{0}", auxtablas);
            System.Console.WriteLine("********************************************************************");


            ILevel[] jugadores = new ILevel[1];
            jugadores[0] = (ILevel) new PlayerIA(0.90);
            //   jugadores[1] = (ILevel)new PlayerIA(0.25);
            //    jugadores[2] = (ILevel)new PlayerIA(0.50);
            //    jugadores[3] = (ILevel)new PlayerIA(0.75);
            //    jugadores[4] = (ILevel)new PlayerIA(0.90);
            ILevel[] jugadores2 = new ILevel[1];
            //   jugadores2[0] = (ILevel)new PlayerRandom();
            //    jugadores2[1] = (ILevel)new PlayerIA(0.25);
            //    jugadores2[2] = (ILevel)new PlayerIA(0.50);
            //    jugadores2[3] = (ILevel)new PlayerIA(0.75);
            //     jugadores2[4] = (ILevel)new PlayerIA(0.90);
            jugadores2[0] = (ILevel) new PlayerIA(0.25);


            int numeroPartidas = 2000;

            foreach (var j1 in jugadores)
            {
                foreach (var j2 in jugadores2)
                {
                    int resultadoJugador1 = 0;
                    int resultadoJugador2 = 0;
                    int tablas            = 0;
                    for (int j = 0; j < numeroPartidas; j++)
                    {
                        var partida1 = new Partida(rango: 3, j1, j2);

                        partida1.Jugar(false);
                        switch (partida1.Estado)
                        {
                        case Progreso.JUGADOR1GANA: resultadoJugador2++; break;

                        case Progreso.JUGADOR2GANA: resultadoJugador1++; break;

                        default: tablas++; break;
                        }
                    }
                    System.Console.WriteLine("**************************-Partidas Jugadas:{0}-****************************************", numeroPartidas);
                    System.Console.WriteLine("jugador1-{0}:{1}", j1.Descripcion(), resultadoJugador1);
                    System.Console.WriteLine("jugador2-{0}:{1}", j2.Descripcion(), resultadoJugador2);
                    System.Console.WriteLine("Empate:{0}", tablas);
                    System.Console.WriteLine("***************************************************************************************");
                }
            }
        }