//Not doing gene crossover, but rather asexual reproduction public BloopDNA[] Crossover(BloopDNA bloopDNA) { BloopDNA[] bloopDNACrossover = new BloopDNA[2]; /* * The general idea of gene crossover for these creatures * Gene = node_1, node_1_Data, node_1_#_of_Muscles, node_1_Muscle_Conn_Incidies_X, node_1_Muscle_X_minDist, node_1_Muscle_X_maxDist, node_1_Muscle_X_damp, node_1_Muscle_X_freq * Example: * Node A is connected to B, Node B is not connected to A. * Node A Data: [X: 1f, Y: 2f, Friction: 0.5f, Bouncyness: 0.1f] * Node A - B Muscle Data: [minDist: 0.5f, maxDist: 1f, Damp: 0.25f, Freq: 2.5f] * Node B Data: [X: 0f, Y: 1f, Friction: 1f, Bouncyness: 0f] * __________________ _____________________ ______________ * Gene = [1f, 2f, 0.5f, 0.1f, 0.5f, 1f, 0.25f, 2.5f, 0f, 1f, 1f, 0f] * ------------------ --------------------- -------------- * Muscle A data A-B connection data Muscle B data * #ofNodes #OfMuscles = Σ(#ofMusclesOfNode[i]) * i=1 * * Total gene size = (#ofNodes + #OfMuscles)*4 */ int thisBloopGeneSize = (numberOfNodes + numberOfMuscles) * 4; int nodeCrossoverPoint = Random.Range(0, numberOfNodes); return(bloopDNACrossover); }
public void Activate() { bloopDNA = new BloopDNA(); bloopDNA.GenerateRandomBloopDNA(); timeToLive = 10f; //15 CreateCreatureFromDNA(); }
public BloopDNA CopyDNA() { BloopDNA newDNA = new BloopDNA(numberOfNodes, multiNodeMuscularConnectionIndices, multiNodeMuscularData, nodeData, numberOfMuscles, fitness); return(newDNA); }
public BloopDNA[] AsexualReproduce() { BloopDNA[] bloopDNACrossover = new BloopDNA[2]; bloopDNACrossover[0] = this.CopyDNA(); bloopDNACrossover[1] = this.CopyDNA(); if (Random.Range(0, 100) <= 5) { bloopDNACrossover[0].Mutate(); } bloopDNACrossover[1].Mutate(); bloopDNACrossover[0].parentSpecieName = speciesName; bloopDNACrossover[1].parentSpecieName = speciesName; return(bloopDNACrossover); }
public void UpdateCounter(BloopDNA bloopDNA) { lock (mutex) { creatureFinishedCounter++; //Debug.Log(creatureFinishedCounter); if (generationNumber == 1) { bloopDNAList.Add(bloopDNA); } if (creatureFinishedCounter == creaturesPerGeneration) { Breed(); } else if (creatureFinishedCounter % numberOfCreaturesPerRun == 0) { if (generationNumber == 1) { for (int i = creatureFinishedCounter; i < (creatureFinishedCounter + numberOfCreaturesPerRun); i++) { bloopCreatures[i] = (GameObject)Instantiate(bloopCreaturePrefab); bloopCreatures[i].transform.parent = transform; bloopCreatures[i].SendMessage("Activate"); } } else { for (int i = creatureFinishedCounter; i < (creatureFinishedCounter + numberOfCreaturesPerRun); i++) { bloopCreatures[i] = (GameObject)Instantiate(bloopCreaturePrefab); bloopCreatures[i].transform.parent = transform; bloopCreatures[i].SendMessage("ActivateWithDNA", bloopDNAList[i]); } } } } }
public BloopData() { bloopDNA = new BloopDNA(); bloopDNA.GenerateRandomBloopDNA(); }
public void ActivateWithDNAForever(BloopDNA dna) { bloopDNA = dna; timeToLive = 1000f; CreateCreatureFromDNA(); }
public void ActivateWithDNA(BloopDNA dna) { bloopDNA = dna; timeToLive = 10f; //15 CreateCreatureFromDNA(); }
public void UpdateCounter(BloopDNA bloopDNA) { lock (mutex) { creatureFinishedCounter++; //Debug.Log(creatureFinishedCounter); if(generationNumber == 1) bloopDNAList.Add(bloopDNA); if (creatureFinishedCounter == creaturesPerGeneration) { Breed(); } else if (creatureFinishedCounter % numberOfCreaturesPerRun == 0) { if (generationNumber == 1) { for (int i = creatureFinishedCounter; i < (creatureFinishedCounter + numberOfCreaturesPerRun); i++) { bloopCreatures[i] = (GameObject)Instantiate(bloopCreaturePrefab); bloopCreatures[i].transform.parent = transform; bloopCreatures[i].SendMessage("Activate"); } } else { for (int i = creatureFinishedCounter; i < (creatureFinishedCounter + numberOfCreaturesPerRun); i++) { bloopCreatures[i] = (GameObject)Instantiate(bloopCreaturePrefab); bloopCreatures[i].transform.parent = transform; bloopCreatures[i].SendMessage("ActivateWithDNA", bloopDNAList[i]); } } } } }
public BloopDNA[] AsexualReproduce() { BloopDNA[] bloopDNACrossover = new BloopDNA[2]; bloopDNACrossover[0] = this.CopyDNA(); bloopDNACrossover[1] = this.CopyDNA(); if(Random.Range(0,100)<=5) bloopDNACrossover[0].Mutate(); bloopDNACrossover[1].Mutate(); bloopDNACrossover[0].parentSpecieName = speciesName; bloopDNACrossover[1].parentSpecieName = speciesName; return bloopDNACrossover; }
//Not doing gene crossover, but rather asexual reproduction public BloopDNA[] Crossover(BloopDNA bloopDNA) { BloopDNA[] bloopDNACrossover = new BloopDNA[2]; /* The general idea of gene crossover for these creatures Gene = node_1, node_1_Data, node_1_#_of_Muscles, node_1_Muscle_Conn_Incidies_X, node_1_Muscle_X_minDist, node_1_Muscle_X_maxDist, node_1_Muscle_X_damp, node_1_Muscle_X_freq Example: Node A is connected to B, Node B is not connected to A. Node A Data: [X: 1f, Y: 2f, Friction: 0.5f, Bouncyness: 0.1f] Node A - B Muscle Data: [minDist: 0.5f, maxDist: 1f, Damp: 0.25f, Freq: 2.5f] Node B Data: [X: 0f, Y: 1f, Friction: 1f, Bouncyness: 0f] __________________ _____________________ ______________ Gene = [1f, 2f, 0.5f, 0.1f, 0.5f, 1f, 0.25f, 2.5f, 0f, 1f, 1f, 0f] ------------------ --------------------- -------------- Muscle A data A-B connection data Muscle B data #ofNodes #OfMuscles = Σ(#ofMusclesOfNode[i]) i=1 Total gene size = (#ofNodes + #OfMuscles)*4 */ int thisBloopGeneSize = (numberOfNodes + numberOfMuscles)*4; int nodeCrossoverPoint = Random.Range(0,numberOfNodes); return bloopDNACrossover; }
public BloopDNA CopyDNA() { BloopDNA newDNA = new BloopDNA(numberOfNodes, multiNodeMuscularConnectionIndices, multiNodeMuscularData, nodeData, numberOfMuscles, fitness); return newDNA; }