def train(): tStart = time.time() # stack_size=4 envName = 'deadly_corridor.cfg' game = DoomGame() game.load_config(envName) game.set_sound_enabled(False) game.set_screen_resolution(ScreenResolution.RES_640X480) game.set_window_visible(False) game.init() # acts = game.get_available_buttons_size() del game trainer = Trainer(actions=range(4), teamPopSize=30, rTeamPopSize=30) # trainer = loadTrainer('trainer.tn') # trainer = loadTrainer('trainer.tn') processes = 7 man = mp.Manager() pool = mp.Pool(processes=processes, maxtasksperchild=1) allScores = [] # track all scores each generation for gen in range(100): # do 100 generations of training scoreList = man.list() # get agents, noRef to not hold reference to trainer in each one # don't need reference to trainer in multiprocessing agents = trainer.getAgents()# swap out agents only at start of generation # run the agents pool.map(runAgent, [(agent, envName, scoreList, 1, 2000) for agent in agents]) # apply scores, must do this when multiprocessing # because agents can't refer to trainer teams = trainer.applyScores(scoreList) # important to remember to set tasks right, unless not using task names # task name set in runAgent() trainer.evolve(tasks=[envName]) # go into next gen # an easier way to track stats than the above example scoreStats = trainer.fitnessStats allScores.append((scoreStats['min'], scoreStats['max'], scoreStats['average'])) print('Time Taken (Hours): ' + str((time.time() - tStart)/3600)) print('Gen: ' + str(gen)) print('Results so far: ' + str(allScores)) # clear_output() print('Time Taken (Hours): ' + str((time.time() - tStart)/3600)) print('Results:\nMin, Max, Avg') for score in allScores: print(score[0],score[1],score[2]) trainer.saveToFile('trainer.tn')
agents = trainer.getAgents() agent = Agent agent = agent.loadAgent("Magnus") print("yo as far as I understand the load was successful?") else: IQ = 0 trainer = Trainer(actions=range(30), teamPopSize=opts.popSize, rTeamPopSize=opts.popSize, sourceRange=310) agents = trainer.getAgents() agent = agents.pop() agent.saveToFile("Magnus") #psykerLevel = 0 trainer.saveToFile("Tzeentch") agentScores = [] curGen = 0 #psykerLevel += agent.psykerLevel lastState = None # create a log file global logName timestamp = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M") logName = "log-{}.txt".format(timestamp) # serve until force stop while True: pass