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(); } }
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(); } }
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"); } }