Example #1
0
  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'])
Example #2
0
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")