//transponiranje matrice public Matrica Transpose() { Matrica ret = new Matrica(Columns, Rows); for (int i = 0; i < Rows; ++i) { for (int j = 0; j < Columns; ++j) { ret [j, i] = this [i, j]; } } return(ret); }
//konstruktor public ANN(int br_in, int br_hid, int br_hid2, int br_out) { brInput = br_in; brHidden = br_hid; brOutput = br_out; brHidden2 = br_hid2; //+1 za bias whi = new Matrica(brHidden, brInput + 1); //sa desna mnozi input da dobijemo hidden whh = new Matrica(brHidden2, brHidden + 1); //sa desna mnozi prvi hidden layer da dobijemo drugi hidden who = new Matrica(brOutput, brHidden2 + 1); //postavi tezine na random whi.Randomize(); whh.Randomize(); who.Randomize(); }
//crossover izmedu dvije matrice. nasumicno odaberi mjesto prije kojega idu elementi prve matrice //a poslije kojega idu elementi drgue public Matrica Crossover(Matrica partner) { Matrica child = new Matrica(Rows, Columns); int randR = Randoms.Next(Rows); //random redak int randC = Randoms.Next(Columns); //random stupac for (int i = 0; i < Rows; ++i) { for (int j = 0; j < Columns; ++j) { //pozicije prije (randR, randC) su this, poslije su partner child [i, j] = (i < randR || (i == randR && j < randC) ? this [i, j] : partner [i, j]); } } return(child); }
//dodaj bias na vektor stupac public Matrica AddBias() { Matrica ret = new Matrica(Rows + 1, 1); if (Columns == 1) { for (int i = 0; i < Rows; ++i) { ret [i, 0] = this [i, 0]; } ret [Rows, 0] = 1; } else { throw new Exception("AddBias: Matrica nema samo jedan stupac"); } return(ret); }
//oduzimanje matrica kroz operator public static Matrica operator -(Matrica A, Matrica B) { Matrica ret = new Matrica(A.Rows, A.Columns); if (A.Columns == B.Columns && A.Rows == B.Rows) { for (int i = 0; i < A.Rows; ++i) { for (int j = 0; j < A.Columns; ++j) { ret [i, j] = A [i, j] - B [i, j]; } } } else { throw new Exception("matrice nisu dobrih dimenzija"); } return(ret); }