Zaktualizuj 'Jakub Damiński.md'
This commit is contained in:
parent
7cbe6ab755
commit
d292b8d750
@ -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.
|
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
|
#### 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
|
Loading…
Reference in New Issue
Block a user