główny algorytm w funkcji

This commit is contained in:
magdabiadala 2020-05-11 11:53:55 +02:00
parent 3ff8b95999
commit fc54101f4e

View File

@ -1,18 +1,16 @@
import random import random
import math import math
import statistics
import time
### prawdopodobieństwo mutacji ### prawdopodobieństwo mutacji
mutation_prob = 0.02 mutation_prob = 0.03
### ilość osobników w pokoleniu, powinna być parzysta ### ilość osobników w pokoleniu, powinna być parzysta
generation_size = 30 generation_size = 20
### liczba pokoleń ### liczba pokoleń
number_of_generations = 100 number_of_generations = 30
### liczba paczek ### liczba paczek
number_of_packages = 15 number_of_packages = 45
### liczba regałów ### liczba regałów
number_of_racks = 5 number_of_racks = 70
### jak bardzo promowane są osobniki wykorzystujące całą pojemność regału ### jak bardzo promowane są osobniki wykorzystujące całą pojemność regału
amount_of_promotion = 3 amount_of_promotion = 3
@ -95,55 +93,58 @@ def mutation(individual):
individual[locus] = random.randint(0,number_of_racks-1) individual[locus] = random.randint(0,number_of_racks-1)
return individual 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 ### 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ść ### 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(packages)
# print(racks) # print(racks)
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)