def setup(self): """ Create the network. """ self.sensorCount = self.robot.range.count self.net = Network() self.net.addThreeLayers(self.sensorCount, 16, 2) self.net.initialize() self.net.setVerbosity(0) self.net.setEpsilon(0.5) self.net.setMomentum(.1) self.net.setLearning(1) self.trans = 0 self.rotate = 0 self.counter = 0 self.maxvalue = self.robot.range.getMaxvalue() self.new = [self.scale(s.distance()) for s in self.robot.range["all"]] self.plot = Scatter(app=share.gui, linecount=2, connectPoints=0, xEnd=10.0, yEnd=1.0, legend=["Trained", "Test"], title="NN Generalization", width=400, xLabel="Distance to wall", yLabel="Speed") self.plot.addLine(0, .5, 10, .5, color="green") self.min = 0.0 self.robot.range._noise = [0.0] * self.robot.range.count
return self.INFTY for i in range(self.vectorSize): d += (v1[i] - v2[i])*(v1[i] - v2[i]) return sqrt(d) def __str__(self): result = "" for i in range(len(self.nodes)): result += str(self.nodes[i])+"\n" result += "Net Error: "+str(self.error) return result if __name__ == '__main__': from pyrobot.gui.plot.scatter import Scatter sp = Scatter(connectPoints = 0, linecount=3) length = 2 gng = GNG(length, .05) # make second number smaller to match better print(gng) print("\n------------------------------------------------\n") for i in range(100): #vector = [(1 + sin((i+n) * 2 * pi * 3.0/70.0))/2 for n in range(2)] vector = [random() for x in range(length)] sp.addPoint(vector[0], vector[1], line = 1) gng.newInput(vector) if (i%10 == 0): print(gng) print("\n------------------------------------------------\n") sp.clear(2) for node in gng.nodes: sp.addPoint(node.modelVector[0], node.modelVector[1],