Ejemplo n.º 1
0
        public override void Execute()
        {
            var nvars = Fh.Point.Count;
            var x0 = Fh.Point; //Стартовая точка
            IterationCount = 0;
            var delta = new DenseVector(nvars);
            for (var i = 0; i < nvars; i++)
            {
                delta[i] = _rho;
            }
            DenseVector originalDelta = delta;

            while (delta.AbsoluteMinimum() > Eps && IterationCount < MaxIterations)
            {
                Vector<double> x1 = ExplanotorySearch(x0, delta);

                if (Fh.Y(x1) < Fh.Y(x0))
                { //x1 лучше чем x0
                    delta = originalDelta;
                    while (true)
                    {
                        Vector<double> x2 = x0  + 2* (x1 - x0);
                        x2 = ExplanotorySearch(x2, delta);

                        if (Fh.Y(x2) < Fh.Y(x1))
                        {
                            //х2 лучше чем х1
                            x0 = x1;
                            x1 = x2;
                        }
                        else
                        {
                            //x2 хуже чем х1
                            x0 = x1;
                            break;
                        }
                    }
                }
                else
                { // x1 хуже чем х0
                    delta /= 2;
                }
                IterationCount++;
            }
            Answer = x0;
        }