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