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)); } }
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()); }
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()); } }