Esempio n. 1
0
        public void NsTest()
        {
            //var func = "f(x1,x2) = 2*(x1)^2 + (x2)^2 -2*x1*x2";
            var func = "f(x1,x2) = (x1-2)^2+(x1-x2^2)^2";
            //var func = "f(x1,x2) = x1^2 + x1*x2 + 0.5*x2^2 - x1 - x2";
            // var func = "f(x1,x2) = (x1-2)^2 - (x2-1)^2";
            //var func = "f(x1,x2,x3,x4) = 100*((x2-x1^2)^2+(x1-1)^2+90*(x4-x3^2)^2+(1-x3)^2+10.1*((x2-1)^2+(x4-1)^2)+19.8*(x2-1)*(x4-1))";
            //var func = "f(x) = ((x^2))";
            var Xo = new Point("1,-3");

            var beta = 0.25;
            var tau  = 0.5;
            var l    = 200;
            var Ns   = new FastestFallAlgorithm(func, Xo, beta, tau, l);


            FunctionDefinition function = new FunctionDefinition(func);
            var fx = function.GetValue(Xo);

            Ns.Run();

            var results = new List <double>();

            foreach (var point in Ns.Points)
            {
                results.Add(function.GetValue(point));
            }
        }
Esempio n. 2
0
        public void NsTestShouldReturnTauException()
        {
            var func = "f(x1,x2) = (x1-2)^2+(x1-x2^2)^2";
            var Xo   = new Point("1,-3");

            var beta = 0.25;
            var tau  = 0.005;
            var l    = 200;
            var Ns   = new FastestFallAlgorithm(func, Xo, beta, tau, l);


            FunctionDefinition function = new FunctionDefinition(func);
            var fx = function.GetValue(Xo);

            Assert.Throws <InvalidTauException>(() => Ns.Run());
        }
Esempio n. 3
0
        private void CalculateMinimum()
        {
            try
            {
                StartCalculating();

                var value = Variables.Select(v => v.Value).ToArray();
                var x0    = new Point(value);
                var NS    = new FastestFallAlgorithm(_functionDefinition, x0, InputParameters.Beta, InputParameters.Tau, InputParameters.LIteration, InputParameters.Epsilon1, InputParameters.Epsilon2, InputParameters.Epsilon3);

                calcucatedPoints = NS.Run();
                var result = calcucatedPoints.Last();

                var hessianResult = Hessian.ChceckHessianDeterminants(_functionDefinition, result, InputParameters.Epsilon1);

                UpdateDataTable(calcucatedPoints);

                if (hessianResult == Hessian.StationaryConditions.Minimum)
                {
                    _messageDialogService.ShowInfoDialog($"Znaleziono minimum lokalne w punkcie : {result} \nWartość : { _functionDefinition.GetValue(result)}");
                }
                if (hessianResult != Hessian.StationaryConditions.Minimum)
                {
                    _messageDialogService.ShowInfoDialog($"Obliczono resultat, który nie jest minimum lokalnym w punkcie : {result} \nWartość : { _functionDefinition.GetValue(result)}");
                }
            }
            catch (InvalidTauException)
            {
                _messageDialogService.ShowInfoDialog("Nie można obliczyć minimum dla podaego tau. Podaj inny parametr");
            }
            catch (UnfortunateFunctionCaseException fex)
            {
                calcucatedPoints = fex.Points;
                UpdateDataTable(fex.Points);
                var lastPoint = fex.Points.Last();
                _messageDialogService.ShowInfoDialog($"Algorytm zakończył działanie z powodu zbyt dużej ilości obliczeń. \nOstatni obliczony punkt wynosi : {lastPoint} \nWartość : { _functionDefinition.GetValue(lastPoint)}");
            }
            catch (Exception ex)
            {
                _messageDialogService.ShowInfoDialog(ex.ToString());
            }
        }