Exemple #1
0
    def rotate_geometry(self, angle):
        #  rotation_matrix = Matrix(2, 2)
        a = math.radians(angle)
        rotation_matrix = Matrix(2, 2)
        # rotasyon matrisi hazırlanır
        rotation_matrix.values[0][0] = math.cos(a)
        rotation_matrix.values[0][1] = -math.sin(a)
        rotation_matrix.values[1][0] = math.sin(a)
        rotation_matrix.values[1][1] = math.cos(a)

        for i in range(len(self.geometry)):
            # ağırlık merkezi
            cx = self.loc[0]
            cy = self.loc[1]
            input = Matrix(2, 1)

            x = self.geometry[i][0] - cx
            y = self.geometry[i][1] - cy

            input.values[0][0] = x
            input.values[1][0] = y

            output = Matrix.matrix_product(rotation_matrix, input)

            newX = output.values[0][0] + cx
            newY = output.values[1][0] + cy

            self.geometry[i] = newX, newY
def load_matrix(matrix):
    r = matrix['rows']
    c = matrix['columns']
    values = matrix['values']
    m = Matrix(r, c)
    m.values = values
    return m
Exemple #3
0
def get_input_for_bird(bird):
    input = Matrix(5, 1)
    # input =
    # [ closestColumn.upRect.x / screenW ]
    # [ closestColumn.lowerLimitOfUpRect / screenH ]
    # [ closestColumn.downRect.y / screenH ]
    # [ bird.rect.y / screenH ]
    # [ bird.velocity.y ]
    input.values[0][0] = closestColumn.upRect.x / screenW
    input.values[1][0] = closestColumn.lowerLimitOfUpRect / screenH
    input.values[2][0] = closestColumn.downRect.x / screenH
    input.values[3][0] = bird.rect.y / screenH
    input.values[4][0] = bird.velocityY / bird.maxSpeed
    return input
Exemple #4
0
    def think(self, boundaries):
        input = Matrix(9, 1)
        lidarData = self.get_lidar_data(boundaries)
        # input =
        # [ lidar 1                      ]
        # [ lidar 2                      ]
        # [ lidar 3                      ]
        #   ...
        # [ lidar 8                      ]
        # [ self.velocity / max velocity ]
        for i in range(len(lidarData)):
            input.values[i][0] = lidarData[i]

        input.values[8][0] = self.velocity / Car.maxSpeed

        output = self.brain.feedforward(input)
        return output
Exemple #5
0
    def __init__(self, inputNeuronC, outputNeuronC, hiddenNeuronPerLayerC,
                 hiddenLayerC):
        self.weights = []
        self.biases = []

        # sgd + momentum optimizasyonu için
        # ağırlık ve sapmaların değişim hızlarını kayıt ediyoruz
        # burdaki matrislerin boyutları karşılık gelen ağırlık-sapmalarıyla aynı olacak
        self.Vweight = []
        self.Vbias = []

        # gradient decent metotdu ile eğitirken her katmanın girdi(input)
        # ve çıktıları(output) lazım olacak bu yüzden bunları kayıt altına
        # alıp güncellemek için özel listeler hazırlıyoruz
        self.inputsForTrain = []
        self.outputsForTrain = []

        # ağırlık ve sapmalar verilen kurala görre ayarlanır:
        # weight = Matrix(next_layer_neuronC, previus_layer_neuronC)
        # bias = Matrix(next_layer_neuronC, 1)

        # input - hidden
        self.weights.append(Matrix(hiddenNeuronPerLayerC, inputNeuronC))
        self.biases.append(Matrix(hiddenNeuronPerLayerC, 1))

        self.Vweight.append(Matrix(hiddenNeuronPerLayerC, inputNeuronC))
        self.Vbias.append(Matrix(hiddenNeuronPerLayerC, 1))

        # hidden - hidden
        for i in range(hiddenLayerC - 1):
            # kaç saklı katman varsa onun 1 eksiği kadar aralarında ağırlık ve sapma vardır
            self.weights.append(
                Matrix(hiddenNeuronPerLayerC, hiddenNeuronPerLayerC))
            self.biases.append(Matrix(hiddenNeuronPerLayerC, 1))

            self.Vweight.append(
                Matrix(hiddenNeuronPerLayerC, hiddenNeuronPerLayerC))
            self.Vbias.append(Matrix(hiddenNeuronPerLayerC, 1))

        # hidden  - output
        self.weights.append(Matrix(outputNeuronC, hiddenNeuronPerLayerC))
        self.biases.append(Matrix(outputNeuronC, 1))

        self.Vweight.append(Matrix(outputNeuronC, hiddenNeuronPerLayerC))
        self.Vbias.append(Matrix(outputNeuronC, 1))

        for i in range(hiddenLayerC + 1):
            # nöron ağdaki bütün katman sayısı kadar "inputsForTrain" ve "outputsForTrain"
            # değişkenlerine null mabında 0 değerini veriyoruz

            # not:
            # zaten feedforward sürecinde bu değişkenler değişeceği için 0 olması hataya sebep olmayacak
            # lakin indislerle işlem yapabilmek adına listede hazırda eleman olması gerekir
            self.inputsForTrain.append(0)
            self.outputsForTrain.append(0)

        self.randomize_weight_and_biases()
    def __init__(self, inputNeuronC=1, outputNeuronC=1, hiddenNeuronPerLayerC=0, hiddenLayerC=0):

        # BU ALAN DENEYSELDİR DEĞİŞEBİLİR

        # hiç parametre verilmemiş ise hiç birşey yapmiyacak
        # amacı ise json verisinden yüklenmek istenirse boşuna başlangıç
        # verileri oluşturulmasın
        if inputNeuronC + outputNeuronC + hiddenNeuronPerLayerC + hiddenLayerC == 2:
            self.inputsForTrain = []
            self.outputsForTrain = []
            return

        # parametre oygunluğu kontrol edilir
        if inputNeuronC < 1 or outputNeuronC < 1 or hiddenNeuronPerLayerC < 0 or hiddenLayerC < 0:
            raise Exception('çıktı ve girdi nöronları 1, diğeri 0 dan küçük olamaz')

        # BU ALAN DENEYSELDİR DEĞİŞEBİLİR

        # kontrol sonrası oluşturma işlemleri başlatılır

        self.weights = []
        self.biases = []

        # sgd + momentum optimizasyonu için
        # ağırlık ve sapmaların değişim hızlarını kayıt ediyoruz
        # burdaki matrislerin boyutları karşılık gelen ağırlık-sapmalarıyla aynı olacak
        self.Vweight = []
        self.Vbias = []

        # gradient decent metotdu ile eğitirken her katmanın girdi(input)
        # ve çıktıları(output) lazım olacak bu yüzden bunları kayıt altına
        # alıp güncellemek için özel listeler hazırlıyoruz
        self.inputsForTrain = []
        self.outputsForTrain = []

        # ağırlık ve sapmalar verilen kurala görre ayarlanır:
        # weight = Matrix(next_layer_neuronC, previus_layer_neuronC)
        # bias = Matrix(next_layer_neuronC, 1)

        # input - hidden
        self.weights.append(Matrix(hiddenNeuronPerLayerC, inputNeuronC))
        self.biases.append(Matrix(hiddenNeuronPerLayerC, 1))

        self.Vweight.append(Matrix(hiddenNeuronPerLayerC, inputNeuronC))
        self.Vbias.append(Matrix(hiddenNeuronPerLayerC, 1))

        # hidden - hidden
        for i in range(hiddenLayerC - 1):
            # kaç saklı katman varsa onun 1 eksiği kadar aralarında ağırlık ve sapma vardır
            self.weights.append(Matrix(hiddenNeuronPerLayerC, hiddenNeuronPerLayerC))
            self.biases.append(Matrix(hiddenNeuronPerLayerC, 1))

            self.Vweight.append(Matrix(hiddenNeuronPerLayerC, hiddenNeuronPerLayerC))
            self.Vbias.append(Matrix(hiddenNeuronPerLayerC, 1))

        # hidden  - output
        self.weights.append(Matrix(outputNeuronC, hiddenNeuronPerLayerC))
        self.biases.append(Matrix(outputNeuronC, 1))

        self.Vweight.append(Matrix(outputNeuronC, hiddenNeuronPerLayerC))
        self.Vbias.append(Matrix(outputNeuronC, 1))

        for i in range(hiddenLayerC + 1):
            # nöron ağdaki bütün katman sayısı kadar "inputsForTrain" ve "outputsForTrain"
            # değişkenlerine null mabında 0 değerini veriyoruz

            # not:
            # zaten feedforward sürecinde bu değişkenler değişeceği için 0 olması hataya sebep olmayacak
            # lakin indislerle işlem yapabilmek adına listede hazırda eleman olması gerekir
            self.inputsForTrain.append(0)
            self.outputsForTrain.append(0)

        self.randomize_weight_and_biases()