def __init__(self, motorValues=range(-4, 4 + 1), sparsity=0.02, encoderResolution=0.5, bmParams=None): super(PositionBehaviorModel, self).__init__(motorValues=motorValues) self.encoderResolution = encoderResolution bmParams = bmParams or {} numMotorColumns = len(self.motorValues) bmParams["numMotorColumns"] = numMotorColumns self.bm = BehaviorMemory(**bmParams) self.sensorN = self.bm.numSensorColumns self.sensorW = int(self.sensorN * sparsity) + 1 self.sensorEncoder = CoordinateEncoder(w=self.sensorW, n=self.sensorN)
class PositionBehaviorModel(Model): def __init__(self, motorValues=range(-4, 4 + 1), sparsity=0.02, encoderResolution=0.5, bmParams=None): super(PositionBehaviorModel, self).__init__(motorValues=motorValues) self.encoderResolution = encoderResolution bmParams = bmParams or {} numMotorColumns = len(self.motorValues) bmParams["numMotorColumns"] = numMotorColumns self.bm = BehaviorMemory(**bmParams) self.sensorN = self.bm.numSensorColumns self.sensorW = int(self.sensorN * sparsity) + 1 self.sensorEncoder = CoordinateEncoder(w=self.sensorW, n=self.sensorN) def update(self, sensorValue, motorValue, goalValue=None): motorPattern = set([self.motorValues.index(motorValue)]) scale = 100 radius = int(self.encoderResolution * scale) sensorInput = (numpy.array([int(sensorValue * scale)]), radius) sensorPattern = set( self.sensorEncoder.encode(sensorInput).nonzero()[0]) goalPattern = set() if goalValue is not None: goalInput = (numpy.array([int(goalValue * scale)]), radius) goalPattern = set( self.sensorEncoder.encode(goalInput).nonzero()[0]) self.bm.compute(motorPattern, sensorPattern, goalPattern) if goalValue is not None: return self.decodeMotor() def decodeMotor(self): idx = self.bm.motor.argmax() return self.motorValues[idx]
class PositionBehaviorModel(Model): def __init__(self, motorValues=range(-4, 4+1), sparsity=0.02, encoderResolution=0.5, bmParams=None): super(PositionBehaviorModel, self).__init__(motorValues=motorValues) self.encoderResolution = encoderResolution bmParams = bmParams or {} numMotorColumns = len(self.motorValues) bmParams["numMotorColumns"] = numMotorColumns self.bm = BehaviorMemory(**bmParams) self.sensorN = self.bm.numSensorColumns self.sensorW = int(self.sensorN * sparsity) + 1 self.sensorEncoder = CoordinateEncoder(w=self.sensorW, n=self.sensorN) def update(self, sensorValue, motorValue, goalValue=None): motorPattern = set([self.motorValues.index(motorValue)]) scale = 100 radius = int(self.encoderResolution * scale) sensorInput = (numpy.array([int(sensorValue * scale)]), radius) sensorPattern = set(self.sensorEncoder.encode(sensorInput).nonzero()[0]) goalPattern = set() if goalValue is not None: goalInput = (numpy.array([int(goalValue * scale)]), radius) goalPattern = set(self.sensorEncoder.encode(goalInput).nonzero()[0]) self.bm.compute(motorPattern, sensorPattern, goalPattern) if goalValue is not None: return self.decodeMotor() def decodeMotor(self): idx = self.bm.motor.argmax() return self.motorValues[idx]
def __init__(self, motorValues=range(-4, 4+1), sparsity=0.02, encoderResolution=0.5, bmParams=None): super(PositionBehaviorModel, self).__init__(motorValues=motorValues) self.encoderResolution = encoderResolution bmParams = bmParams or {} numMotorColumns = len(self.motorValues) bmParams["numMotorColumns"] = numMotorColumns self.bm = BehaviorMemory(**bmParams) self.sensorN = self.bm.numSensorColumns self.sensorW = int(self.sensorN * sparsity) + 1 self.sensorEncoder = CoordinateEncoder(w=self.sensorW, n=self.sensorN)