double Fitness::calculateFitness() { if(stdDesviation(robot_rightVel) < 0.5 && stdDesviation(robot_leftVel) < 0.5) { cerr << "FITNESS ERROR:\tNAVIGATION WITHOUT DIRECTION CHANGES" << endl; fitness = FAILED_FITNESS; } else { for(int i = 1; i < (int)robot_position.size(); i++) { double x0 = robot_position.at(i - 1).at(0); double x1 = robot_position.at(i).at(0); double y0 = robot_position.at(i - 1).at(1); double y1 = robot_position.at(i).at(1); double tail = robot_tail.at(i - 1); distance = distance + tail*sqrt(pow(x1 - x0, 2) + pow(y1 - y0, 2)); } fitness = distance;//10/(1 + exp(3*(-distance + 2))); } generation_fitness.push_back(fitness); return fitness; }
void SimFiles::addFileFrecuency(Fitness * fitness, int generation) { double average = mean(fitness->getGenerationFrecuency()); double stddesv = stdDesviation(fitness->getGenerationFrecuency()); file_frecuency << generation << "\t" << average << "\t" << stddesv << "\t" << fitness->getFrecuencyThreshold() << endl; }
void SimFiles::addFileFitness(Fitness * fitness, int generation) { double average = mean(fitness->getGenerationFitness()); double stddesv = stdDesviation(fitness->getGenerationFitness()); file_fitness << generation << "\t" << average << "\t" << stddesv << endl; }