Example #1
0
        public double ZmierzOdleglosc(Probka p)
        {
            double x = 0;

            for (int i = 0; i < p.pozycja.Length; i++)
            {
                x += Math.Pow((p.pozycja[i] - Pozycja[i]), 2);
            }
            Odleglosc = Math.Sqrt(x);

            return(Odleglosc);
        }
Example #2
0
 public void Przesun(Probka p)
 {
     for (int i = 0; i < p.pozycja.Length; i++)
     {
         if ((Pozycja[i] - p.pozycja[i] > 0))
         {
             Pozycja[i] -= Przesuniecie;
         }
         else if ((Pozycja[i] - p.pozycja[i] < 0))
         {
             Pozycja[i] += Przesuniecie;
         }
     }
 }
Example #3
0
        static void Main(string[] args)
        {
            //string filePath = @"D:\tekst.txt";
            Console.WriteLine("Wpisz nazwę pliku z danymi (np: tekst.txt)");
            string fileName = Console.ReadLine();
            string filePath = $@"D:\{fileName}";

            Console.WriteLine("Wpisz znak, którym oddzielasz dane w pliku (np: ';')");
            string fileSeparator = Console.ReadLine();

            List <string> lines = File.ReadAllLines(filePath).ToList();

            Random rnd = new Random();

            int    dlugoscNauki      = 200;
            int    liczbaProbek      = 0;
            int    liczbaCech        = 3;
            int    liczbaKlas        = 2;
            double wspolczynnikNauki = 0.2;

            foreach (var line in lines)
            {
                liczbaProbek++;
            }
            Probka[] probki = new Probka[liczbaProbek];



            Console.WriteLine("Podaj liczbę cech (domyślnie: 3)");
            liczbaCech = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Podaj liczbę klas (domyślnie: 2)");
            liczbaKlas = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Podaj długość nauki wyrażaną w liczbach przejść po całej kolekcji próbek (domyślnie: 200)");
            dlugoscNauki = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Podaj współczynnik nauki (domyślnie: 0,2)");
            wspolczynnikNauki = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine();

            double[] cechyMax = new double[liczbaCech];
            double[] cechyMin = new double[liczbaCech];

            double[,] tablicaOdleglosci = new double[liczbaCech, liczbaKlas];

            int q = 0;

            foreach (var line in lines)
            {
                probki[q] = new Probka(liczbaCech);
                string[] entries = line.Split(Convert.ToChar($"{fileSeparator}"));
                for (int i = 0; i < entries.Length; i++)
                {
                    probki[q].pozycja[i] = Convert.ToDouble(entries[i]);
                }
                q++;
            }
            //MAX
            for (int i = 0; i < liczbaProbek; i++)
            {
                for (int j = 0; j < liczbaCech; j++)
                {
                    if (probki[i].pozycja[j] > cechyMax[j])
                    {
                        cechyMax[j] = probki[i].pozycja[j];
                    }
                    cechyMin[j] = cechyMax[j];
                }
            }

            //MIN
            for (int i = 0; i < liczbaProbek; i++)
            {
                for (int j = 0; j < liczbaCech; j++)
                {
                    if (probki[i].pozycja[j] < cechyMin[j])
                    {
                        cechyMin[j] = probki[i].pozycja[j];
                    }
                }
            }

            Console.WriteLine("Wartości maksymalne i minimalne dla wszystkich próbek:");
            for (int i = 0; i < liczbaCech; i++)
            {
                Console.WriteLine($"Max: {cechyMax[i]}");
                Console.WriteLine($"Min: {cechyMin[i]}");
                Console.WriteLine();
            }

            Neuron[] neurony = new Neuron[liczbaKlas];

            for (int i = 0; i < liczbaKlas; i++)
            {
                neurony[i] = new Neuron(liczbaCech, wspolczynnikNauki);
                for (int j = 0; j < liczbaCech; j++)
                {
                    neurony[i].Pozycja[j] = rnd.NextDouble() * (cechyMax[j] - cechyMin[j]) + cechyMin[j];
                }
            }

            //NAUKA
            int    ktoryNeuron          = 0;
            double najmniejszaOdleglosc = double.MaxValue;

            for (int i = 0; i < dlugoscNauki; i++)
            {
                najmniejszaOdleglosc = double.MaxValue;
                for (int z = 0; z < liczbaCech; z++)
                {
                    for (int j = 0; j < liczbaKlas; j++)
                    {
                        if (neurony[j].ZmierzOdleglosc(probki[z]) < najmniejszaOdleglosc)
                        {
                            najmniejszaOdleglosc = neurony[j].ZmierzOdleglosc(probki[z]);
                            ktoryNeuron          = j;
                        }
                    }
                    neurony[ktoryNeuron].Przesun(probki[z]);
                }
            }

            //WYPISANIE WYJŚĆ
            Console.WriteLine("Neurony:");
            for (int i = 0; i < liczbaKlas; i++)
            {
                for (int j = 0; j < liczbaCech; j++)
                {
                    Console.WriteLine($"Wartość {j+1}: {neurony[i].Pozycja[j]}");
                }
                Console.WriteLine();
            }

            Console.ReadLine();
        }