Esempio n. 1
0
        public static void SimpleTetris()
        {
            Random    rnd   = new Random();
            SimpleNet Kevin = new SimpleNet(0.05, 281, 500, 5);

            Kevin.SetAfT(1, 2);
            Kevin.SetAfNames(AF.Tanh, AF.Sigmoid);
            Kevin.SetAfT(2, 1);


            while (true)
            {
                Console.Clear();
                Tetris.MapAktualisieren(true);


                while (Tetris.leben && Tetris.sinnloseBewegung < 350)
                {
                    Kevin.SetInput(Tetris.GetType2V());
                    Kevin.NeuronValue[0][280] = rnd.NextDouble() * 20 - 10;
                    Kevin.OutputBerechnen();


                    Tetris.BewegungShow(Kevin.GetOutput(), 0.7);

                    //if ((Tetris.sinnloseBewegung + 1) % 70 == 0)
                    //{
                    //    Kevin.ReinforcementLearning(-0.01);
                    //}


                    if (Tetris.punkte != 0)
                    {
                        Kevin.ReinforcementLearning(Tetris.punkte, false);
                    }



                    Console.SetCursorPosition(0, 0);
                    ArrayAusgeben(Kevin.GetOutput());
                    Console.Write(Tetris.punkte);



                    //Console.SetCursorPosition(0, 35);
                    //Console.Write(TetrisKI[iKi].ToString());


                    Tetris.punkte = 0;
                }

                System.Threading.Thread.Sleep(100);
                Kevin.ReinforcementLearning(-1, false);


                Tetris.AllesReset();
            }
        }
Esempio n. 2
0
        public static void Jeff()
        {
            Random      rnd  = new Random();
            NeuronalNet Jeff = new NeuronalNet(0, 209, 200, 100, 5);

            Jeff.StandartInitialisierung();
            Tetris.MapAktualisieren(true);
            bool nochmal = true;

            while (nochmal)
            {
                Tetris.MapAktualisieren(true);
                while (Tetris.leben)
                {
                    Jeff.InputGeben(Tetris.GetV());
                    Jeff.AllesBerechnen();
                    double[] b = Tetris.UserBewegung(Console.ReadKey().KeyChar);
                    Jeff.DeepLearning(b);
                }
                Tetris.AllesReset();
                Console.Clear();
                Console.Write("Nochmal");
                string text = Console.ReadLine();

                if (text == "nein" || text == "n")
                {
                    nochmal = false;
                }
            }
            Console.Clear();

            while (true)
            {
                Console.Clear();
                Tetris.MapAktualisieren(true);


                while (Tetris.leben && !Tetris.kiTutNichts && Tetris.sinnloseBewegung < 350)
                {
                    Console.SetCursorPosition(0, 0);
                    ArrayAusgeben(Jeff.GetOutput());
                    Jeff.InputGeben(Tetris.GetV());
                    Jeff.AllesBerechnen();


                    Tetris.BewegungShow(Jeff.GetOutput(), 0.5);
                }


                Tetris.AllesReset();
            }
        }
Esempio n. 3
0
        public static void Q_Learning_Tetris()
        {
            int        lauf = 0;
            Q_Learning Q    = new Q_Learning(0.9, 0.2, 5, 3);

            while (true)
            {
                Tetris.TetrisSetup();
                Tetris.MapAktualisieren(true);

                while (Tetris.leben)
                {
                    double[] b = new double[5];
                    //Tetris.CheckLocher(18);
                    if (Tetris.punkte <= -300)
                    {
                        Tetris.leben = false;
                    }

                    Tetris.GetPunkteFurFastFolleReihe(5, 19, 18);
                    b[Q.Get_SetAction(Tetris.GetReihe(19, 18), Tetris.punkte)] = 1;
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("Punkte: {0}", Tetris.punkte);


                    Tetris.punkte = 0;
                    Tetris.BewegungShow(b, 0.5);
                    System.Threading.Thread.Sleep(15);
                }
                Q.Get_SetAction(Tetris.GetReihe(19, 18), -500);
                Tetris.AllesReset();
                Console.Clear();
                ++lauf;

                //if(lauf%100==0)
                //    Serialize(Q, @"C:\Users\Gregor\Ki\Q_LearningTable_1.bin");
            }
        }