Коммивояжер для java

основываясь на этом псевдо-коде, я пытаюсь реализовать функцию Java fittness для Проблемы коммивояжера, но я не уверен, что делаю это правильно, может кто-нибудь, пожалуйста, помогите мне.

N   The number of cities to visit
T   A tour (list of integers of size N)
D   An N by N matrix containing each d(i,j)

Let s = 0
For i = 1 to (N-1)
Let a = ti
Let b = ti+1
Let s = s + d(a,b)
 End For
     Let end_city = tn
     Let start_city = t1
     Let s = s + d(end_city,start_city)
The tour length s

моя попытка написать это на java

public static ArrayList<Integer> Fitness(){
    int n = 10; // Number of cities to visit
    ArrayList<Integer> t = new ArrayList<Integer>();
    int[][] d = null;
    int s = 0, a, b;

    for (int i = 1; i<n; i++){
        for (int j = 1; j<n; j++){
            d = new int[i][j];
        }

        for( i = 1; i<n; i++){
            a = t.get(i);
            b = t.get(i+1);
            s = s + d[a][b];
        }
        int end_city = t.get(n);
        int start_city = t.get(1);
        s = s + d[end_city][start_city];
    }
    return t;

может кто-то пожалуйста, помогите мне. Спасибо.

1 ответов


вы должны начать решать что у вас есть и что вы хотите.


что у вас есть

для фитнес-функции для Проблемы коммивояжера, согласно вашему псевдо-коду, у вас будет следующий ввод.

  • количество городов
  • тур, пригодность которого должна быть рассчитана
  • карта с расстояниями (в этом случае матрица смежности).

Это должно быть the формальных параметров вашей функции пригодности.


что вы хотите

цель фитнес-функции состоит в том, чтобы иметь способ измерения качества с точки зрения одного параметра.

в этом случае длина служит этой цели.

Это должно быть возвращаемое значение вашей функции пригодности.


это делает прототип код функции будет как следует

public double fitness(List<Integer> tour,
                      int numberOfCities,
                      double[][] distanceBetween);

теперь псевдо-код для тела, легко расшифровать, если вы отступ это правильно и посмотрите еще раз.

Let s = 0
For i = 1 to (N-1)
    Let a = ti
    Let b = ti+1
    Let s = s + d(a,b)
End For
Let end_city = tn
Let start_city = t1
Let s = s + d(end_city,start_city)
The tour length s

это должно быть довольно легко разработать остальные. Это довольно просто перевести его на Java.

удачи.