/// <summary> /// Returns true if Profitability instances are equal /// </summary> /// <param name="other">Instance of Profitability to be compared</param> /// <returns>Boolean</returns> public bool Equals(Profitability other) { if (other is null) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return (( Roe == other.Roe || Roe != null && Roe.Equals(other.Roe) ) && ( Npm == other.Npm || Npm != null && Npm.Equals(other.Npm) ) && ( Gpm == other.Gpm || Gpm != null && Gpm.Equals(other.Gpm) ) && ( Np == other.Np || Np != null && Np.Equals(other.Np) ) && ( Eps == other.Eps || Eps != null && Eps.Equals(other.Eps) ) && ( Mbr == other.Mbr || Mbr != null && Mbr.Equals(other.Mbr) ) && ( Ts == other.Ts || Ts != null && Ts.Equals(other.Ts) ) && ( Cs == other.Cs || Cs != null && Cs.Equals(other.Cs) )); }
/* * CrossOver: tras el éxito de la reproducción, se instanciarán nuevos agentes que * utilizarán los ADNs de los padres para crear el suyo propio. */ public void Crossover(BaseAgent otherParent) { //Debug.Log("Me he reproducido"); List <float> newDna = new List <float>(); float stat; for (int i = 0; i < dna.Count; i++) { stat = Random.value < 0.5 ? dna[i] : otherParent.dna[i]; newDna.Add(stat); } Roe roe = Instantiate(hijoPrefab, transform.position, Quaternion.identity).GetComponent <Roe>(); roe.Init(newDna, perfectDna, worstDna); roe.Mutate(); }
/// <summary> /// Gets the hash code /// </summary> /// <returns>Hash code</returns> public override int GetHashCode() { unchecked // Overflow is fine, just wrap { int hashCode = 41; // Suitable nullity checks etc, of course :) if (Roe != null) { hashCode = hashCode * 59 + Roe.GetHashCode(); } if (Npm != null) { hashCode = hashCode * 59 + Npm.GetHashCode(); } if (Gpm != null) { hashCode = hashCode * 59 + Gpm.GetHashCode(); } if (Np != null) { hashCode = hashCode * 59 + Np.GetHashCode(); } if (Eps != null) { hashCode = hashCode * 59 + Eps.GetHashCode(); } if (Mbr != null) { hashCode = hashCode * 59 + Mbr.GetHashCode(); } if (Ts != null) { hashCode = hashCode * 59 + Ts.GetHashCode(); } if (Cs != null) { hashCode = hashCode * 59 + Cs.GetHashCode(); } return(hashCode); } }
/* * StartSimulation: método encargado de guardar los listas de los mejores y peores ADNs * y de instanciar a los agentes. */ public void StartSimulation() { //Peces perfect y worst List <float> perfectFishDna = new List <float>(); perfectFishDna.Add(maxFishVel); perfectFishDna.Add(maxFishAcceleration); perfectFishDna.Add(maxFishPhys); perfectFishDna.Add(maxFishOffspring); perfectFishDna.Add(maxFishEggLayingTime); perfectFishDna.Add(maxFishGrowingTime); perfectFishDna.Add(maxFishHatchingTime); perfectFishDna.Add(maxFishNutritionalValue); perfectFishDna.Add(maxFishLifespan); perfectFishDna.Add(maxFishPossibilityOfSuccess); perfectFishDna.Add(minFishMutationRate); List <float> worstFishDna = new List <float>(); worstFishDna.Add(minFishVel); worstFishDna.Add(minFishAcceleration); worstFishDna.Add(minFishPhys); worstFishDna.Add(minFishOffspring); worstFishDna.Add(minFishEggLayingTime); worstFishDna.Add(minFishGrowingTime); worstFishDna.Add(minFishHatchingTime); worstFishDna.Add(minFishNutritionalValue); worstFishDna.Add(minFishLifespan); worstFishDna.Add(minFishPossibilityOfSuccess); worstFishDna.Add(maxFishMutationRate); //Ranas perfect y worst List <float> perfectFrogDna = new List <float>(); perfectFrogDna.Add(maxFrogVel); perfectFrogDna.Add(maxFrogAcceleration); perfectFrogDna.Add(maxFrogPhys); perfectFrogDna.Add(maxFrogOffspring); perfectFrogDna.Add(maxFrogEggLayingTime); perfectFrogDna.Add(maxFrogGrowingTime); perfectFrogDna.Add(maxFrogHatchingTime); perfectFrogDna.Add(maxFrogNutritionalValue); perfectFrogDna.Add(maxFrogLifespan); perfectFrogDna.Add(maxFrogPossibilityOfSuccess); perfectFrogDna.Add(minFrogMutationRate); List <float> worstFrogDna = new List <float>(); worstFrogDna.Add(minFrogVel); worstFrogDna.Add(minFrogAcceleration); worstFrogDna.Add(minFrogPhys); worstFrogDna.Add(minFrogOffspring); worstFrogDna.Add(minFrogEggLayingTime); worstFrogDna.Add(minFrogGrowingTime); worstFrogDna.Add(minFrogHatchingTime); worstFrogDna.Add(minFrogNutritionalValue); worstFrogDna.Add(minFrogLifespan); worstFrogDna.Add(minFrogPossibilityOfSuccess); worstFrogDna.Add(maxFrogMutationRate); //Peces perfect y worst perfectFlyDna = new List <float>(); perfectFlyDna.Add(maxFlyVel); perfectFlyDna.Add(maxFlyAcceleration); perfectFlyDna.Add(maxFlyPhys); perfectFlyDna.Add(maxFlyOffspring); perfectFlyDna.Add(maxFlyEggLayingTime); perfectFlyDna.Add(maxFlyGrowingTime); perfectFlyDna.Add(maxFlyHatchingTime); perfectFlyDna.Add(maxFlyNutritionalValue); perfectFlyDna.Add(maxFlyLifespan); perfectFlyDna.Add(maxFlyPossibilityOfSuccess); perfectFlyDna.Add(minFlyMutationRate); worstFlyDna = new List <float>(); worstFlyDna.Add(minFlyVel); worstFlyDna.Add(minFlyAcceleration); worstFlyDna.Add(minFlyPhys); worstFlyDna.Add(minFlyOffspring); worstFlyDna.Add(minFlyEggLayingTime); worstFlyDna.Add(minFlyGrowingTime); worstFlyDna.Add(minFlyHatchingTime); worstFlyDna.Add(minFlyNutritionalValue); worstFlyDna.Add(minFlyLifespan); worstFlyDna.Add(minFlyPossibilityOfSuccess); worstFlyDna.Add(maxFlyMutationRate); Vector3 randomPos; //Instanciador de huevos de pez List <float> fishRoeDna; for (int i = 0; i < numeroHuevosPez; i++) { fishRoeDna = new List <float>(); fishRoeDna.Add(Random.Range(minFishVel, maxFishVel)); fishRoeDna.Add(Random.Range(minFishAcceleration, maxFishAcceleration)); fishRoeDna.Add(Random.Range(minFishPhys, maxFishPhys)); fishRoeDna.Add(Random.Range(minFishOffspring, maxFishOffspring)); fishRoeDna.Add(Random.Range(minFishEggLayingTime, maxFishEggLayingTime)); fishRoeDna.Add(Random.Range(minFishGrowingTime, maxFishGrowingTime)); fishRoeDna.Add(Random.Range(minFishHatchingTime, maxFishHatchingTime)); fishRoeDna.Add(Random.Range(minFishNutritionalValue, maxFishNutritionalValue)); fishRoeDna.Add(Random.Range(minFishLifespan, maxFishLifespan)); fishRoeDna.Add(Random.Range(minFishPossibilityOfSuccess, maxFishPossibilityOfSuccess)); fishRoeDna.Add(Random.Range(minFishMutationRate, maxFishMutationRate)); randomPos = Random.insideUnitSphere * 10; randomPos.z = 0; Roe roeFish = Instantiate(huevoPezPrefab, transform.position + randomPos, Quaternion.identity).GetComponent <Roe>(); roeFish.Init(fishRoeDna, perfectFishDna, worstFishDna); } //Instanciador de huevos de rana List <float> frogRoeDna; for (int i = 0; i < numeroHuevosRana; i++) { frogRoeDna = new List <float>(); frogRoeDna.Add(Random.Range(minFrogVel, maxFrogVel)); frogRoeDna.Add(Random.Range(minFrogAcceleration, maxFrogAcceleration)); frogRoeDna.Add(Random.Range(minFrogPhys, maxFrogPhys)); frogRoeDna.Add(Random.Range(minFrogOffspring, maxFrogOffspring)); frogRoeDna.Add(Random.Range(minFrogEggLayingTime, maxFrogEggLayingTime)); frogRoeDna.Add(Random.Range(minFrogGrowingTime, maxFrogGrowingTime)); frogRoeDna.Add(Random.Range(minFrogHatchingTime, maxFrogHatchingTime)); frogRoeDna.Add(Random.Range(minFrogNutritionalValue, maxFrogNutritionalValue)); frogRoeDna.Add(Random.Range(minFrogLifespan, maxFrogLifespan)); frogRoeDna.Add(Random.Range(minFrogPossibilityOfSuccess, maxFrogPossibilityOfSuccess)); frogRoeDna.Add(Random.Range(minFrogMutationRate, maxFrogMutationRate)); randomPos = Random.insideUnitSphere * 10; randomPos.z = 0; Roe roeFrog = Instantiate(huevoRanaPrefab, transform.position + randomPos, Quaternion.identity).GetComponent <Roe>(); roeFrog.Init(frogRoeDna, perfectFrogDna, worstFrogDna); } for (int i = 0; i < numeroPlantas; i++) { randomPos = Random.insideUnitSphere * 18; randomPos.z = 0; Instantiate(plantaPrefab, transform.position + randomPos, Quaternion.identity); } bool freeSpace; for (int i = 0; i < numeroRocas; i++) { freeSpace = false; randomPos = Vector3.zero; while (!freeSpace) { randomPos = Random.insideUnitSphere * 18; randomPos.z = 0; if (!Physics.CheckSphere(randomPos, 1.04f, noRockLayer)) { freeSpace = true; } } Instantiate(rocaPrefab, transform.position + randomPos, Quaternion.identity); } for (int i = 0; i < numeroMoscas; i++) { SpawnFly(); } StartCoroutine(FlySpawn()); }