Beispiel #1
0
void printTour( long int *t ) 
/*    
      FUNCTION:       print the tour *t
      INPUT:          pointer to a tour
      OUTPUT:         none
*/
{
    long int   i;

    printf("\n");
    for( i = 0 ; i <= n ; i++ ) {
	if (!i%25)
	    printf("\n");
	printf("%ld ", t[i]);
    }
    printf("\n");
    printf("Tour length = %ld\n\n",compute_tour_length( t ));
}
Beispiel #2
0
static void construct_solutions(void) {/*{{{*/
	int k, i, step, r;

	/* Fase 1: esvaziar a memória das formigas marcando todas as cidades como
	 * não visitadas. */
	for (k = 0; k < M; k++) {
		ant[k].tour_length = 0;
		for (i = 0; i < N; i++) {
			ant[k].visited[i] = FALSE;
		}
	}

	/* Fase 2: atribuir a cada formiga uma cidade inicial randomicamente. */
	srand48(time(NULL));
	step = 0;
	for (k = 0; k < M; k++) {
		r = lrand48() % N;
		ant[k].tour[step] = r;
		ant[k].visited[r] = TRUE;
	}

	/* Fase 3: cada formiga constrói uma rota completa. */
	while (step < N-1) {
		step++;
		for (k = 0; k < M; k++) {
			neighbor_list_AS_decision_rule(k, step);
		}
	}

	/* Fase 4: as formigas voltam para a cidade inicial e o comprimento da rota
	 * de cada rota da formiga é computado. */
	for (k = 0; k < M; k++) {
		//por simplificaçao, repetir o identificador da primeira cidade na
		//última posição do array tour[]:
		ant[k].tour[N] = ant[k].tour[0];
		ant[k].tour_length = compute_tour_length(k);
	}

}/*}}}*/