コード例 #1
0
ファイル: Fitness.cpp プロジェクト: osilvam/Practica
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;
}
コード例 #2
0
ファイル: SimFiles.cpp プロジェクト: psigelo/TareasElo330
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;
}
コード例 #3
0
ファイル: SimFiles.cpp プロジェクト: psigelo/TareasElo330
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;
}