Beispiel #1
0
        static List <epoha> work(bool islogistic) // Тут все соеденим
        {
            int          k     = 0;               // Счетчик эпох
            double       prost = 1;               // Штука для останоки
            List <epoha> Ep    = new List <epoha>();
            List <int[]> X     = function.getx(4);

            int[]    F     = function.getF(X);
            double[] dlta  = new double[16];
            double[] net1  = new double[16];
            double[] nextw = new double[5] {
                0, 0, 0, 0, 0
            };                                                // Значения для весов следующей эпохи
            do
            {
                epoha Ep_ = new epoha(nextw);
                Ep.Add(Ep_);
                Ep[k].nomer = k;
                Ep[k].Y     = new int[16];
                double[] tempW = nextw.ToArray();
                for (int i = 0; i < 16; i++)
                {
                    net1[i] = paramsNS.net(tempW, X[i]);
                    int outz = paramsNS.Outzn(net1[i]);
                    Ep[k].Y[i] = outz;
                }
                Ep[k].E = paramsNS.totalerror(Ep[k].Y, F);

                if (Ep[k].E != 0)
                {
                    for (int i = 0; i < 16; i++)
                    {
                        net1[i] = paramsNS.net(tempW, X[i]);
                        int outz = paramsNS.Outzn(net1[i]);
                        dlta[i] = paramsNS.delta(F[i], Ep[k].Y[i]);
                        nextw   = paramsNS.pereshetW(tempW, X[i], net1[i], 0.3, dlta[i], islogistic);
                    }
                }
                prost = Ep[k].E;
                Ep[k].print();
                k++;
            } while (prost != 0);
            return(Ep);
        }
Beispiel #2
0
        static bool perebor(bool islogistic, int[] vektor)
        {
            int kolvektorov = 0;               // Количество векторов, на которых происходит обучение

            List <int[]> X = function.getx(4); // Наборы аргументов

            int[] F = function.getF(X);        // Получили функцию от 4х переменных



            double prost = 1; // Штука для останоки


            do
            {
                //kolvektorov++;
                kolvektorov = vektor.Length;
                int k = 0; // Счетчик эпох
                //List<int[][]> combination = new List<int[][]>(); // Список, хранящий текущую комбинацию аргументов + их номер
                //combination = function.getx2(kolvektorov, 16); // получаем набор векторов, перебрать все варианты в kolvektorov из 16
                int[] combination = vektor; // Получаем массив индексов наборов, которые будем использовать

                List <epoha> Ep    = new List <epoha>();
                double[]     dlta  = new double[kolvektorov];
                double[]     net1  = new double[kolvektorov];
                double[]     nextw = new double[5] {
                    0, 0, 0, 0, 0
                };                                            // Значения для весов следующей эпохи
                do
                {
                    epoha Ep_ = new epoha(nextw);
                    Ep.Add(Ep_);
                    Ep[k].nomer = k;
                    Ep[k].Y     = new int[kolvektorov];

                    double[] tempW = nextw.ToArray();

                    for (int i = 0; i < kolvektorov; i++)
                    {
                        net1[i] = paramsNS.net(tempW, X[combination[i]]); // считаем от нужной комбинации
                        int outz = paramsNS.Outzn(net1[i]);
                        Ep[k].Y[i] = outz;
                    }
                    int[] newf = new int[kolvektorov];
                    for (int i = 0; i < kolvektorov; i++)
                    {
                        newf[i] = F[combination[i]];  // Новая функция, только на нужных наборах
                    }
                    {
                    }
                    Ep[k].E = paramsNS.totalerror(Ep[k].Y, newf);

                    if (Ep[k].E != 0)
                    {
                        for (int i = 0; i < kolvektorov; i++)
                        {
                            net1[i] = paramsNS.net(tempW, X[combination[i]]);
                            int outz = paramsNS.Outzn(net1[i]);
                            dlta[i] = paramsNS.delta(newf[i], Ep[k].Y[i]);
                            nextw   = paramsNS.pereshetW(tempW, X[combination[i]], net1[i], 0.3, dlta[i], islogistic);
                        }
                    }
                    prost = Ep[k].E;
                    //Ep[k].print();
                    k++;
                    //if (Ep[k].E == 0) Ep[k].print();
                } while ((k < 200) && (prost != 0));



                if (function.test(combination, F, Ep[k - 1].W, X) == true)
                {
                    Ep[k - 1].print();
                    return(true);
                }
                else
                {
                    return(false);
                }
            } while (prost != 0);
        }