Esempio n. 1
0
        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++;
            }
        }
Esempio n. 3
0
        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++;
            }
        }