Beispiel #1
0
        public static BaseEnemy CreateNew(EnemyTypes enemyType, SerializableChromosome chromosome = null, bool isHorde = false)
        {
            BaseEnemy newEnemy;

            switch (enemyType)
            {
            case EnemyTypes.Chicken1: newEnemy = Chicken1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Chicken2: newEnemy = Chicken2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Chicken3: newEnemy = Chicken3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit1: newEnemy = Rabbit1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit2: newEnemy = Rabbit2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit3: newEnemy = Rabbit3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep1: newEnemy = Sheep1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep2: newEnemy = Sheep2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep3: newEnemy = Sheep3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow1: newEnemy = Cow1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow2: newEnemy = Cow2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow3: newEnemy = Cow3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig1: newEnemy = Pig1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig2: newEnemy = Pig2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig3: newEnemy = Pig3EnemyFactory.CreateNew(); break;

            default:
                throw new ArgumentOutOfRangeException(nameof(enemyType), enemyType, null);
            }

            if (isHorde)
            {
                newEnemy.RushEndPoint();
            }
            else
            {
                newEnemy.OnDeath += OnCreateAction;
                newEnemy.FollowLine();
                newEnemy.SetGenetics(chromosome ?? GeneticsManager.GenerateNewChromsome());
            }

            return(newEnemy);
        }
        private static void LoadAllGameData()
        {
            GeneticsManager.Initialize();
            MachineLearningManager.LoadData(TempModelFileName, TempWaveDataFileName);
            LoadDialogue();
            HasLoadedData = true;
#if DEBUG
            if (DebugVariables.ShouldTestDialogue)
            {
                TestDialogue();
            }
            if (DebugVariables.ShouldExportDialogue)
            {
                ExportDialogue();
            }
        }
        private static double ScoreEnemyList(EnemyList enemyList, List <double> partialInput)
        {
            var completedInput = partialInput.DeepClone();

            for (var j = 0; j < MaxEnemies; j++)
            {
                if (j < enemyList.EnemyCountTuples.Count)
                {
                    var currentEnemyType    = enemyList.EnemyCountTuples[j].Item2;
                    var chromosome          = GeneticsManager.GetChromosomesForEnemyType(currentEnemyType).FirstOrDefault();
                    var enemyAttributes     = currentEnemyType.Attributes();
                    var effectiveAttributes = BaseEnemy.GetGeneticAttributes(enemyAttributes, chromosome);

                    completedInput.AddRange(EnemyAttributesToInput(effectiveAttributes));
                }
                else
                {
                    completedInput.AddRange(EnemyToInput(null));
                }
            }

            return(_machineLearningModel.Predict(completedInput.ToArray()));
        }
        private static void TestGenetics()
        {
            GameStateManager.LoadIfNecessary();
            var slr  = 0.8;
            var sm   = 0.8;
            var uslr = 0.9;
            var usm  = 0.2;
            var usd  = 0.21;

            InputCount = (MaxPathingPoints * CountPerPathing) +
                         (MaxWaterPoints * CountPerWater) +
                         (MaxTowers * CountPerTower) +
                         (MaxEnemies * CountPerEnemy);

            var listOfAllTowerTypes = GameStateManager.GetAllTowers();
            var towerList           = new List <BaseStructure>();

            foreach (var towerType in listOfAllTowerTypes)
            {
                var towerInstantiation = StructureFactories.GetNewObject(towerType) as BaseStructure;
                LearnMaxTowerValues(towerInstantiation);
                towerList.Add(towerInstantiation);
            }
            CreateFitnessRankingInput(towerList);
            for (var i = towerList.Count - 1; i >= 0; i--)
            {
                towerList[i].Destroy();
            }

            var outputList = new List <double>();
            var inputList  = new List <double[]>();

            using (var reader = new StreamReader(@"wavedata.csv"))
            {
                while (!reader.EndOfStream)
                {
                    var line   = reader.ReadLine();
                    var values = line.Split('\t');

                    var output = double.Parse(values[0]);
                    outputList.Add(output);

                    var inputCount = values.Length - 1;

                    var inputArray = new double[inputCount];

                    for (var i = 1; i < inputCount; i++)
                    {
                        inputArray[i - 1] = double.Parse(values[i]);
                    }
                    inputList.Add(inputArray);
                }
            }

            var fileName = $"BootstrappedGeneticData.csv";

            CSV = new StringBuilder();



            //_machineLearningModel = new DeepBeliefNetworkModel();
            _machineLearningModel.Initialize(InputCount, (int)(InputCount * 0.8), uslr, usm, usd, slr, sm);
            GameStateManager.LoadIfNecessary();

            CSV.Clear();
            //CSV.Append($"SampleSize, AvgFitness, Chicken1, Chicken2, Chicken3, Cow1, Cow2, Cow3, Sheep1, Sheep2, Sheep3, Rabbit1, Rabbit2, Rabbit3, Pig1, Pig2, Pig3");
            //CSV.Append(Environment.NewLine);
            //File.WriteAllText(fileName, CSV.ToString());

            var partialOutput = new List <double>();
            var partialInput  = new List <double[]>();

            //_waveData = new WaveData
            //{
            //    WaveInputs = partialInput,
            //    WaveScores = partialOutput,
            //};

            var sampleSize = int.MaxValue;

            for (var i = 0; i <= sampleSize; i++)
            {
                CSV.Clear();
                var randomIndex = FlatRedBallServices.Random.Next(0, outputList.Count - 1);
                _waveData.WaveInputs.Add(inputList[randomIndex]);
                _waveData.WaveScores.Add(outputList[randomIndex]);

                _machineLearningModel.LearnAll(_waveData);
                GeneticsManager.EvaluateAndGenerate();
                var currentFitness = GeneticsManager.GetAverageFitness();
                CSV.Append($"{i + 1},{currentFitness}, " +
                           $"{GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Chicken1).Fitness}, { GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Chicken2).Fitness}, { GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Chicken3).Fitness}, " +
                           $"{GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Cow1).Fitness}, { GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Cow2).Fitness}, { GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Cow3).Fitness}, " +
                           $"{GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Sheep1).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Sheep2).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Sheep3).Fitness}, " +
                           $"{GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Rabbit1).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Rabbit2).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Rabbit3).Fitness}, " +
                           $"{GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Pig1).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Pig2).Fitness}, {GeneticsManager.GetBestChromsomeForEnemyType(EnemyTypes.Pig3).Fitness}"
                           );
                CSV.Append(Environment.NewLine);
                File.AppendAllText(fileName, CSV.ToString());
                SaveData();
                //GeneticsManager.Save("Genetics.xml");
            }
        }