Esempio n. 1
0
    private void SexualReproduction(Organism mother)
    {
        int energyToReproduce    = (int)(bodyEnergy * chromosome.Parameters.EnergyToSonRatio * 2);
        int momEnergyToReproduce = (int)(mother.bodyEnergy * mother.chromosome.Parameters.EnergyToSonRatio * 2);

        if (organismEnergy.Value > (1 + chromosome.Parameters.ExcessEnergyToReproduce) * energyToReproduce &&
            mother.organismEnergy.Value > (1 + mother.chromosome.Parameters.ExcessEnergyToReproduce) * momEnergyToReproduce &&
            sexualReproductionNeuron.Value >= 0.5 &&
            mother.sexualReproductionNeuron.Value >= 0.5)
        {
            Chromosome newChromosome = GenesManager.CreateNewGenesForReproduction(this.chromosome, mother.chromosome);

            int totalEnergy = energyToReproduce + momEnergyToReproduce;
            OrganismSpawn.SpawnOrganism(newChromosome, ComputeChildPosition(), totalEnergy);

            organismEnergy.Value        -= energyToReproduce;
            mother.organismEnergy.Value -= momEnergyToReproduce;
        }
    }
Esempio n. 2
0
    public void Mitosis()
    {
        if (!Hyperparameters.ALLOW_MITOSIS)
        {
            return;
        }

        int energyToReproduce = (int)(bodyEnergy * chromosome.Parameters.EnergyToSonRatio * 4);


        if (organismEnergy.Value > energyToReproduce * (1 + chromosome.Parameters.ExcessEnergyToReproduce) && mitosisNeuron.Value >= 0.5)
        {
            Chromosome newChromosome = GenesManager.CreateNewGenesForReproduction(this.chromosome);

            OrganismSpawn.SpawnOrganism(newChromosome, ComputeChildPosition(), energyToReproduce);

            organismEnergy.Value -= energyToReproduce;
        }
    }