główny algorytm w funkcji
This commit is contained in:
parent
3ff8b95999
commit
fc54101f4e
@ -1,18 +1,16 @@
|
||||
import random
|
||||
import math
|
||||
import statistics
|
||||
import time
|
||||
|
||||
### prawdopodobieństwo mutacji
|
||||
mutation_prob = 0.02
|
||||
mutation_prob = 0.03
|
||||
### ilość osobników w pokoleniu, powinna być parzysta
|
||||
generation_size = 30
|
||||
generation_size = 20
|
||||
### liczba pokoleń
|
||||
number_of_generations = 100
|
||||
number_of_generations = 30
|
||||
### liczba paczek
|
||||
number_of_packages = 15
|
||||
number_of_packages = 45
|
||||
### liczba regałów
|
||||
number_of_racks = 5
|
||||
number_of_racks = 70
|
||||
### jak bardzo promowane są osobniki wykorzystujące całą pojemność regału
|
||||
amount_of_promotion = 3
|
||||
|
||||
@ -95,55 +93,58 @@ def mutation(individual):
|
||||
individual[locus] = random.randint(0,number_of_racks-1)
|
||||
return individual
|
||||
|
||||
|
||||
def gen_alg(number_of_generations, generation_size, mutation_prob, amount_of_promotion):
|
||||
### WŁAŚCIWY ALGORYTM
|
||||
generation = first_gen()
|
||||
global_maximum = -math.inf
|
||||
|
||||
# pętla znajdująca najlepszy fitness w pierwszym pokoleniu
|
||||
for i in range(generation_size):
|
||||
evaluation_of_individual = evaluation(generation[i])
|
||||
if evaluation_of_individual > global_maximum:
|
||||
global_maximum = evaluation_of_individual
|
||||
best_individual = generation[i].copy()
|
||||
|
||||
#właściwa pętla programu
|
||||
for generation_index in range(number_of_generations):
|
||||
print('pokolenie numer: ', generation_index)
|
||||
# print(generation)
|
||||
|
||||
### RULETKA
|
||||
survivors = roulette(generation)
|
||||
# print('przetrwali: ',survivors)
|
||||
|
||||
### KRZYŻOWANIE
|
||||
descendants = []
|
||||
for individual in range(0,generation_size,2):
|
||||
pair = crossover(survivors[individual],survivors[individual+1])
|
||||
for each in pair:
|
||||
descendants.append(each)
|
||||
# print('potomkowie: ', descendants)
|
||||
|
||||
### MUTACJA
|
||||
for individual in range(generation_size):
|
||||
if random.random() <= mutation_prob:
|
||||
mutation(descendants[individual])
|
||||
# print('potomkowie po mutacji: ', descendants)
|
||||
|
||||
### NAJLEPSZE DOPASOWANIE
|
||||
local_maximum = -math.inf
|
||||
for each in range(generation_size):
|
||||
specific_fitness = evaluation(descendants[each])
|
||||
if specific_fitness > local_maximum:
|
||||
local_maximum = specific_fitness
|
||||
print('maximum w pokoleniu: ',local_maximum)
|
||||
if local_maximum > global_maximum:
|
||||
global_maximum = local_maximum
|
||||
generation = descendants
|
||||
print('maximum globalne: ', global_maximum)
|
||||
|
||||
### lista paczek, indeks to id paczki, wartość w liście to jej waga
|
||||
packages = [random.randint(2,9) for i in range(number_of_packages)]
|
||||
packages = [random.randint(1,10) for i in range(number_of_packages)]
|
||||
### lista regałów, indeks to id regału, wartość w liście to jego pojemność
|
||||
racks = [random.randint(10,20) for i in range(number_of_racks)]
|
||||
racks = [random.randint(15,18) for i in range(number_of_racks)]
|
||||
# print(packages)
|
||||
# print(racks)
|
||||
|
||||
### WŁAŚCIWY ALGORYTM
|
||||
generation = first_gen()
|
||||
global_maximum = -math.inf
|
||||
|
||||
# pętla znajdująca najlepszy fitness w pierwszym pokoleniu
|
||||
for i in range(generation_size):
|
||||
evaluation_of_individual = evaluation(generation[i])
|
||||
if evaluation_of_individual > global_maximum:
|
||||
global_maximum = evaluation_of_individual
|
||||
best_individual = generation[i].copy()
|
||||
|
||||
#właściwa pętla programu
|
||||
for generation_index in range(number_of_generations):
|
||||
print('pokolenie numer: ', generation_index)
|
||||
# print(generation)
|
||||
|
||||
### RULETKA
|
||||
survivors = roulette(generation)
|
||||
# print('przetrwali: ',survivors)
|
||||
|
||||
### KRZYŻOWANIE
|
||||
descendants = []
|
||||
for individual in range(0,generation_size,2):
|
||||
pair = crossover(survivors[individual],survivors[individual+1])
|
||||
for each in pair:
|
||||
descendants.append(each)
|
||||
# print('potomkowie: ', descendants)
|
||||
|
||||
### MUTACJA
|
||||
for individual in range(generation_size):
|
||||
if random.random() <= mutation_prob:
|
||||
mutation(descendants[individual])
|
||||
# print('potomkowie po mutacji: ', descendants)
|
||||
|
||||
### NAJLEPSZE DOPASOWANIE
|
||||
local_maximum = -math.inf
|
||||
for each in range(generation_size):
|
||||
specific_fitness = evaluation(descendants[each])
|
||||
if specific_fitness > local_maximum:
|
||||
local_maximum = specific_fitness
|
||||
print('maximum w pokoleniu: ',local_maximum)
|
||||
if local_maximum > global_maximum:
|
||||
global_maximum = local_maximum
|
||||
generation = descendants
|
||||
print('maximum globalne: ', global_maximum)
|
||||
gen_alg(number_of_generations, generation_size, mutation_prob, amount_of_promotion)
|
||||
|
Loading…
Reference in New Issue
Block a user