Ejemplo n.º 1
0
        public void TrainAllControllers()
        {
            // Arena map
            Boolean endoftraining = false;

            if (Initialize_Navigation())
            {
                while (!endoftraining)
                {
                    endoftraining = TrainNavigationController();
                }

                Console.WriteLine("\n Training Navigation Controller ended. (arena)\n");
                //Console.ReadKey();
            }

            // Maze map
            endoftraining = false;
            if (Initialize_Navigation2())
            {
                while (!endoftraining)
                {
                    endoftraining = TrainNavigationController2();
                }

                Console.WriteLine("\n Training Navigation Controller ended. (maze)\n");
                //Console.ReadKey();
            }

            // Combat map
            endoftraining = false;
            if (Initialize_Combat())
            {
                while (!endoftraining)
                {
                    endoftraining = TrainCombatController();
                }

                Console.WriteLine("\n Training Combat Controller ended.\n");
                //Console.ReadKey();
            }

            // Initialize with Ultimate Map
            agentsinit_ultimate = new List <Position>();
            items_ultimate      = new List <Tuple <Position, Int32> >();
            stat_ultimate       = new Statistics(config.botnum);

            ReadRawData(config.map_ultimate);
            CreateMap(TrainingSet.ultimate);

            if (map == null || map.Count <= 0)
            {
                Console.WriteLine("Failed to initialize map.");
                return;
            }

            agents.ResetOrigin((int)(map.Count / 2) - 1);
            if (!(agents.Initialize_Ultimate(agentsinit_ultimate, config)))
            {
                Console.WriteLine("Failed to initialize agents.");
                return;
            }

            loopcount = 0;

            // Train for Ultimate map
            endoftraining = false;
            while (!endoftraining)
            {
                List <Position> items_pickedup;

                if (loopcount == 0)
                {
                    // Initial step

                    view.ShowInit(map, agents.Bots);
                    Console.WriteLine("-- Ultimate map -- ");
                    Console.WriteLine("Start training... ");

                    if (loopcount % 1000 == 0)
                    {
                        Console.WriteLine("> Iteration " + loopcount);
                    }
                    agents.Execute_Ultimate(map, config, stat_ultimate, loopcount, out items_pickedup);

                    // Modify map if items were picked up
                    for (int i = 0; i < items_pickedup.Count; i++)
                    {
                        ItemManagement(map, items_ultimate, items_pickedup[i]);
                    }

                    loopcount++;
                }
                else if (loopcount == config.iterationlimit)
                {
                    // End of iterations

                    stat_ultimate.WriteStat_Ultimate(outputfolder, "stat_ultimate.csv", "visual_ultimate.csv", "localenv_ultimate.csv", config.botnum);
                    stat_ultimate.Visuals(map, config.mapsize, config.botnum, outputfolder, "heatmaps.csv");
                    loopcount++;
                }
                else
                {
                    // Step in training

                    if (loopcount % 1000 == 0)
                    {
                        Console.WriteLine("> Iteration " + loopcount);
                    }
                    agents.Execute_Ultimate(map, config, stat_ultimate, loopcount, out items_pickedup);

                    // Modify map if items were picked up
                    for (int i = 0; i < items_pickedup.Count; i++)
                    {
                        ItemManagement(map, items_ultimate, items_pickedup[i]);
                    }

                    // Check items' respawn cycle
                    ItemRespawnCheck(map, items_ultimate);

                    agents.CheckAgentRespawn(config);

                    loopcount++;
                }

                endoftraining = loopcount > config.iterationlimit;
            }

            Console.WriteLine("\n Training for Ultimate map ended.\n");
            Console.ReadKey();
        }