Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()