Zaktualizuj 'Jakub Damiński.md'

This commit is contained in:
Jakub Damiński 2020-06-15 13:54:22 +00:00
parent 7cbe6ab755
commit d292b8d750

View File

@ -12,4 +12,43 @@ Ponieważ wózek musi odwiedzić wszystkie paczki każde rozwiązanie tego probl
Wykorzystując algorytm genetyczny sprawimy, że spośród losowych permotacji zaczną wyłaniać się tej najbardziej efektywne, czyli te o najkrótszej ścieżce.
#### Zasada działania
...
Pierwszym krokiem jest zapełnienie populacji losowymi permutacjiami.
Następnie wykonuje się liczba iteracji w których najlepsze osobniki krzyżują się ze sobą tworzyć nowe permutacje wymianiając między sobą losową ilość elementów
```
def crossover(a, b):
new_a = copy.deepcopy(a)
new_b = copy.deepcopy(b)
for i in range(floor(len(a) / 2)):
rel = randrange(len(a))
tmp_a = new_a[rel]
tmp_b = new_b[rel]
if tmp_a == tmp_b:
continue
new_a[new_a.index(tmp_b)] = tmp_a
new_b[new_b.index(tmp_a)] = tmp_b
new_a[rel] = tmp_b
new_b[rel] = tmp_a
return new_a, new_b
```
Nowo stworzone osobniki mają następnie szansę na mutacje, która polega na zamienieniu dwóch losowych elementów ze sobą
```
def mutate(route):
new_route = copy.deepcopy(route)
for i in range(len(route) - 1):
if random() < mutation_probability:
tmp = new_route[i]
new_route[i] = new_route[i + 1]
new_route[i + 1] = tmp
return new_route
```
Następnym krokiem jest dodanie do populacji najlepszych osobników z poprzedniej populacji
```
for j in range(0, num_of_surviving):
new_population.append(population[scores[j][0]])
```
Po wykonaniu tych kroków do nowej populacji dodawane są zupelnie nowe soobniki by osiągną maksymalną ilość populacji
```
for j in range(max_population - (num_of_surviving + num_of_couples)):
new_population.append(create_new_route(packages))
```
Na koniec iteracji wszystkie permutacje są oceniane na podstawie tego ile wózkowi zajęło by przejechanie całej trasy