"Problem Komiwojażera" - algorytmy genetyczne

0

Witam, mam problem odnośnie algorytmu genetycznego na studiach, selekcja, krzyżowanie czy mutacja działają ok, natomiast funkcja oceny coś mi nawala, ponieważ co kilka iteracji powtarza swoje wyniki. Tablice distanceArray wypełniam najpierw danymi z pliku txt od wykładowcy,a potem co cały obieg algorytmu (selekcja, krzyżowanie, mutacja) wywołuję funkcję Fitness. Jako wynik oceny biorę z każdej iteracji najmniejszą odległość (chyba że brać sumę odległości w tablicy ? ale ona również powtarza się co 2 iteracja), następnie modyfikuję wszystkie odległości w tablicy no i potem sumuję wszystkie elementy dla selekcji. Wydaje mi się, że problem leży podczas modyfikowania tablicy odległości... ale nie wiem jak mam to robić inaczej (taki sposób dostałem na uczelni). Bardzo proszę o pilną pomoc !

Końcowa tablica wyników:
22261,4787,328,4787,328,4787,328,4787,328,4787,

No i funkcja:

public void Fitness()
        {
            int max = distanceArray.Max();

            minValue = distanceArray.Min();

            resultTable.Add(minValue);

            for (int i = 0; i < 20; i++)
            {
                odlO[i] = max + 1 - odlO[i];
            }

            count = 0;

            for (int i = 0; i < distanceArray.Length; i++)
            {
                count += distanceArray[i];
            }
        }
0

o_O czy ty w ogóle wiesz co to jest problem komiwojażera? To jest problem szukania minimalnego cyklu hamiltona w grafie ważonym. Jakością znalezionego cyklu jest suma wag na krawędziach, którą chcesz zminimalizować. Jak ty oceniasz rozwiązanie za pomocą:

Jako wynik oceny biorę z każdej iteracji najmniejszą odległość

to brak mi słów.

Poza tym nie bardzo rozumiem co ty tutaj robisz. Napisz wyraźnie, po polsku, pełnymi zdaniami (albo lepiej za pomoca matematycznego formalizmu...) jak reprezentujesz osobnika, jak wykonujesz krzyżowanie oraz mutację. Bo mam dziwne wrażenie że nie dość że nie rozumiesz problemu który chcesz rozwiązać, to nie rozumiesz też sposobu w jaki masz to zrobić...

0
szyszu napisał(a):

Jako wynik oceny biorę z każdej iteracji najmniejszą odległość (chyba że brać sumę odległości w tablicy ? ale ona również powtarza się co 2 iteracja)

Najmniejszą odległość czego?

szyszu napisał(a):

następnie modyfikuję wszystkie odległości w tablicy no i potem sumuję wszystkie elementy dla selekcji. Wydaje mi się, że problem leży podczas modyfikowania tablicy odległości... ale nie wiem jak mam to robić inaczej (taki sposób dostałem na uczelni).

Co takieho... modyfikujesz... ?
Może sobie wstaw od razu same zera .... :))))))

No i funkcja:
public void Fitness()
...

Very good - You are the Mister of fitness... hehe!

1 użytkowników online, w tym zalogowanych: 0, gości: 1