Cześć, mam problem ze stwarzaniem chromosomu w problemie Komiwojażera. Jako input mam listę z miastami List<City>
public class City {
private double x;
private double y;
}
Teraz chcę zakodować je w ten sposób żeby indeks danego miasta wskazywał na miasto w liście o konkretnym indeksie. Moja klasa Chromosome:
public class Chromosome {
private List<Integer> listOfCities = new ArrayList<>();
private double distance = 0;
private double fitness = 0;
}
Wygląda to mniej więcej tak:
Mając listę z indeksami (7 5 1 6 9 2 8 4 3) zaczynając od indeksu w tej liście nr 0:
- 7 -> 8
- teraz 8 -> 4
- potem 4 -> 6
.
.
.
Tak że powstaje nam ścieżka 7-8-4-6-2-5-9-3-1.
Potem na podstawie takiej listy liczę sumaryczny dystans miedzy miastami i na tej podstawie obliczam funkcję przystosowania.
Nie wiem jednak jak, stworzyć Chromosom aby nie powstały cykle lub po wpisaniu do tablicy kolejnych indeksów zrobić potem Collections.shuffle(lista).
Macie jakieś dobre podpowiedzi jak powinienem to zrobić?