def drawBeforeAfterTeach(self, master, student, learned_student, bpPositions): if self.draw and random.random() < 1.0/(2.0*float(self.popSize)): paths = [] endpts = [] maze_lib.SetVerbosity(True) dataMaster = maze_lib.EvalNetwork(master) dataBefore = maze_lib.EvalNetwork(student) dataAfter = maze_lib.EvalNetwork(learned_student) maze_lib.SetVerbosity(False) paths.append(dataMaster[3:]) paths.append(dataBefore[3:]) paths.append(dataAfter[3:]) endpts.append((dataMaster[1], dataMaster[2])) endpts.append((dataBefore[1], dataBefore[2])) endpts.append((dataAfter[1], dataAfter[2])) print "drawing before and after backprop learning" testmaze.drawMaze(self.maze_file, endpts, paths, bpPositions, self.maze_file + "_" + str(self.numEval) + "_comp", markerStyle=['.', 'x', '+'], lineColor=['b', 'r', 'g'], lineLabels=['teacher', 'before', 'after'])
def testGA(nTrials=1, nGen=250, useBackprop=(True, 0.5, 2, 25, False), maze_file = "medium_maze.txt", draw=True, learningRate=0.05, timesteps=400): maze_lib.SetUp(learningRate, timesteps) maze_lib.SetMazePath(os.getcwd() + "/" + maze_file) maze_lib.SetVerbosity(False) if not useBackprop or not useBackprop[0]: useBackprop = False gen = None avgBestFit = [] avgMeanFit = [] endpts = [] paths = [] for k in xrange(nTrials): print "trial number:", k+1 # reload(maze_lib) # maze_lib.SetUp(learningRate) # maze_lib.SetMazePath(os.getcwd() + "/" + maze_file) # maze_lib.SetVerbosity(False) data = [] ga = genetic(genomeSize=maze_lib.GetNetworkWeightCount(), hiddenSize=maze_lib.GetNetworkHiddenUnitCount(), maxEvals=1e308, draw=draw, useBackprop=useBackprop, maze_file=maze_file) for i in xrange(nGen): ga.step() if ga.numGen % 5 == 0: data.append(ga.printStats(printGenome=False)) maze_lib.SetVerbosity(True) print ga.bestGenome results = maze_lib.EvalNetwork(ga.bestGenome) maze_lib.SetVerbosity(False) fitness = results[0] paths.append(results[3:]) endpts.append((results[1], results[2])) if not gen: gen = [x[0] for x in data] avgBestFit.append([x[2] for x in data]) avgMeanFit.append([x[3] for x in data]) if draw: return avgBestFit = np.mean(np.vstack(avgBestFit), axis=0) avgMeanFit = np.mean(np.vstack(avgMeanFit), axis=0) plt.figure(figsize=(14,10)) plt.clf() # plt.ylim(ymin=0) plt.plot(gen, avgBestFit, label="best fit") plt.plot(gen, avgMeanFit, label="avg fit") plt.xlabel("generation") plt.ylabel("fitness") plt.legend(loc='lower right') plt.grid() out_str = str(time.time()) + "_" + maze_file + "_bp" + \ str(useBackprop) + "_t" + str(timesteps) plt.savefig(out_str + "_graph.png", bbox_inches="tight", dpi=200) testmaze.drawMaze(maze_file, endpts, paths, outfile=out_str + "_vis") testmaze.drawMaze(maze_file, endpts, None, outfile=out_str + "_vis2")