public NeuralNetwork Mutate(NeuralNetwork nn1) { Double[,] arr1 = nn1.vij; Double[,] arr2 = nn1.wij; for (int i = 0; i < arr1.GetUpperBound(0) + 1; i++) { for (int j = 0; j < arr1.GetUpperBound(1) + 1; j++) { if (Rgen.NextDouble() > mutationChance) { arr1[i, j] = arr1[i, j] + Rgen.NextDouble() * mutationMag; } } } nn1.vij = arr1; for (int i = 0; i < arr2.GetUpperBound(0) + 1; i++) { for (int j = 0; j < arr2.GetUpperBound(1) + 1; j++) { if (Rgen.NextDouble() > mutationChance) { arr2[i, j] = arr2[i, j] + Rgen.NextDouble() * mutationMag; } } } nn1.wij = arr2; nn1.updateWeightsArrays(arr1, arr2); return(nn1); }
private void buscarPivoteIntercambiar(Double[,] matriz) { //obtenemos el tamaño de la matriz int tamMatriz = matriz.GetUpperBound(1); int pivote = 0; for (int i = 0; i < tamMatriz; i++) { //verificamos si elemento pivote ya contiene un 1 if (matriz[pivote, pivote] != 1) { for (int r = 0; r < tamMatriz; r++) { if (Convert.ToString(matriz[r, i]) == "1" && ((r + i) != (pivote + pivote))) { for (int j = 0; j < tamMatriz + 1; j++) { Double temp = matriz[pivote, j]; matriz[pivote, j] = matriz[r, j]; matriz[r, j] = temp; } buscarPivoteIntercambiar(matriz); } } } pivote++; } }
public NeuralNetwork crossGen(NeuralNetwork nn1, NeuralNetwork nn2) { Double[,] inArr = new Double[6, 10]; Double[,] inputarr1 = nn1.vij; Double[,] inputarr2 = nn2.vij; for (int i = 0; i < inputarr1.GetUpperBound(0) + 1; i++) { for (int j = 0; j < inputarr1.GetUpperBound(1) + 1; j++) { if (Rgen.NextDouble() > crossOverRate) { inArr[i, j] = inputarr1[i, j]; } else { inArr[i, j] = inputarr2[i, j]; } } } double[,] hidArr = new double[10, 3]; Double[,] hidArr1 = nn1.wij; Double[,] hidArr2 = nn2.wij; for (int i = 0; i < hidArr1.GetUpperBound(0) + 1; i++) { for (int j = 0; j < hidArr2.GetUpperBound(1) + 1; j++) { if (Rgen.NextDouble() > crossOverRate) { hidArr[i, j] = hidArr1[i, j]; } else { hidArr[i, j] = hidArr2[i, j]; } } } NeuralNetwork nn = new NeuralNetwork(); nn.vij = inArr; nn.wij = hidArr; nn.updateWeightsArrays(inArr, hidArr); return(nn); }
private void setearCoeficientes(Double[,] matriz) { int cantidadDeDecimales = Form_Inicio_Ingresa_Datos.cantidadDeDecimales; int tamMatriz = matriz.GetUpperBound(1); a = Math.Round(matriz[0, tamMatriz], cantidadDeDecimales); b = Math.Round(matriz[1, tamMatriz], cantidadDeDecimales); c = Math.Round(matriz[2, tamMatriz], cantidadDeDecimales); }
private void algoritmoGauss(Double[,] matriz) { int tamMatriz = matriz.GetUpperBound(1); int pivote = 0; for (int i = 0; i <= tamMatriz - 1; i++) { if (matriz[i, i] == 0) { //Deberia lanzar un error //rchTeOperaciones.Text += "Error: " + "no es posible resolver ecuacion"; } else { if (matriz[i, i] != 1) { Double divisorPiv = matriz[i, i]; for (int col = 0; col <= tamMatriz; col++) { matriz[i, col] = matriz[i, col] / divisorPiv; } } for (int ren = 0; ren < tamMatriz; ren++) { if (ren != pivote) { Double val0 = -Convert.ToDouble(matriz[ren, i]); for (int col = 0; col <= tamMatriz; col++) { matriz[ren, col] = matriz[i, col] * val0 + matriz[ren, col]; } } } } pivote++; } }