Example #1
0
    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;

	}
Example #3
0
    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);
    }
Example #6
0
    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();
	}
Example #8
0
        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;
	}
Example #14
0
    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
            }
        }
    }
Example #15
0
    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);
    }