Beispiel #1
0
void Colony::run( int nSteps )
{
    for (int currentStep = 0; currentStep < nSteps; ++currentStep)
    {
        distributeAnts();
        moveAnts();
        updatePheromone();
        _ants.clear();
    }
}
Beispiel #2
0
void Colony::run( int nSteps )
{
    // saves parameter list
    FILE* paramFile = fopen( "params.txt", "w" );
    
    fprintf(paramFile, "Parâmetros utilizados na última execução:\n");
    
    fprintf(paramFile, "Formiga:\n" );
    fprintf(paramFile, "\tQuantidade: %d\n", Parameters::numberOfAnts);
    fprintf(paramFile, "\tAngulo de visão: %f\n", Parameters::fov);
    fprintf(paramFile, "\tPeso Feromônio: %f\n", Parameters::pheromoneWeight);
    fprintf(paramFile, "\tPeso Atributo: %f\n", Parameters::attributeWeight);
    fprintf(paramFile, "\tConstante Feromônio: %f\n", Parameters::pheromoneConstant);
    fprintf(paramFile, "\tTamanho Passo: %d\n", Parameters::stepLength);
    fprintf(paramFile, "\tNumero passos: %d\n", Parameters::maxSteps);
    fprintf(paramFile, "\tNumero passos erroneos: %d\n", Parameters::maxAbnormalSteps);
    
    fprintf(paramFile, "Feromônio:\n");
    fprintf(paramFile, "\tTurnos: %d\n", Parameters::turns);
    fprintf(paramFile, "\tTaxa de Evaporação: %f\n", Parameters::evaporationRate);
    fprintf(paramFile, "\tFeromonio minimo: %f\n", Parameters::minPheromone);
    fprintf(paramFile, "\tFeromonio maximo: %f\n", Parameters::maxPheromone);
    fprintf(paramFile, "\tFeromonio inicial: %f\n", Parameters::initPheromone);
    
    fprintf(paramFile, "Direção:\n");
    fprintf(paramFile, "\tLargura Gauss: %d\n", Parameters::widthGauss);
    fprintf(paramFile, "\tAltura Gauss: %d\n", Parameters::heightGauss);
    fprintf(paramFile, "\tLimiar Consistencia: %f\n", Parameters::cohTreshold);
    fprintf(paramFile, "\tRaio do Kernel de Abertura: %d\n", Parameters::dirOpenKernelRadius);
    fprintf(paramFile, "\tRaio do Kernel de Fechamento: %d\n", Parameters::dirCloseKernelRadius);
    
    fclose( paramFile );
    
    // initialize ants
    clearAnts();
    Point p( 0, 0 );
    for (int a = 0; a < Parameters::numberOfAnts; ++a)
    {
        Ant* ant = new Ant( p, _environment );
        _ants.push_back( ant );
    }
    
    // run simulation
    for (int currentStep = 0; currentStep < nSteps; ++currentStep)
    {
        distributeAnts();
        moveAnts();
        updatePheromone();
    }
}
Beispiel #3
0
void Graph::train(int ants, int max_repetitions, double t0, bool reset) {
    if (reset)
        std::fill(pheromone[0], pheromone[0] + m * n, t0);

    double **tmp = new double*[m];
    tmp[0] = new double[m * n];
    for (int i = 1; i < m; ++i)
        tmp[i] = tmp[i - 1] + n;

    for (int r = 0; r < max_repetitions; ++r) {
        evaporate();
        std::copy(pheromone[0], pheromone[0] + m * n, tmp[0]);
        for (int a = 0; a < ants; ++a) {
            auto solution = buildSolution();
            updatePheromone(tmp, solution);
        }
        std::copy(tmp[0], tmp[0] + m * n, pheromone[0]);
    }

    delete[] tmp[0];
    delete[] tmp;
}