void Colony::run( int nSteps ) { for (int currentStep = 0; currentStep < nSteps; ++currentStep) { distributeAnts(); moveAnts(); updatePheromone(); _ants.clear(); } }
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(); } }
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; }