Wdrożyłem algorytm genetyczny, aby rozwiązać udoskonalony problem Travelling Salesman (ciężar krawędzi zmienia się wraz z porą dnia). Obecnie jestem oceny różnych parametrów mojej symulacji i natknąłem się na korelacji nie mogę wytłumaczyć sobie:Algorytm genetyczny: Wyższa częstość mutacji prowadzi do niższego czasu pracy
Wyższy wskaźnik mutacja prowadzi do mniejszej czasie wykonywania. Osobiście zakładam, że jest inaczej, ponieważ wyższy wskaźnik mutacji powoduje więcej operacji. (25% Współczynnik mutacji jest o 12% szybszy niż 5%)
Najlepsze wyniki osiąga się, gdy współczynnik mutacji wynosi 8% (5% jest lepsze niż 10%, a 25% działa najgorzej (z wyjątkiem 0%)) A niższa wartość fitness jest lepsza.
Ilość iteracji jest ustawiony przez parametr generacji, który jest ustawiony na 10000 we wszystkich przypadkach testowych.
Każdy przypadek testowy jest wykonywany 10 razy.
Moja implementacja (w Pythonie) mutacji wygląda następująco:
def mutate(self,p):
for i in self.inhabitants:
r = random()
if r <= p:
i.mutate()
p
jest tempo mutacji
Mutacja wygląda to
def mutate(self):
r1 = randint(0,self.locations.size()-1)
r2 = randint(0,self.locations.size()-1)
self.locations.swap(r1,r2)
Dlaczego wyższy mutację stopa prowadzi do szybszego czasu realizacji?
Edit: I faktycznie prowadził te same testy na moim Raspberry Pi (który jest 9 razy wolniej), a to prowadzi do tego samego rezultatu:
Mniejszy czas wykonywania oznacza mniej operacji wykonywanych (ogólnie mówiąc). Wyższe "p" prowadzi do częstszego wywoływania "i.mutate()". Czy "i.mutate()" zmienia zmienną "self.inhabitants"? Czy mógłbyś pokazać kod dla tej funkcji? (lub przynajmniej działający przykład, jeśli to możliwe). – armatita
Czy mógłbyś też spróbować stworzyć lokalną kopię self.inhabitantów w funkcji mutate, a zamiast tego zapętlić kopię? – armatita
@armatita Dodałem kod mutacji. Nie rozumiem, co masz na myśli, mówiąc o pętli. – Strernd