Пример #1
0
    def __init__(self, host = 'localhost', port = 1024):
        """
        Initializes the match
        """
        self.__match = Match()
        self.__match.start(host, port)

        print('Field dimensions:', self.__match.world_width, 'x', self.__match.world_height)
        print('Robot radius:', self.__match.robot_radius)
        
        self.__variable = {
            'ball_angle': Variable({'rear_right': B_RRIGHT, 'right': B_RIGHT, 'front': B_FRONT, 'left': B_LEFT, 'rear_left': B_RLEFT}, name = 'ball_angle'),
            'target_angle': Variable({'right': T_RIGHT, 'front': T_FRONT, 'left': T_LEFT}, name = 'target_angle'),
            'ball_distance': Variable({'close': CLOSE, 'near': NEAR, 'far': FAR}, 'ball_distance'),
            
            'left_wheel': Variable({'negative_strong': NST, 'negative': NEG, 'zero': ZER, 'positive': POS, 'positive_strong': PST}, 'left_wheel'),
            'right_wheel': Variable({'negative_strong': NST, 'negative': NEG, 'zero': ZER, 'positive': POS, 'positive_strong': PST}, 'right_wheel'),

            'spin': Variable({'negative': CLOCKWISE, 'zero': SPIN_ZERO, 'positive': ANTICLOCKWISE}, 'spin')
            }
        
        left_wheel_rule_maker = RuleGenerator([
            self.__variable['ball_angle'],
            self.__variable['target_angle'],
            self.__variable['spin']
            ], self.__variable['left_wheel'])

        right_wheel_rule_maker = RuleGenerator([
            self.__variable['ball_angle'],
            self.__variable['target_angle'],
            self.__variable['spin']
            ], self.__variable['right_wheel'])
        
        left_wheel_rules = [
            left_wheel_rule_maker.make(['rear_right', 'right', 'negative'], 'negative'), #-9 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'right', 'zero'], 'zero'), #-8 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'right', 'positive'], 'positive'), #-7 -> positive, negative
            
            left_wheel_rule_maker.make(['rear_right', 'front', 'negative'], 'negative'), #-6 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'front', 'zero'], 'zero'), #-5 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'front', 'positive'], 'zero'),
            
            left_wheel_rule_maker.make(['rear_right', 'left', 'negative'], 'negative'), #-3 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'left', 'zero'], 'zero'), #-2 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'left', 'positive'], 'positive'), #-1 -> positive, negative

            ###
            left_wheel_rule_maker.make(['right', 'right', 'negative'], 'positive'), #1 -> positive, zero
            left_wheel_rule_maker.make(['right', 'right', 'zero'], 'positive_strong'), #2 -> positive_strong, zero
            left_wheel_rule_maker.make(['right', 'right', 'positive'], 'positive_strong'), #3 -> positive_strong, negative
            
            left_wheel_rule_maker.make(['right', 'front', 'negative'], 'zero'), #4 -> zero, negative
            left_wheel_rule_maker.make(['right', 'front', 'zero'], 'negative'), #5 -> negative, negative_strong
            left_wheel_rule_maker.make(['right', 'front', 'positive'], 'zero'), #6 -> zero, negative_strong
            
            left_wheel_rule_maker.make(['right', 'left', 'negative'], 'positive'), #7 -> positive, zero
            left_wheel_rule_maker.make(['right', 'left', 'zero'], 'positive_strong'), #8 -> positive_strong, positive
            left_wheel_rule_maker.make(['right', 'left', 'positive'], 'positive_strong'), #9 -> positive_strong, negative

            ###
            left_wheel_rule_maker.make(['front', 'right', 'negative'], 'negative'), #10 -> negative, positive_strong
            left_wheel_rule_maker.make(['front', 'right', 'zero'], 'zero'), #11 -> zero, positive
            left_wheel_rule_maker.make(['front', 'right', 'positive'], 'zero'), #12 -> zero, positive
            
            left_wheel_rule_maker.make(['front', 'front', 'negative'], 'zero'), #13 -> zero, positive_strong
            left_wheel_rule_maker.make(['front', 'front', 'zero'], 'positive'), #14 -> positive, positive
            left_wheel_rule_maker.make(['front', 'front', 'positive'], 'positive_strong'), #15 -> positive_strong, zero
            
            left_wheel_rule_maker.make(['front', 'left', 'negative'], 'positive'), #16 -> positive, zero
            left_wheel_rule_maker.make(['front', 'left', 'zero'], 'positive'), #17 -> positive, zero
            left_wheel_rule_maker.make(['front', 'left', 'positive'], 'positive_strong'), #18 -> positive_strong, negative

            ###
            left_wheel_rule_maker.make(['left', 'right', 'negative'], 'zero'), #19 -> zero, positive_strong
            left_wheel_rule_maker.make(['left', 'right', 'zero'], 'positive'), #20 -> positive, positive_strong
            left_wheel_rule_maker.make(['left', 'right', 'positive'], 'zero'), #21 -> zero, positive
            
            left_wheel_rule_maker.make(['left', 'front', 'negative'], 'zero'),
            left_wheel_rule_maker.make(['left', 'front', 'zero'], 'negative_strong'), #23 -> negative_strong, negative
            left_wheel_rule_maker.make(['left', 'front', 'positive'], 'negative_strong'), #24 -> negative_strong, negative
            
            left_wheel_rule_maker.make(['left', 'left', 'negative'], 'negative'), #25 -> negative, positive_strong
            left_wheel_rule_maker.make(['left', 'left', 'zero'], 'zero'), #26 -> zero, positive_strong
            left_wheel_rule_maker.make(['left', 'left', 'positive'], 'zero'), #27 -> zero, positive

            ###
            left_wheel_rule_maker.make(['rear_left', 'right', 'negative'], 'negative'), #28 -> negative, positive
            left_wheel_rule_maker.make(['rear_left', 'right', 'zero'], 'negative'), #29 -> negative, zero
            left_wheel_rule_maker.make(['rear_left', 'right', 'positive'], 'zero'), #30 -> zero, negative
            
            left_wheel_rule_maker.make(['rear_left', 'front', 'negative'], 'zero'),
            left_wheel_rule_maker.make(['rear_left', 'front', 'zero'], 'zero'),
            left_wheel_rule_maker.make(['rear_left', 'front', 'positive'], 'zero'),
            
            left_wheel_rule_maker.make(['rear_left', 'left', 'negative'], 'negative'), #34 -> negative, positive
            left_wheel_rule_maker.make(['rear_left', 'left', 'zero'], 'negative'), #35 -> negative, zero
            left_wheel_rule_maker.make(['rear_left', 'left', 'positive'], 'zero'), #36 -> zero, negative
            ]

        right_wheel_rules = [
            right_wheel_rule_maker.make(['rear_right', 'right', 'negative'], 'negative'), #-9 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'right', 'zero'], 'negative'), #-8 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'right', 'positive'], 'negative'), #-7 -> positive, negative
            
            right_wheel_rule_maker.make(['rear_right', 'front', 'negative'], 'zero'), #-6 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'front', 'zero'], 'negative'), #-5 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['rear_right', 'left', 'negative'], 'zero'), #-3 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'left', 'zero'], 'negative'), #-2 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'left', 'positive'], 'negative'), #-1 -> positive, negative

            ###
            right_wheel_rule_maker.make(['right', 'right', 'negative'], 'zero'), #1 -> positive, zero
            right_wheel_rule_maker.make(['right', 'right', 'zero'], 'zero'), #2 -> positive_strong, zero
            right_wheel_rule_maker.make(['right', 'right', 'positive'], 'negative'), #3 -> positive_strong, negative
            
            right_wheel_rule_maker.make(['right', 'front', 'negative'], 'negative'), #4 -> zero, negative
            right_wheel_rule_maker.make(['right', 'front', 'zero'], 'negative_strong'), #5 -> negative, negative_strong
            right_wheel_rule_maker.make(['right', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['right', 'left', 'negative'], 'zero'), #7 -> positive, zero
            right_wheel_rule_maker.make(['right', 'left', 'zero'], 'positive'), #8 -> positive_strong, positive
            right_wheel_rule_maker.make(['right', 'left', 'positive'], 'negative'), #9 -> positive_strong, negative

            ###
            right_wheel_rule_maker.make(['front', 'right', 'negative'], 'positive_strong'), #10 -> negative, positive_strong
            right_wheel_rule_maker.make(['front', 'right', 'zero'], 'positive'), #11 -> zero, positive
            right_wheel_rule_maker.make(['front', 'right', 'positive'], 'positive'), #12 -> zero, positive
            
            right_wheel_rule_maker.make(['front', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['front', 'front', 'zero'], 'positive'), #14 -> positive, positive
            right_wheel_rule_maker.make(['front', 'front', 'positive'], 'zero'), #15 -> positive_strong, zero
            
            right_wheel_rule_maker.make(['front', 'left', 'negative'], 'zero'), #16 -> positive, zero
            right_wheel_rule_maker.make(['front', 'left', 'zero'], 'zero'), #17 -> positive, zero
            right_wheel_rule_maker.make(['front', 'left', 'positive'], 'negative'), #18 -> positive_strong, negative

            ###
            right_wheel_rule_maker.make(['left', 'right', 'negative'], 'positive_strong'), #19 -> zero, positive_strong
            right_wheel_rule_maker.make(['left', 'right', 'zero'], 'positive_strong'), #20 -> positive, positive_strong
            right_wheel_rule_maker.make(['left', 'right', 'positive'], 'positive'), #21 -> zero, positive
            
            right_wheel_rule_maker.make(['left', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['left', 'front', 'zero'], 'negative'), #23 -> negative_strong, negative
            right_wheel_rule_maker.make(['left', 'front', 'positive'], 'negative'), #24 -> negative_strong, negative
            
            right_wheel_rule_maker.make(['left', 'left', 'negative'], 'positive_strong'), #25 -> negative, positive_strong
            right_wheel_rule_maker.make(['left', 'left', 'zero'], 'positive_strong'), #26 -> zero, positive_strong
            right_wheel_rule_maker.make(['left', 'left', 'positive'], 'positive'), #27 -> zero, positive

            ###
            right_wheel_rule_maker.make(['rear_left', 'right', 'negative'], 'positive'), #28 -> negative, positive
            right_wheel_rule_maker.make(['rear_left', 'right', 'zero'], 'zero'), #29 -> negative, zero
            right_wheel_rule_maker.make(['rear_left', 'right', 'positive'], 'negative'), #30 -> zero, negative
            
            right_wheel_rule_maker.make(['rear_left', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['rear_left', 'front', 'zero'], 'zero'),
            right_wheel_rule_maker.make(['rear_left', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['rear_left', 'left', 'negative'], 'positive'), #34 -> negative, positive
            right_wheel_rule_maker.make(['rear_left', 'left', 'zero'], 'zero'), #35 -> negative, zero
            right_wheel_rule_maker.make(['rear_left', 'left', 'positive'], 'negative'), #36 -> zero, negative
            ]
            
        self.__left_wheel_fis = FuzzySystem(left_wheel_rules, self.__variable['left_wheel'], 'left')
        self.__right_wheel_fis = FuzzySystem(right_wheel_rules, self.__variable['right_wheel'], 'right')
Пример #2
0
class Player:
    """
    Fuzzy controller for the Robot Soccer Simulator
    """
    def __init__(self, host = 'localhost', port = 1024):
        """
        Initializes the match
        """
        self.__match = Match()
        self.__match.start(host, port)

        print('Field dimensions:', self.__match.world_width, 'x', self.__match.world_height)
        print('Robot radius:', self.__match.robot_radius)
        
        self.__variable = {
            'ball_angle': Variable({'rear_right': B_RRIGHT, 'right': B_RIGHT, 'front': B_FRONT, 'left': B_LEFT, 'rear_left': B_RLEFT}, name = 'ball_angle'),
            'target_angle': Variable({'right': T_RIGHT, 'front': T_FRONT, 'left': T_LEFT}, name = 'target_angle'),
            'ball_distance': Variable({'close': CLOSE, 'near': NEAR, 'far': FAR}, 'ball_distance'),
            
            'left_wheel': Variable({'negative_strong': NST, 'negative': NEG, 'zero': ZER, 'positive': POS, 'positive_strong': PST}, 'left_wheel'),
            'right_wheel': Variable({'negative_strong': NST, 'negative': NEG, 'zero': ZER, 'positive': POS, 'positive_strong': PST}, 'right_wheel'),

            'spin': Variable({'negative': CLOCKWISE, 'zero': SPIN_ZERO, 'positive': ANTICLOCKWISE}, 'spin')
            }
        
        left_wheel_rule_maker = RuleGenerator([
            self.__variable['ball_angle'],
            self.__variable['target_angle'],
            self.__variable['spin']
            ], self.__variable['left_wheel'])

        right_wheel_rule_maker = RuleGenerator([
            self.__variable['ball_angle'],
            self.__variable['target_angle'],
            self.__variable['spin']
            ], self.__variable['right_wheel'])
        
        left_wheel_rules = [
            left_wheel_rule_maker.make(['rear_right', 'right', 'negative'], 'negative'), #-9 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'right', 'zero'], 'zero'), #-8 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'right', 'positive'], 'positive'), #-7 -> positive, negative
            
            left_wheel_rule_maker.make(['rear_right', 'front', 'negative'], 'negative'), #-6 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'front', 'zero'], 'zero'), #-5 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'front', 'positive'], 'zero'),
            
            left_wheel_rule_maker.make(['rear_right', 'left', 'negative'], 'negative'), #-3 -> negative, zero
            left_wheel_rule_maker.make(['rear_right', 'left', 'zero'], 'zero'), #-2 -> zero, negative
            left_wheel_rule_maker.make(['rear_right', 'left', 'positive'], 'positive'), #-1 -> positive, negative

            ###
            left_wheel_rule_maker.make(['right', 'right', 'negative'], 'positive'), #1 -> positive, zero
            left_wheel_rule_maker.make(['right', 'right', 'zero'], 'positive_strong'), #2 -> positive_strong, zero
            left_wheel_rule_maker.make(['right', 'right', 'positive'], 'positive_strong'), #3 -> positive_strong, negative
            
            left_wheel_rule_maker.make(['right', 'front', 'negative'], 'zero'), #4 -> zero, negative
            left_wheel_rule_maker.make(['right', 'front', 'zero'], 'negative'), #5 -> negative, negative_strong
            left_wheel_rule_maker.make(['right', 'front', 'positive'], 'zero'), #6 -> zero, negative_strong
            
            left_wheel_rule_maker.make(['right', 'left', 'negative'], 'positive'), #7 -> positive, zero
            left_wheel_rule_maker.make(['right', 'left', 'zero'], 'positive_strong'), #8 -> positive_strong, positive
            left_wheel_rule_maker.make(['right', 'left', 'positive'], 'positive_strong'), #9 -> positive_strong, negative

            ###
            left_wheel_rule_maker.make(['front', 'right', 'negative'], 'negative'), #10 -> negative, positive_strong
            left_wheel_rule_maker.make(['front', 'right', 'zero'], 'zero'), #11 -> zero, positive
            left_wheel_rule_maker.make(['front', 'right', 'positive'], 'zero'), #12 -> zero, positive
            
            left_wheel_rule_maker.make(['front', 'front', 'negative'], 'zero'), #13 -> zero, positive_strong
            left_wheel_rule_maker.make(['front', 'front', 'zero'], 'positive'), #14 -> positive, positive
            left_wheel_rule_maker.make(['front', 'front', 'positive'], 'positive_strong'), #15 -> positive_strong, zero
            
            left_wheel_rule_maker.make(['front', 'left', 'negative'], 'positive'), #16 -> positive, zero
            left_wheel_rule_maker.make(['front', 'left', 'zero'], 'positive'), #17 -> positive, zero
            left_wheel_rule_maker.make(['front', 'left', 'positive'], 'positive_strong'), #18 -> positive_strong, negative

            ###
            left_wheel_rule_maker.make(['left', 'right', 'negative'], 'zero'), #19 -> zero, positive_strong
            left_wheel_rule_maker.make(['left', 'right', 'zero'], 'positive'), #20 -> positive, positive_strong
            left_wheel_rule_maker.make(['left', 'right', 'positive'], 'zero'), #21 -> zero, positive
            
            left_wheel_rule_maker.make(['left', 'front', 'negative'], 'zero'),
            left_wheel_rule_maker.make(['left', 'front', 'zero'], 'negative_strong'), #23 -> negative_strong, negative
            left_wheel_rule_maker.make(['left', 'front', 'positive'], 'negative_strong'), #24 -> negative_strong, negative
            
            left_wheel_rule_maker.make(['left', 'left', 'negative'], 'negative'), #25 -> negative, positive_strong
            left_wheel_rule_maker.make(['left', 'left', 'zero'], 'zero'), #26 -> zero, positive_strong
            left_wheel_rule_maker.make(['left', 'left', 'positive'], 'zero'), #27 -> zero, positive

            ###
            left_wheel_rule_maker.make(['rear_left', 'right', 'negative'], 'negative'), #28 -> negative, positive
            left_wheel_rule_maker.make(['rear_left', 'right', 'zero'], 'negative'), #29 -> negative, zero
            left_wheel_rule_maker.make(['rear_left', 'right', 'positive'], 'zero'), #30 -> zero, negative
            
            left_wheel_rule_maker.make(['rear_left', 'front', 'negative'], 'zero'),
            left_wheel_rule_maker.make(['rear_left', 'front', 'zero'], 'zero'),
            left_wheel_rule_maker.make(['rear_left', 'front', 'positive'], 'zero'),
            
            left_wheel_rule_maker.make(['rear_left', 'left', 'negative'], 'negative'), #34 -> negative, positive
            left_wheel_rule_maker.make(['rear_left', 'left', 'zero'], 'negative'), #35 -> negative, zero
            left_wheel_rule_maker.make(['rear_left', 'left', 'positive'], 'zero'), #36 -> zero, negative
            ]

        right_wheel_rules = [
            right_wheel_rule_maker.make(['rear_right', 'right', 'negative'], 'negative'), #-9 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'right', 'zero'], 'negative'), #-8 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'right', 'positive'], 'negative'), #-7 -> positive, negative
            
            right_wheel_rule_maker.make(['rear_right', 'front', 'negative'], 'zero'), #-6 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'front', 'zero'], 'negative'), #-5 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['rear_right', 'left', 'negative'], 'zero'), #-3 -> negative, zero
            right_wheel_rule_maker.make(['rear_right', 'left', 'zero'], 'negative'), #-2 -> zero, negative
            right_wheel_rule_maker.make(['rear_right', 'left', 'positive'], 'negative'), #-1 -> positive, negative

            ###
            right_wheel_rule_maker.make(['right', 'right', 'negative'], 'zero'), #1 -> positive, zero
            right_wheel_rule_maker.make(['right', 'right', 'zero'], 'zero'), #2 -> positive_strong, zero
            right_wheel_rule_maker.make(['right', 'right', 'positive'], 'negative'), #3 -> positive_strong, negative
            
            right_wheel_rule_maker.make(['right', 'front', 'negative'], 'negative'), #4 -> zero, negative
            right_wheel_rule_maker.make(['right', 'front', 'zero'], 'negative_strong'), #5 -> negative, negative_strong
            right_wheel_rule_maker.make(['right', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['right', 'left', 'negative'], 'zero'), #7 -> positive, zero
            right_wheel_rule_maker.make(['right', 'left', 'zero'], 'positive'), #8 -> positive_strong, positive
            right_wheel_rule_maker.make(['right', 'left', 'positive'], 'negative'), #9 -> positive_strong, negative

            ###
            right_wheel_rule_maker.make(['front', 'right', 'negative'], 'positive_strong'), #10 -> negative, positive_strong
            right_wheel_rule_maker.make(['front', 'right', 'zero'], 'positive'), #11 -> zero, positive
            right_wheel_rule_maker.make(['front', 'right', 'positive'], 'positive'), #12 -> zero, positive
            
            right_wheel_rule_maker.make(['front', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['front', 'front', 'zero'], 'positive'), #14 -> positive, positive
            right_wheel_rule_maker.make(['front', 'front', 'positive'], 'zero'), #15 -> positive_strong, zero
            
            right_wheel_rule_maker.make(['front', 'left', 'negative'], 'zero'), #16 -> positive, zero
            right_wheel_rule_maker.make(['front', 'left', 'zero'], 'zero'), #17 -> positive, zero
            right_wheel_rule_maker.make(['front', 'left', 'positive'], 'negative'), #18 -> positive_strong, negative

            ###
            right_wheel_rule_maker.make(['left', 'right', 'negative'], 'positive_strong'), #19 -> zero, positive_strong
            right_wheel_rule_maker.make(['left', 'right', 'zero'], 'positive_strong'), #20 -> positive, positive_strong
            right_wheel_rule_maker.make(['left', 'right', 'positive'], 'positive'), #21 -> zero, positive
            
            right_wheel_rule_maker.make(['left', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['left', 'front', 'zero'], 'negative'), #23 -> negative_strong, negative
            right_wheel_rule_maker.make(['left', 'front', 'positive'], 'negative'), #24 -> negative_strong, negative
            
            right_wheel_rule_maker.make(['left', 'left', 'negative'], 'positive_strong'), #25 -> negative, positive_strong
            right_wheel_rule_maker.make(['left', 'left', 'zero'], 'positive_strong'), #26 -> zero, positive_strong
            right_wheel_rule_maker.make(['left', 'left', 'positive'], 'positive'), #27 -> zero, positive

            ###
            right_wheel_rule_maker.make(['rear_left', 'right', 'negative'], 'positive'), #28 -> negative, positive
            right_wheel_rule_maker.make(['rear_left', 'right', 'zero'], 'zero'), #29 -> negative, zero
            right_wheel_rule_maker.make(['rear_left', 'right', 'positive'], 'negative'), #30 -> zero, negative
            
            right_wheel_rule_maker.make(['rear_left', 'front', 'negative'], 'zero'),
            right_wheel_rule_maker.make(['rear_left', 'front', 'zero'], 'zero'),
            right_wheel_rule_maker.make(['rear_left', 'front', 'positive'], 'zero'),
            
            right_wheel_rule_maker.make(['rear_left', 'left', 'negative'], 'positive'), #34 -> negative, positive
            right_wheel_rule_maker.make(['rear_left', 'left', 'zero'], 'zero'), #35 -> negative, zero
            right_wheel_rule_maker.make(['rear_left', 'left', 'positive'], 'negative'), #36 -> zero, negative
            ]
            
        self.__left_wheel_fis = FuzzySystem(left_wheel_rules, self.__variable['left_wheel'], 'left')
        self.__right_wheel_fis = FuzzySystem(right_wheel_rules, self.__variable['right_wheel'], 'right')
		
    def play(self):
        """
        Play using fuzzy controller
        """
        fuzzy_left = self.__left_wheel_fis
        fuzzy_right = self.__right_wheel_fis
        
        variable = self.__variable
        match = self.__match
        while(True):
            # Gets updated environment values
            variable['ball_angle'].value = match.get_ball_angle()
            variable['target_angle'].value = match.get_target_angle()
            variable['ball_distance'].value = match.get_ball_distance()
            variable['spin'].value = match.get_spin()

            # Updates fuzzy outputs
            fuzzy_left.update()
            fuzzy_right.update()

            # Calculate final forces for each wheel
            left_wheel = variable['left_wheel'].value
            right_wheel = variable['right_wheel'].value

            # Debug information
            if(DEBUG and abs(variable['left_wheel'].partition('zero').membership() - 1) < 1e-5 and abs(variable['right_wheel'].partition('zero').membership() - 1) < 1e-5):
                print('INPUTS:', '-----', sep = '\n')
                print(variable['ball_angle'])
                print(variable['target_angle'])
                print(variable['ball_distance'])
                print(variable['spin'])
                
                print('\nOUTPUTS:', '-----', sep = '\n')
                print(variable['left_wheel'])
                print(variable['right_wheel'])
                
                print('output:', left_wheel, right_wheel)
                print('-'*30)
                input('')

            # Act
            match.act(left_wheel, right_wheel)