static void gogo_ant(ref ant_t ant, matrix_t adj_mat, matrix_t weight, matrix_t d_pheromon, int q) { int N = weight.n; int i = 1; int next = 0; array_t prob = create_array(N); while (i < N) { double sum_weight = 0; for (int j = 0; j < N; j++) { sum_weight += weight.matr[ant.curr_city, j] * ant.Jk.arr[j]; } for (int j = 0; j < N; j++) { prob.arr[j] = weight.matr[ant.curr_city, j] / sum_weight * ant.Jk.arr[j]; } next = choose_next(prob); ant.curr_city = next; ant.Jk.arr[next] = 0; ant.route.arr[i++] = next; } ant.Lk = (int)(length_of_route(adj_mat, ant.route)); add_pheromon(d_pheromon, ant.route, ant.Lk, q); }
static ant_t[] create_ant_array(int num_of_cities) { ant_t[] ant_arr = new ant_t[num_of_cities]; for (int i = 0; i < num_of_cities; i++) { ant_arr[i] = create_ant(i, num_of_cities); } return(ant_arr); }
static ant_t create_ant(int start_pos, int num_of_cities) { ant_t ant = new ant_t(); ant.start_city = start_pos; ant.curr_city = start_pos; ant.Lk = 0; ant.route = create_array(num_of_cities); ant.Jk = create_array(num_of_cities); return(ant); }
static void init_ant(ref ant_t ant) { int start = ant.start_city; ant.curr_city = start; ant.Lk = 0; for (int i = 0; i < ant.route.size; i++) { ant.route.arr[i] = -1; ant.Jk.arr[i] = 1; } ant.route.arr[0] = start; ant.Jk.arr[start] = 0; }