Work in progress

This commit is contained in:
andrzej 2020-06-15 11:55:24 +02:00
parent 385afbf00a
commit 54e42b30e8
2 changed files with 11 additions and 11 deletions

View File

@ -21,7 +21,7 @@ def first_gen(number_of_packages, number_of_racks):
first_generation.append(individual) first_generation.append(individual)
return first_generation return first_generation
def evaluation(individual, packages, racks, number_of_packages, number_of_racks): def evaluation(individual, packages, racks, number_of_packages, number_of_racks, tree_predictor):
# im większy fitness tym lepszy osobnik # im większy fitness tym lepszy osobnik
# print("regały: ",racks) # print("regały: ",racks)
rest_of_capacity = racks.copy() rest_of_capacity = racks.copy()
@ -40,11 +40,11 @@ def evaluation(individual, packages, racks, number_of_packages, number_of_racks)
### tu dodaj to co zrobi Andrzej ### tu dodaj to co zrobi Andrzej
return fitness return fitness
def roulette(generation, packages, racks, number_of_packages, number_of_racks): def roulette(generation, packages, racks, number_of_packages, number_of_racks, tree_predictor):
# print('pokolenie: ', generation) # print('pokolenie: ', generation)
evaluations = [] evaluations = []
for i in range(generation_size): for i in range(generation_size):
individual_fitness = evaluation(generation[i], packages, racks, number_of_packages, number_of_racks) individual_fitness = evaluation(generation[i], packages, racks, number_of_packages, number_of_racks, tree_predictor)
evaluations.append(individual_fitness) evaluations.append(individual_fitness)
# print("tablica dopasowań: ", evaluations) # print("tablica dopasowań: ", evaluations)
maximum = min(evaluations) maximum = min(evaluations)
@ -90,7 +90,7 @@ def mutation(individual, number_of_packages, number_of_racks):
return individual return individual
def gen_alg(packages, racks, number_of_generations, generation_size, mutation_prob, amount_of_promotion): def gen_alg(packages, racks, number_of_generations, generation_size, mutation_prob, amount_of_promotion, tree_predictor):
number_of_packages = len(packages) number_of_packages = len(packages)
number_of_racks = len(racks) number_of_racks = len(racks)
@ -100,18 +100,18 @@ def gen_alg(packages, racks, number_of_generations, generation_size, mutation_pr
# pętla znajdująca najlepszy fitness w pierwszym pokoleniu # pętla znajdująca najlepszy fitness w pierwszym pokoleniu
for i in range(generation_size): for i in range(generation_size):
evaluation_of_individual = evaluation(generation[i], packages, racks, number_of_packages, number_of_racks) evaluation_of_individual = evaluation(generation[i], packages, racks, number_of_packages, number_of_racks, tree_predictor)
if evaluation_of_individual > global_maximum: if evaluation_of_individual > global_maximum:
global_maximum = evaluation_of_individual global_maximum = evaluation_of_individual
best_individual = generation[i].copy() best_individual = generation[i].copy()
#właściwa pętla programu #właściwa pętla programu
for generation_index in range(number_of_generations): for generation_index in range(number_of_generations):
print('pokolenie numer: ', generation_index) # print('pokolenie numer: ', generation_index)
# print(generation) # print(generation)
### RULETKA ### RULETKA
survivors = roulette(generation, packages, racks, number_of_packages, number_of_racks) survivors = roulette(generation, packages, racks, number_of_packages, number_of_racks, tree_predictor)
# print('przetrwali: ',survivors) # print('przetrwali: ',survivors)
### KRZYŻOWANIE ### KRZYŻOWANIE
@ -131,7 +131,7 @@ def gen_alg(packages, racks, number_of_generations, generation_size, mutation_pr
### NAJLEPSZE DOPASOWANIE ### NAJLEPSZE DOPASOWANIE
local_maximum = -math.inf local_maximum = -math.inf
for each in range(generation_size): for each in range(generation_size):
specific_fitness = evaluation(descendants[each], packages, racks, number_of_packages, number_of_racks) specific_fitness = evaluation(descendants[each], packages, racks, number_of_packages, number_of_racks, tree_predictor)
if specific_fitness > local_maximum: if specific_fitness > local_maximum:
local_maximum = specific_fitness local_maximum = specific_fitness
generation_best_individual = descendants[each].copy() generation_best_individual = descendants[each].copy()
@ -141,5 +141,5 @@ def gen_alg(packages, racks, number_of_generations, generation_size, mutation_pr
best_individual = generation_best_individual.copy() best_individual = generation_best_individual.copy()
generation = descendants generation = descendants
print('maksimum globalne: ', global_maximum) print('maksimum globalne: ', global_maximum)
print("jeśli maksimum globalne wynosi 0, każda paczka ma swój regał") # print("jeśli maksimum globalne wynosi 0, każda paczka ma swój regał")
print("najlepsze dopasowanie: ", best_individual) print("najlepsze dopasowanie: ", best_individual)

View File

@ -20,7 +20,7 @@ TILE_HEIGHT = 32
CIRCLE_CENTER_X, CIRCLE_CENTER_Y = int(TILE_WIDTH/2), int(TILE_HEIGHT/2) CIRCLE_CENTER_X, CIRCLE_CENTER_Y = int(TILE_WIDTH/2), int(TILE_HEIGHT/2)
class MainGameFrame: class MainGameFrame:
def __init__(self, mutation_prob = 0.03, generation_size = 40, number_of_generations = 30, amount_of_promotion = 0): def __init__(self, mutation_prob=0.03, generation_size=40, number_of_generations=30, amount_of_promotion=0):
pygame.font.init() pygame.font.init()
self.display = pygame.display.set_mode(WINDOW_SIZE) self.display = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Smart ForkLift") pygame.display.set_caption("Smart ForkLift")
@ -40,7 +40,7 @@ class MainGameFrame:
# print("koordynaty regałów: ",racks_coords) # print("koordynaty regałów: ",racks_coords)
print("wagi paczek: ",packs_sizes) print("wagi paczek: ",packs_sizes)
print("pojemności regałów: ",racks_capacities) print("pojemności regałów: ",racks_capacities)
gen_alg(packs_sizes, racks_capacities, number_of_generations, generation_size, mutation_prob, amount_of_promotion) gen_alg(packs_sizes, racks_capacities, number_of_generations, generation_size, mutation_prob, amount_of_promotion, self.agent.location_classifier)
def run(self): def run(self):
while True: while True: