void ProximityMating::updateOrganismsToMateWithList(id_t mateId, double mateFitness, std::string mateGenome, std::string mateMind) { for (int i = 0; i < organismsToMateWith.size(); i++) { if (organismsToMateWith[i].getId() == mateId) { organismsToMateWith[i].setFitness(mateFitness); return; } } Organism newMate = Organism(mateGenome, mateMind, mateId, mateFitness, 0, 0, std::vector<id_t>(), Organism::ADULT, true); organismsToMateWith.push_back(newMate); storeMatingLocation(to_string(mateId), to_string(worldModel.position.x)+" "+to_string(worldModel.position.y)); }
void EvolverController::birthMessage(std::string message, double currentTime) { id_t parent1 = std::atoi(MessagesManager::get(message, "PARENT1").c_str()); id_t parent2 = std::atoi(MessagesManager::get(message, "PARENT2").c_str()); id_t organismId = std::atoi(MessagesManager::get(message, "ORGANISM_ID").c_str()); unsigned int size = std::atoi(MessagesManager::get(message, "SIZE").c_str()); std::string genome = MessagesManager::get(message, "GENOME"); std::string mind = MessagesManager::get(message, "MIND"); if(parent1 > 0){ int index = searchForOrganism(parent1); if (index >= 0) { organismsList[index].setOffspring(organismsList[index].getOffspring()+1); } else { std::string event = " ORGANISM_BUILT_MESSAGE (parent1)"; std::string fields = " PARENT1: " + std::to_string(parent1) + "\n" + " PARENT2: " + std::to_string(parent2) + "\n" + " ORGANISM_ID: " + std::to_string(organismId) + "\n" + " SIZE: " + std::to_string(size) + "\n" + " GENOME: " + genome + "\n" + " MIND: " + mind + "\n"; logListProblem(event, message, fields); } } if(parent2 > 0){ int index = searchForOrganism(parent2); if (index >= 0) { organismsList[index].setOffspring(organismsList[index].getOffspring()+1); } else { std::string event = " ORGANISM_BUILT_MESSAGE (parent2)"; std::string fields = " PARENT1: " + std::to_string(parent1) + "\n" + " PARENT2: " + std::to_string(parent2) + "\n" + " ORGANISM_ID: " + std::to_string(organismId) + "\n" + " SIZE: " + std::to_string(size) + "\n" + " GENOME: " + genome + "\n" + " MIND: " + mind + "\n"; logListProblem(event, message, fields); } } std::vector<id_t> parents; parents.push_back(parent1); parents.push_back(parent2); Organism newOrganism = Organism(genome, mind, organismId, 0, size, 0, parents, Organism::INFANT, false); int idx = searchForOrganism(organismId); if (idx >= 0) { std::string before = getOrganismsListAsString(); organismsList.erase(organismsList.begin()+idx); std::string after = getOrganismsListAsString(); ofstream file; file.open(RESULTS_PATH + simulationDateAndTime + "/already_there.txt", ios::app); file << std::endl; file << "organism " << organismId << " was already inside the list, in position " << idx << std::endl; file << "list before:" << std::endl << before << std::endl; file << "list after:" << std::endl << after << std::endl; file.close(); } organismsList.push_back(newOrganism); ofstream file2; file2.open(RESULTS_PATH + simulationDateAndTime + "/added.txt", ios::app); file2 << std::endl; file2 << "organism " << organismId << " added to list " << std::endl; file2 << "list:" << std::endl << getOrganismsListAsString() << std::endl; file2.close(); std::string log = std::to_string(getTime()) + " PROCREATE " + std::to_string(parent1) + " and " + std::to_string(parent2) + " successfully had child " + std::to_string(organismId); storeEventOnFile(log); }
#include "catch.h" #include "organism.h" SCENARIO("an organism can be killed", "[organism]") { GIVEN("a dead organism") { Organism organism = Organism(false); REQUIRE(organism.is_dead() == true); WHEN("it is killed") { organism.kill(); THEN("it remains dead") { REQUIRE(organism.is_dead() == true); } } } GIVEN("an alive organism") { Organism organism = Organism(true); REQUIRE(organism.is_alive() == true); WHEN("it is killed") {