public override object Read(ES2Reader reader) { CrossoverManager data = new CrossoverManager(); Read(reader, data); return(data); }
public int currentTrialForEdit = 0; // keeps track of which trial index is currently being edited while in Fitness/Mini-game Panels // For Each Trial: // MiniGame Class to store gametype and settings // Fitness Function Class w/ Fitness component list and settings // Constructor Functions: public Player() { DebugBot.DebugFunctionCall("Player; Player() Constructor!; ", debugFunctionCalls); InitializeNewPopulation(); masterTrialsList = new List<Trial>(); Trial newTrial = new Trial(this); // make trials list one member long, with a None mini-game value masterTrialsList.Add(newTrial); masterCupid = new CrossoverManager(); dataManager = new DataManager(this); graphKing = new TheGraphKing(); //newTrial.playerRef = this; }
public int currentTrialForEdit = 0; // keeps track of which trial index is currently being edited while in Fitness/Mini-game Panels // For Each Trial: // MiniGame Class to store gametype and settings // Fitness Function Class w/ Fitness component list and settings // Constructor Functions: public Player() { DebugBot.DebugFunctionCall("Player; Player() Constructor!; ", debugFunctionCalls); InitializeNewPopulation(); masterTrialsList = new List <Trial>(); Trial newTrial = new Trial(this); // make trials list one member long, with a None mini-game value masterTrialsList.Add(newTrial); masterCupid = new CrossoverManager(); dataManager = new DataManager(this); graphKing = new TheGraphKing(); //newTrial.playerRef = this; }
public static Chromosome CreateCrossover(Chromosome ch1, Chromosome ch2) { Gene[] genes = CrossoverManager.Crossover(ch1.Genes, ch2.Genes); var neuralComparableGenes = CrossoverManager.Crossover(ch1.neuralChromosome.GetComparableGenes(), ch2.neuralChromosome.GetComparableGenes()); DendriteGene[] dendriteGenes = new DendriteGene[neuralComparableGenes.Length]; for (int i = 0; i < dendriteGenes.Length; i++) { dendriteGenes[i] = neuralComparableGenes[i].GetGene(); } NeuralChromosome neuralChromosome = new NeuralChromosome(dendriteGenes); ChromosomeParameters parameters = CrossoverManager.CrossParameters(ch1.Parameters, ch2.Parameters); Chromosome chromosome = new Chromosome(genes, neuralChromosome, ch1.MutationTracker + "CR", parameters); return(chromosome); }
public static bool SameSpecie(Chromosome ch1, Chromosome ch2) { KeyValuePair <Chromosome, Chromosome> pair = new KeyValuePair <Chromosome, Chromosome>(ch1, ch2); if (sameSpecieComputed.ContainsKey(pair)) { var res = sameSpecieComputed[pair]; if (sameSpecieComputed.Count > 50000) { sameSpecieComputed.Clear(); } return(res); } int disjointGenes = CrossoverManager.Difference(ch1.Genes, ch2.Genes); float differenceValue = 2 * disjointGenes / (float)Math.Max(ch1.Genes.Length, ch2.Genes.Length); if (differenceValue > Hyperparameters.SPECIES_DIFFERENCE_THRESHOLD) { sameSpecieComputed[pair] = false; return(false); } //neural part: /* * int disjointNeuralGenes = CrossoverManager.Difference(ch1.neuralChromosome.GetComparableGenes(), ch2.neuralChromosome.GetComparableGenes()); * differenceValue = 2 * disjointNeuralGenes / (float)Math.Max(ch1.neuralChromosome.dendriteGenes.Length, ch2.neuralChromosome.dendriteGenes.Length); * * if (differenceValue > 1) * return false; */ sameSpecieComputed[pair] = true; return(true); }
public void ApplyTrainingModifierEffects(Trainer trainer) { int currentGen = trainer.PlayingCurGeneration; if (trainer.loadedTrainingSave != null) { currentGen += trainer.loadedTrainingSave.endGeneration; } //Debug.Log("ApplyTrainingModifierEffects currentGen: " + currentGen.ToString()); CrossoverManager crossoverManager = trainer.PlayerList[0].masterCupid; int numModifiers = activeTrainingModifierList.Count; crossoverManager.mutationBlastModifier = 1f; crossoverManager.bodyMutationBlastModifier = 1f; if (numModifiers > 0) { for (int i = numModifiers - 1; i >= 0; i--) { float t = 0f; switch (activeTrainingModifierList[i].modifierType) { case TrainingModifier.TrainingModifierType.LinkExplosion: // go through all agents and pump them up -- THIS WILL NEED IMPROVEMENTS!!!! for (int a = 0; a < trainer.PlayerList[0].masterPopulation.masterAgentArray.Length; a++) { GenomeNEAT genome = trainer.PlayerList[0].masterPopulation.masterAgentArray[a].brainGenome; int numNodes = genome.nodeNEATList.Count; int numNewLinks = (int)((float)numNodes * activeTrainingModifierList[i].linksPerNode); for (int n = 0; n < numNewLinks; n++) { genome.AddNewRandomLink(currentGen); } int numLinks = genome.linkNEATList.Count; int numNewNodes = (int)((float)numLinks * activeTrainingModifierList[i].nodesPerLink); for (int b = 0; b < numNewNodes; b++) { genome.AddNewRandomNode(currentGen, crossoverManager.GetNextAddonInnov()); } } activeTrainingModifierList.RemoveAt(i); break; case TrainingModifier.TrainingModifierType.MutationBlast: t = ((float)currentGen - (float)activeTrainingModifierList[i].startGen) / (float)activeTrainingModifierList[i].duration; crossoverManager = trainer.PlayerList[0].masterCupid; if (t > 1f) { if (activeTrainingModifierList[i].liveForever) { t = 1f; } else { // Duration has expired, and the live forever flag if false, so remove this modifier crossoverManager.mutationBlastModifier = 1f; activeTrainingModifierList.RemoveAt(i); break; } } crossoverManager.mutationBlastModifier = Mathf.Lerp(1f, activeTrainingModifierList[i].minMultiplier, t); break; case TrainingModifier.TrainingModifierType.BodyMutationBlast: t = ((float)currentGen - (float)activeTrainingModifierList[i].startGen) / (float)activeTrainingModifierList[i].duration; crossoverManager = trainer.PlayerList[0].masterCupid; if (t > 1f) { if (activeTrainingModifierList[i].liveForever) { t = 1f; } else { // Duration has expired, and the live forever flag if false, so remove this modifier crossoverManager.bodyMutationBlastModifier = 1f; activeTrainingModifierList.RemoveAt(i); break; } } crossoverManager.bodyMutationBlastModifier = Mathf.Lerp(1f, activeTrainingModifierList[i].minMultiplier, t); break; case TrainingModifier.TrainingModifierType.PruneBrain: t = ((float)currentGen - (float)activeTrainingModifierList[i].startGen) / (float)activeTrainingModifierList[i].duration; crossoverManager = trainer.PlayerList[0].masterCupid; if (t > 1f) { t = 1f; } t = 1f - t; crossoverManager.largeBrainPenalty = activeTrainingModifierList[i].largeBrainPenalty * t; crossoverManager.mutationRemoveLinkChance = activeTrainingModifierList[i].removeLinkChance * t; crossoverManager.mutationRemoveNodeChance = activeTrainingModifierList[i].removeNodeChance * t; break; case TrainingModifier.TrainingModifierType.TargetCone: break; case TrainingModifier.TrainingModifierType.TargetForward: break; case TrainingModifier.TrainingModifierType.TargetOmni: break; case TrainingModifier.TrainingModifierType.VariableTrialTimes: t = ((float)currentGen - (float)activeTrainingModifierList[i].startGen) / (float)activeTrainingModifierList[i].duration; Trial trial = trainer.PlayerList[0].masterTrialsList[0]; if (t > 1f) { if (activeTrainingModifierList[i].liveForever) { t = 1f; } else { // Remove this modifier activeTrainingModifierList.RemoveAt(i); } } int minSteps = (int)Mathf.Lerp(activeTrainingModifierList[i].beginMinTime, activeTrainingModifierList[i].endMinTime, t); int maxSteps = (int)Mathf.Lerp(activeTrainingModifierList[i].beginMaxTime, activeTrainingModifierList[i].endMaxTime, t); trial.maxEvaluationTimeSteps = maxSteps; // (int)UnityEngine.Random.Range(minSteps, maxSteps); trial.minEvaluationTimeSteps = minSteps; break; case TrainingModifier.TrainingModifierType.WideSearch: t = ((float)currentGen - (float)activeTrainingModifierList[i].startGen) / (float)activeTrainingModifierList[i].duration; crossoverManager = trainer.PlayerList[0].masterCupid; if (t > 1f) { t = 1f; } t = 1f - t; //crossoverManager.largeBrainPenalty = activeTrainingModifierList[i].largeBrainPenalty * t; //crossoverManager.mutationRemoveLinkChance = activeTrainingModifierList[i].removeLinkChance * t; //crossoverManager.mutationRemoveNodeChance = activeTrainingModifierList[i].removeNodeChance * t; break; default: Debug.Log("Modifier type not found!!! SWITCH DEFAULT CASE"); break; } } } }
public void InitializePanelWithTrainerData() { DebugBot.DebugFunctionCall("TCrossoverUI; InitializePanelWithTrainerData(); ", debugFunctionCalls); //CheckActivationCriteria(); // set population references: Trainer trainer = trainerModuleScript.gameController.masterTrainer; int curPlayer = trainer.CurPlayer; playerRef = trainer.PlayerList[curPlayer-1]; // get current population instance if(pendingCrossoverManager == null) { pendingCrossoverManager = new CrossoverManager(); } pendingCrossoverManager.CopyFromSourceCrossoverManager(playerRef.masterCupid); // SET values from trainer data: // MUTATION TAB!!!! sliderMasterMutationRate.minValue = 0f; // set up slider bounds sliderMasterMutationRate.maxValue = 1f; sliderMaximumWeight.minValue = 0f; // set up slider bounds sliderMaximumWeight.maxValue = 5f; sliderMutationDriftScale.minValue = 0f; // set up slider bounds sliderMutationDriftScale.maxValue = 1f; sliderRemoveLinkChance.minValue = 0f; // set up slider bounds sliderRemoveLinkChance.maxValue = 1f; sliderAddLinkChance.minValue = 0f; // set up slider bounds sliderAddLinkChance.maxValue = 1f; sliderRemoveNodeChance.minValue = 0f; // set up slider bounds sliderRemoveNodeChance.maxValue = 1f; sliderAddNodeChance.minValue = 0f; // set up slider bounds sliderAddNodeChance.maxValue = 1f; sliderFunctionChance.minValue = 0f; // set up slider bounds sliderFunctionChance.maxValue = 1f; sliderLargeBrainPenalty.minValue = 0f; // set up slider bounds sliderLargeBrainPenalty.maxValue = 0.5f; sliderNewLinkMutateBonus.minValue = 1f; sliderNewLinkMutateBonus.maxValue = 10f; sliderNewLinkBonusDuration.minValue = 5; sliderNewLinkBonusDuration.maxValue = 50; sliderExistingNetworkBias.minValue = 0f; sliderExistingNetworkBias.maxValue = 1f; sliderExistingFromNodeBias.minValue = 0f; sliderExistingFromNodeBias.maxValue = 1f; // CROSSOVER TAB!!! sliderCrossoverRandomLinkChance.minValue = 0f; sliderCrossoverRandomLinkChance.maxValue = 1f; // SPECIES TAB!!!!! sliderSimilarityThreshold.minValue = 0f; // set up slider bounds sliderSimilarityThreshold.maxValue = 10f; sliderNeuronWeight.minValue = 0f; sliderNeuronWeight.maxValue = 1f; sliderLinkWeight.minValue = 0f; sliderLinkWeight.maxValue = 1f; sliderWeightWeight.minValue = 0f; sliderWeightWeight.maxValue = 1f; sliderNormalizeNeuron.minValue = 0f; sliderNormalizeNeuron.maxValue = 1f; sliderNormalizeLink.minValue = 0f; sliderNormalizeLink.maxValue = 1f; sliderNormalizeWeight.minValue = 0f; sliderNormalizeWeight.maxValue = 1f; sliderAdoptionRate.minValue = 0f; // set up slider bounds sliderAdoptionRate.maxValue = 1f; sliderSpeciesSizePenalty.minValue = 0f; // set up slider bounds sliderSpeciesSizePenalty.maxValue = 0.5f; sliderInterspeciesMatingRate.minValue = 0f; // set up slider bounds sliderInterspeciesMatingRate.maxValue = 1f; // BODY TAB!!!! sliderMaxAttributeValueChange.minValue = 1f; // multiplier sliderMaxAttributeValueChange.maxValue = 2f; sliderNewSegmentChance.minValue = 0f; sliderNewSegmentChance.maxValue = 0.05f; sliderRemoveSegmentChance.minValue = 0f; sliderRemoveSegmentChance.maxValue = 0.05f; sliderSegmentProportionChance.minValue = 0f; sliderSegmentProportionChance.maxValue = 0.2f; sliderSegmentAttachSettingsChance.minValue = 0f; sliderSegmentAttachSettingsChance.maxValue = 0.2f; sliderJointSettingsChance.minValue = 0f; sliderJointSettingsChance.maxValue = 0.2f; sliderNewAddonChance.minValue = 0f; sliderNewAddonChance.maxValue = 0.05f; sliderRemoveAddonChance.minValue = 0f; sliderRemoveAddonChance.maxValue = 0.05f; sliderAddonSettingsChance.minValue = 0f; sliderAddonSettingsChance.maxValue = 0.2f; sliderRecursionChance.minValue = 0f; sliderRecursionChance.maxValue = 0.05f; sliderSymmetryChance.minValue = 0f; sliderSymmetryChance.maxValue = 0.05f; // COMMON!!!! sliderSurvivalRate.minValue = 0f; // set up slider bounds sliderSurvivalRate.maxValue = 1f; sliderBreedingRate.minValue = 0f; // set up slider bounds sliderBreedingRate.maxValue = 1f; // Need to add the Toggles here ?!????????????????????????????????????????? valuesChanged = false; applyPressed = false; UpdateUIWithCurrentData(); }
public static void Main(string[] args) { Random rand = new Random(); ItemSetController itemSetController = new ItemSetController(rand, ITERATION_COUNT); PopulationSelector populationSelector = new PopulationSelector(1, 106, rand, ITERATION_COUNT); CrossoverManager crossoverManager = new CrossoverManager(rand, ITERATION_COUNT); SelectionManager selectionManager = new SelectionManager(rand); MutationManager mutationManager = new MutationManager(rand, ITERATION_COUNT); for (int i = 0; i < ITERATION_COUNT; i++) { itemSetController.addItem(new Item(rand.Next(1, 30), rand.Next(1, 30)), i); } itemSetController.ShowItems(); itemSetController.IniSets(); itemSetController.ShowSets(); string pairSelection; do { Console.WriteLine("Выберите тип выборки пары: 1 - Лучшая пара 2 - Случайный"); pairSelection = Console.ReadLine(); } while (pairSelection != "1" && pairSelection != "2"); string crossover; do { Console.WriteLine("Выберите вид кроссовера: 1 - Двухточечный(Случайный) 2 - Одноточечный классический"); crossover = Console.ReadLine(); } while (crossover != "1" && crossover != "2"); string mutation; do { Console.WriteLine("Выберите вид мутации: 1 - изменеие бита на противоположный 2 - инверсия в случайном интервале"); mutation = Console.ReadLine(); } while (mutation != "1" && mutation != "2"); string selection; do { Console.WriteLine("Выберите вид селекции: 1 - Бинарный турнир 2 - Пропорциональная"); selection = Console.ReadLine(); } while (selection != "1" && selection != "2"); do { if (pairSelection == "1") { populationSelector.ChooseBestPair(itemSetController.getSets()); } else { populationSelector.ChoosePair(itemSetController.getSets()); } Set[] childrens = new Set[CHILDS_COUNT]; int dividerPoint = rand.Next(1, ITERATION_COUNT - 1); Set[] bestPair = populationSelector.getPair(); for (int i = 0; i < childrens.Length; i++) { childrens[i] = crossover == "1" ? crossoverManager.DoubleCross(bestPair, itemSetController.getItems()) : crossoverManager.ClassicCross(bestPair, itemSetController.getItems(), dividerPoint); if (mutation == "1") { mutationManager.RandomMutation(childrens[i]); } else { mutationManager.InversionMutation(childrens[i]); } } populationSelector.NewPopulation(itemSetController.getSets(), selection == "1" ? selectionManager.BinaryTournament(childrens, CHILDS_COUNT / 2) : selectionManager.ProportionallySelection(childrens, CHILDS_COUNT / 2)); Console.WriteLine("Новая популяция:"); itemSetController.ShowSets(); populationSelector.ShowBestOf(itemSetController.getSets()); } while (!populationSelector.End(itemSetController.getSets(), 85) && populationSelector.getAge() != 10); Console.ReadKey(); }
public void CopyFromSourceCrossoverManager(CrossoverManager sourceManager) { tempName = sourceManager.tempName; useMutation = sourceManager.useMutation; useCrossover = sourceManager.useCrossover; useSpeciation = sourceManager.useSpeciation; //Mutation masterMutationRate = sourceManager.masterMutationRate; maximumWeightMagnitude = sourceManager.maximumWeightMagnitude; mutationDriftScale = sourceManager.mutationDriftScale; mutationRemoveLinkChance = sourceManager.mutationRemoveLinkChance; mutationAddLinkChance = sourceManager.mutationAddLinkChance; mutationRemoveNodeChance = sourceManager.mutationRemoveNodeChance; mutationAddNodeChance = sourceManager.mutationAddNodeChance; mutationActivationFunctionChance = sourceManager.mutationActivationFunctionChance; largeBrainPenalty = sourceManager.largeBrainPenalty; newLinkMutateBonus = sourceManager.newLinkMutateBonus; newLinkBonusDuration = sourceManager.newLinkBonusDuration; existingNetworkBias = sourceManager.existingNetworkBias; existingFromNodeBias = sourceManager.existingFromNodeBias; //Crossover crossoverRandomLinkChance = sourceManager.crossoverRandomLinkChance; //Species speciesSimilarityThreshold = sourceManager.speciesSimilarityThreshold; neuronWeight = sourceManager.neuronWeight; linkWeight = sourceManager.linkWeight; weightWeight = sourceManager.weightWeight; normalizeExcess = sourceManager.normalizeExcess; normalizeDisjoint = sourceManager.normalizeDisjoint; normalizeLinkWeight = sourceManager.normalizeLinkWeight; adoptionRate = sourceManager.adoptionRate; largeSpeciesPenalty = sourceManager.largeSpeciesPenalty; interspeciesBreedingRate = sourceManager.interspeciesBreedingRate; // Body maxAttributeValueChange = sourceManager.maxAttributeValueChange; newSegmentChance = sourceManager.newSegmentChance; removeSegmentChance = sourceManager.removeSegmentChance; segmentProportionChance = sourceManager.segmentProportionChance; segmentAttachSettingsChance = sourceManager.segmentAttachSettingsChance; jointSettingsChance = sourceManager.jointSettingsChance; newAddonChance = sourceManager.newAddonChance; removeAddonChance = sourceManager.removeAddonChance; addonSettingsChance = sourceManager.addonSettingsChance; recursionChance = sourceManager.recursionChance; symmetryChance = sourceManager.symmetryChance; // Common survivalRate = sourceManager.survivalRate; survivalByRank = sourceManager.survivalByRank; survivalStochastic = sourceManager.survivalStochastic; survivalByRaffle = sourceManager.survivalByRaffle; breedingRate = sourceManager.breedingRate; breedingByRank = sourceManager.breedingByRank; breedingStochastic = sourceManager.breedingStochastic; breedingByRaffle = sourceManager.breedingByRaffle; }
public void InitializePanelWithTrainerData() { DebugBot.DebugFunctionCall("TCrossoverUI; InitializePanelWithTrainerData(); ", debugFunctionCalls); //CheckActivationCriteria(); // set population references: Trainer trainer = trainerModuleScript.gameController.masterTrainer; int curPlayer = trainer.CurPlayer; playerRef = trainer.PlayerList[curPlayer-1]; // get current population instance if(pendingCrossoverManager == null) { pendingCrossoverManager = new CrossoverManager(); } pendingCrossoverManager.CopyFromSourceCrossoverManager(playerRef.masterCupid); // SET values from trainer data: sliderMasterMutationRate.minValue = 0f; // set up slider bounds sliderMasterMutationRate.maxValue = 0.2f; //sliderMasterMutationRate.value = pendingCrossoverManager.masterMutationRate; //textMasterMutationRate.text = pendingCrossoverManager.masterMutationRate.ToString(); sliderMaximumWeight.minValue = 0f; // set up slider bounds sliderMaximumWeight.maxValue = 5f; sliderMutationDriftScale.minValue = 0f; // set up slider bounds sliderMutationDriftScale.maxValue = 1f; sliderSeverLinkChance.minValue = 0f; // set up slider bounds sliderSeverLinkChance.maxValue = 1f; sliderAddLinkChance.minValue = 0f; // set up slider bounds sliderAddLinkChance.maxValue = 1f; sliderFunctionChance.minValue = 0f; // set up slider bounds sliderFunctionChance.maxValue = 1f; sliderNumSwapPositions.minValue = 1; sliderNumSwapPositions.maxValue = 20; sliderNumFactions.minValue = 1; sliderNumFactions.maxValue = 20; sliderMinNumParents.minValue = 1; sliderMinNumParents.maxValue = 20; sliderMaxNumParents.minValue = 1; sliderMaxNumParents.maxValue = 20; sliderSurvivalRate.minValue = 0f; // set up slider bounds sliderSurvivalRate.maxValue = 1f; sliderBreedingRate.minValue = 0f; // set up slider bounds sliderBreedingRate.maxValue = 1f; valuesChanged = false; applyPressed = false; UpdateUIWithCurrentData(); }
public void MakeRefToSourceCrossoverManager(CrossoverManager sourceManager) { //this = sourceManager; }
public void CopyFromSourceCrossoverManager(CrossoverManager sourceManager) { tempName = sourceManager.tempName; masterMutationRate = sourceManager.masterMutationRate; maximumWeightMagnitude = sourceManager.maximumWeightMagnitude; mutationDriftScale = sourceManager.mutationDriftScale; mutationRemoveLinkChance = sourceManager.mutationRemoveLinkChance; mutationAddLinkChance = sourceManager.mutationAddLinkChance; mutationFunctionChance = sourceManager.mutationFunctionChance; numSwapPositions = sourceManager.numSwapPositions; numFactions = sourceManager.numFactions; minNumParents = sourceManager.minNumParents; maxNumParents = sourceManager.maxNumParents; breedWithSimilar = sourceManager.breedWithSimilar; survivalRate = sourceManager.survivalRate; survivalByRank = sourceManager.survivalByRank; survivalStochastic = sourceManager.survivalStochastic; survivalByRaffle = sourceManager.survivalByRaffle; breedingRate = sourceManager.breedingRate; breedingByRank = sourceManager.breedingByRank; breedingStochastic = sourceManager.breedingStochastic; breedingByRaffle = sourceManager.breedingByRaffle; }
public override object Read(ES2Reader reader) { CrossoverManager data = new CrossoverManager(); Read(reader, data); return data; }
public override void Read(ES2Reader reader, object c) { CrossoverManager data = (CrossoverManager)c; // Add your reader.Read calls here to read the data into the object. // Read the version number. int fileVersion = reader.Read <int>(); // VERSION 0: if (fileVersion >= 0) { data.adoptionRate = reader.Read <float>(); data.breedingByRaffle = reader.Read <bool>(); data.breedingByRank = reader.Read <bool>(); data.breedingRate = reader.Read <float>(); data.breedingStochastic = reader.Read <bool>(); data.crossoverRandomLinkChance = reader.Read <float>(); data.linkWeight = reader.Read <float>(); data.neuronWeight = reader.Read <float>(); data.existingFromNodeBias = reader.Read <float>(); data.existingNetworkBias = reader.Read <float>(); data.interspeciesBreedingRate = reader.Read <float>(); data.largeBrainPenalty = reader.Read <float>(); data.largeSpeciesPenalty = reader.Read <float>(); data.weightWeight = reader.Read <float>(); data.masterMutationRate = reader.Read <float>(); //data.maxBodyMutationFactor = reader.Read<float>(); data.maximumWeightMagnitude = reader.Read <float>(); data.mutationActivationFunctionChance = reader.Read <float>(); data.mutationAddLinkChance = reader.Read <float>(); data.mutationAddNodeChance = reader.Read <float>(); //data.mutationBodyChance = reader.Read<float>(); data.mutationDriftScale = reader.Read <float>(); data.mutationRemoveLinkChance = reader.Read <float>(); data.mutationRemoveNodeChance = reader.Read <float>(); data.newLinkBonusDuration = reader.Read <int>(); data.newLinkMutateBonus = reader.Read <float>(); data.normalizeDisjoint = reader.Read <float>(); data.normalizeExcess = reader.Read <float>(); data.normalizeLinkWeight = reader.Read <float>(); data.speciesSimilarityThreshold = reader.Read <float>(); // body: data.maxAttributeValueChange = reader.Read <float>(); data.newSegmentChance = reader.Read <float>(); data.removeSegmentChance = reader.Read <float>(); data.segmentProportionChance = reader.Read <float>(); data.segmentAttachSettingsChance = reader.Read <float>(); data.jointSettingsChance = reader.Read <float>(); data.newAddonChance = reader.Read <float>(); data.removeAddonChance = reader.Read <float>(); data.addonSettingsChance = reader.Read <float>(); data.recursionChance = reader.Read <float>(); data.symmetryChance = reader.Read <float>(); data.survivalByRaffle = reader.Read <bool>(); data.survivalByRank = reader.Read <bool>(); data.survivalRate = reader.Read <float>(); data.survivalStochastic = reader.Read <bool>(); data.useCrossover = reader.Read <bool>(); data.useMutation = reader.Read <bool>(); data.useSpeciation = reader.Read <bool>(); data.savedNextNodeInnov = reader.Read <int>(); data.savedNextAddonInnov = reader.Read <int>(); if (fileVersion >= 1) { // new attributes } } }
public override void Write(object obj, ES2Writer writer) { CrossoverManager data = (CrossoverManager)obj; // Add your writer.Write calls here. writer.Write(0); // Version 1 is current version number // Make sure to edit Read() function to properly handle version control! // VERSION 0: writer.Write(data.adoptionRate); writer.Write(data.breedingByRaffle); writer.Write(data.breedingByRank); writer.Write(data.breedingRate); writer.Write(data.breedingStochastic); writer.Write(data.crossoverRandomLinkChance); writer.Write(data.linkWeight); writer.Write(data.neuronWeight); writer.Write(data.existingFromNodeBias); writer.Write(data.existingNetworkBias); writer.Write(data.interspeciesBreedingRate); writer.Write(data.largeBrainPenalty); writer.Write(data.largeSpeciesPenalty); writer.Write(data.weightWeight); writer.Write(data.masterMutationRate); //writer.Write(data.maxBodyMutationFactor); writer.Write(data.maximumWeightMagnitude); writer.Write(data.mutationActivationFunctionChance); writer.Write(data.mutationAddLinkChance); writer.Write(data.mutationAddNodeChance); //writer.Write(data.mutationBodyChance); writer.Write(data.mutationDriftScale); writer.Write(data.mutationRemoveLinkChance); writer.Write(data.mutationRemoveNodeChance); writer.Write(data.newLinkBonusDuration); writer.Write(data.newLinkMutateBonus); writer.Write(data.normalizeDisjoint); writer.Write(data.normalizeExcess); writer.Write(data.normalizeLinkWeight); writer.Write(data.speciesSimilarityThreshold); //Body: writer.Write(data.maxAttributeValueChange); writer.Write(data.newSegmentChance); writer.Write(data.removeSegmentChance); writer.Write(data.segmentProportionChance); writer.Write(data.segmentAttachSettingsChance); writer.Write(data.jointSettingsChance); writer.Write(data.newAddonChance); writer.Write(data.removeAddonChance); writer.Write(data.addonSettingsChance); writer.Write(data.recursionChance); writer.Write(data.symmetryChance); writer.Write(data.survivalByRaffle); writer.Write(data.survivalByRank); writer.Write(data.survivalRate); writer.Write(data.survivalStochastic); writer.Write(data.useCrossover); writer.Write(data.useMutation); writer.Write(data.useSpeciation); writer.Write(data.savedNextNodeInnov); writer.Write(data.savedNextAddonInnov); }