def __init__(self, history_data=int(50000)):
        """
        Создаёт машинку
        :param history_data: количество хранимых нами данных о результатах предыдущих шагов
        """
        self.evaluate_mode = False  # этот агент учится или экзаменутеся? если учится, то False
        self._rays = 7  # выберите число лучей ладара; например, 5
        # here +2 is for 2 inputs from elements of Action that we are trying to predict
        self.neural_net = Network(
            [
                self.rays + 4,
                self.rays + 4,
                self.rays + 4,
                #self.rays + 4,
                # внутренние слои сети: выберите, сколько и в каком соотношении вам нужно
                # например, (self.rays + 4) * 2 или просто число
                1
            ],
            output_function=lambda x: x,
            output_derivative=lambda x: 1)
        self.sensor_data_history = deque([], maxlen=history_data)
        self.chosen_actions_history = deque([], maxlen=history_data)
        self.reward_history = deque([], maxlen=history_data)
        self.step = 0
        self.learning_rate = 0.04
        self.epoch_size = 30

        plt.ion()
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(111)
        #self.ax = self.fig.add_axes([0, 0, 1, 1], frameon=False)
        self.line1, = self.ax.plot([], [], 'b-')
        self.ax.set_xlim(0, 100)
        self.ax.set_ylim(-8, 8)
        self.rewards = []
Beispiel #2
0
    def from_weights(cls, layers, weights, biases):
        """
        Создание агента по параметрам его нейронной сети. Разбираться не обязательно.
        """
        agent = SimpleCarAgent()
        agent._rays = weights[0].shape[1] - 4
        nn = Network(layers,
                     output_function=lambda x: x,
                     output_derivative=lambda x: 1)

        if len(weights) != len(nn.weights):
            raise AssertionError(
                "You provided %d weight matrices instead of %d" %
                (len(weights), len(nn.weights)))
        for i, (w, right_w) in enumerate(zip(weights, nn.weights)):
            if w.shape != right_w.shape:
                raise AssertionError("weights[%d].shape = %s instead of %s" %
                                     (i, w.shape, right_w.shape))
        nn.weights = weights

        if len(biases) != len(nn.biases):
            raise AssertionError("You provided %d bias vectors instead of %d" %
                                 (len(weights), len(nn.weights)))
        for i, (b, right_b) in enumerate(zip(biases, nn.biases)):
            if b.shape != right_b.shape:
                raise AssertionError("biases[%d].shape = %s instead of %s" %
                                     (i, b.shape, right_b.shape))
        nn.biases = biases

        agent.neural_net = nn

        return agent
Beispiel #3
0
 def __init__(self, history_data=int(50000)):
     """
     Создаёт машинку
     :param history_data: количество хранимых нами данных о результатах предыдущих шагов
     """
     self.print_logs = True
     self.evaluate_mode = False  # этот агент учится или экзаменутеся? если учится, то False
     self._rays = 9  # выберите число лучей ладара; например, 5
     # here +2 is for 2 inputs from elements of Action that we are trying to predict
     # So it's |velocity| + angle + _rays + 2 vars from Action
     inputs = self.rays + 4
     self.neural_net = Network(
         sizes=[
             inputs,
             # внутренние слои сети: выберите, сколько и в каком соотношении вам нужно
             # например, (self.rays + 4) * 2 или просто число
             inputs,
             inputs,
             round(inputs / 2),
             1
         ],
         print_logs=self.print_logs
         # ,
         # output_function=lambda x: x,
         # output_derivative=lambda x: 1
     )
     self.sensor_data_history = deque([], maxlen=history_data)
     self.chosen_actions_history = deque([], maxlen=history_data)
     self.reward_history = deque([], maxlen=history_data)
     self.step = 0
     self.eta = 0.0053
     self.reg_coef = 0.00013
     self.epochs = 15
     self.reward_depth = 7
     self.train_every = 100
Beispiel #4
0
    def from_weights(cls, layers: List[int], weights, biases):
        """
        Creates agent by neural network params.
        """
        agent = SimpleCarAgent()
        agent._rays = weights[0].shape[1] - NUM_DEFAULT_INPUT_NEURONS
        nn = Network(layers,
                     output_function=lambda x: x,
                     output_derivative=lambda x: 1)

        if len(weights) != len(nn.weights):
            raise AssertionError(
                "You provided %d weight matrices instead of %d" %
                (len(weights), len(nn.weights)))
        for i, (w, right_w) in enumerate(zip(weights, nn.weights)):
            if w.shape != right_w.shape:
                raise AssertionError("weights[%d].shape = %s instead of %s" %
                                     (i, w.shape, right_w.shape))
        nn.weights = weights

        if len(biases) != len(nn.biases):
            raise AssertionError("You provided %d bias vectors instead of %d" %
                                 (len(weights), len(nn.weights)))
        for i, (b, right_b) in enumerate(zip(biases, nn.biases)):
            if b.shape != right_b.shape:
                raise AssertionError("biases[%d].shape = %s instead of %s" %
                                     (i, b.shape, right_b.shape))
        nn.biases = biases

        agent.neural_net = nn

        return agent
Beispiel #5
0
    def __init__(self, history_data: int = 50000):
        """
        Creates Car Agent
            :param history_data: num of stored records (results of previous steps)
        """
        self.evaluate_mode = False  # # (True) if we evaluate model, otherwise - training mode (False)
        self._rays = RAYS_COUNT  # radar beams count

        self.neural_net = Network(NETWORK,
                                  output_function=lambda x: x,
                                  output_derivative=lambda x: 1)
        self.sensor_data_history = deque([], maxlen=history_data)
        self.chosen_actions_history = deque([], maxlen=history_data)
        self.reward_history = deque([], maxlen=history_data)
        self.step = 0
 def __init__(self, history_data=int(50000)):
     """
     Создаёт машинку
     :param history_data: количество хранимых нами данных о результатах предыдущих шагов
     """
     self.evaluate_mode = False  # этот агент учится или экзаменутеся? если учится, то False
     self._rays =  # выберите число лучей ладара; например, 5
     # here +2 is for 2 inputs from elements of Action that we are trying to predict
     self.neural_net = Network([self.rays + 4,
                                # внутренние слои сети: выберите, сколько и в каком соотношении вам нужно
                                # например, (self.rays + 4) * 2 или просто число
                                1],
                               output_function=lambda x: x, output_derivative=lambda x: 1)
     self.sensor_data_history = deque([], maxlen=history_data)
     self.chosen_actions_history = deque([], maxlen=history_data)
     self.reward_history = deque([], maxlen=history_data)
     self.step = 0
    def __init__(self,
                 rays=5,
                 hiddenLayers=None,
                 history_data=int(1000),
                 neural_net=None):
        """
        Создаёт машинку
        :param history_data: количество хранимых нами данных о результатах предыдущих шагов
        """

        self.evaluate_mode = False  # этот агент учится или экзаменутеся? если учится, то False
        self._rays = rays  # выберите число лучей ладара; например, 5

        self.sensor_data_history = deque([], maxlen=history_data)
        self.chosen_actions_history = deque([], maxlen=history_data)
        self.reward_history = deque([], maxlen=history_data)
        self.step = 0

        if neural_net != None:
            self.neural_net = neural_net
            return

        if hiddenLayers == None:
            hiddenLayers = [self.rays + 6, self.rays + 4]

        # here +4 is for 2 inputs from elements of Action that we are trying to predict and 2 for velocity and angle
        hiddenLayers.insert(0, self.rays + 4)
        hiddenLayers.insert(1, self.rays + 4)  # normalayse level
        # add 1 because only one exit neuron we need
        hiddenLayers.append(1)

        self.neural_net = Network(hiddenLayers,
                                  output_function=lambda x: x,
                                  output_derivative=lambda x: 1)
        self.neural_net.weights[0] = np.eye(
            self.rays + 4) * 2 / 25  # Нормализация для длины луча
        self.neural_net.weights[0][0,
                                   0] = 2 / 10  # # Нормализация для скорости
        self.neural_net.weights[0][
            1, 1] = 2  # # Нормализация для синуса угла к лучу из центра
        self.neural_net.weights[0][-2,
                                   -2] = 2  # # Нормализация для поворота руля
        self.neural_net.weights[0][
            -1, -1] = 2 / 0.75  # # Нормализация для ускорения
        self.neural_net.biases[0] = np.zeros_like(self.neural_net.biases[0])
Beispiel #8
0
    def __init__(self, n_rays):
        self.evaluate_mode = False
        # here +2 is for 2 inputs from elements of Action that we are trying to predict
        self.neural_net = Network(
            [
                n_rays + 4,
                # внутренние слои сети: выберите, сколько и в каком соотношении вам нужно
                # например, (self.rays + 4) * 2 или просто число
                n_rays + 4,
                (n_rays + 4) // 2,
                1
            ],
            output_function=lambda x: x,
            output_derivative=lambda x: 1)
        self.ALPHA = 0.1
        self.GAMMA = 0.8

        self.reset_history()