def performAction(self, action):
        #Filtered mapping towards performAction of the underlying environment
        #The standard CCRL task uses a PID controller to controll directly angles instead of forces
        #This makes most tasks much simpler to learn
        self.oldAction = action
        #Grasping as reflex depending on the distance to target - comment in for more easy grasping
        if abs(abs(self.dist[:3]).sum())<2.0: action[15]=1.0 #self.grepRew=action[15]*.01
        else: action[15]=-1.0 #self.grepRew=action[15]*-.03
        isJoints=array(self.env.getSensorByName('JointSensor')) #The joint angles
        isSpeeds=array(self.env.getSensorByName('JointVelocitySensor')) #The joint angular velocitys
        act=(action+1.0)/2.0*(self.env.cHighList-self.env.cLowList)+self.env.cLowList #norm output to action intervall
        action=tanh((isJoints-0.9*isSpeeds*self.env.tourqueList-act)*16.0)*self.maxPower*self.env.tourqueList #simple PID
        EpisodicTask.performAction(self, action)
        #self.env.performAction(action)
dataset/ETHPy150Open pybrain/pybrain/pybrain/rl/environments/ode/tasks/ccrl.py/CCRLTask.performAction/swapped operands of `-`