Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }