def main_parallel(blind, mode, individuals, numAsteroids, generation2load = None): global SCREEN, BG, GAME_AREA, MUTATION_PROBABILITY currentIndividual = 0 currentGeneration = 0 if blind == True: initDraw() # Init the ships ships = None #if mode == 'genetic': if generation2load is None: print("Inicializando uma população do zero") ships = initializePopulation(individuals, numAsteroids) # # of ships and asteroids in each ship saveGeneration(ships, currentGeneration) else: generation = generation2load[0] individualNum = generation2load[1] ships = loadGeneration(generation) #ships = loaded_data[0] currentGeneration = generation environment = Environment(individuals, ships) numThreads = 8 while True: # Here I have to generate a list so that each position is a arguments bag that each process will pick argumentBag = [] for currentIndividual in range(int(individuals/numThreads)): for i in range(numThreads): individualNum = i + currentIndividual*numThreads ship1 = ships[individualNum] argumentBag.append([ship1, individualNum]) with multiprocessing.Pool(processes=numThreads) as pool: pool.map(MainLooping, argumentBag) pool.close() pool.join() for i in range(individuals): ships[ship_[i][1]] = copy.deepcopy(ship_[i][0]) ship_[:] = [] #print(ships[1].brain) print("REPLICATING..") environment.replicate(MUTATION_PROBABILITY) currentIndividual = 0 restoreScene(ships, numAsteroids) currentGeneration += 1 saveGeneration(ships, currentGeneration) MUTATION_PROBABILITY -= MUTATION_PROBABILITY*0.01 print("Nova MP: " + str(MUTATION_PROBABILITY)) pygame.quit()
def main(blind, mode, individuals, numAsteroids, generation2load = None): global SCREEN, BG, GAME_AREA, METADATA currentIndividual = 0 currentGeneration = 0 drawNeuralNetwork = None if blind == True: initDraw() drawNeuralNetwork = DrawNN([8,16,16,4], METADATA) # Init the ships ships = None #if mode == 'genetic': generation = 0 if generation2load is None: print("Inicializando uma população do zero") ships = initializePopulation(individuals, numAsteroids, drawNeuralNetwork) # # of ships and asteroids in each ship saveGeneration(ships, currentGeneration) else: generation = generation2load[0] individualNum = generation2load[1] ships = loadGeneration(generation, drawNeuralNetwork) #ships = loaded_data[0] currentGeneration = generation currentIndividual = individualNum # But a repeatead IF? Yes, m**********r if blind == True: lines = np.asarray(np.loadtxt("checkpoints/scores.txt", comments="#", delimiter="-", unpack=False)).astype(int) lines = lines[:,0] lines = lines[0:generation+1] PLOT = plotData(lines) #elif mode == "normalGame": # asteroids = initAsteroids(1) # ships = initShips(1, asteroids) environment = Environment(individuals, ships) clock = pygame.time.Clock() running = True random.seed(ships[currentIndividual].seed) cont = 0 while running: ship = ships[currentIndividual] # UPDATE SHIPS EM PARALELO if update(ship) == 'dead': print("O individuo " + str(currentIndividual) + " morreu") currentIndividual += 1 if generation2load is not None: exit() if currentIndividual == individuals: print("REPLICATING..") environment.replicate(MUTATION_PROBABILITY) print(ships) currentIndividual = 0 restoreScene(ships, numAsteroids) currentGeneration += 1 if generation2load is None: saveGeneration(ships, currentGeneration) print("Iniciando a geração " + str(currentGeneration)) # Restore the seed of the new individual just before update him random.seed(ships[currentIndividual].seed) continue if blind == True: draw(ship, drawNeuralNetwork) # Score text SCORE = plotScore(str(ship.shotsHit-1)) METADATA.blit(SCORE, (125,20)) # Score chart PLOT.set_colorkey((0,255,0)) METADATA.blit(PLOT, (10,450)) SCREEN.blit(GAME_AREA, (METADATA_SPACE,0)) SCREEN.blit(METADATA, (0,0)) #pygame.image.save(SCREEN, "/home/davi/asteroids/video/frames_dos_games/1/"+str(cont)+".png") cont += 1 pygame.display.update() SCREEN.blit(BG, (METADATA_SPACE,0)) GAME_AREA.fill((0, 255, 0)) METADATA.fill((0, 0, 0)) keyPressed = readKeys() updatePosition(keyPressed, ships) if keyPressed == False: running = False clock.tick(10000) pygame.quit()