From 7afb1372f8418f50ab4fe9b96ccec38884e3dbbd Mon Sep 17 00:00:00 2001 From: elvis Date: Fri, 17 Nov 2023 12:42:12 +0100 Subject: [PATCH] lesson 9/11 --- 11-09/NWTN.jl | 387 ++++ 11-09/NWTN.m | 553 +++++ 11-09/SDG.jl | 423 ++++ 11-09/SDG.m | 602 ++++++ 11-09/TestFunctions Matlab/TestFunctions.m | 415 ++++ 11-09/TestFunctions Matlab/roughNN.m | 42 + 11-09/TestFunctions Matlab/testNN.m | 627 ++++++ .../TestFunctions Matlab/testNN_ADiGatorGrd.m | 227 ++ .../testNN_ADiGatorGrd.mat | Bin 0 -> 1541 bytes .../TestFunctions Matlab/testNN_ADiGatorHes.m | 508 +++++ .../testNN_ADiGatorHes.mat | Bin 0 -> 179117 bytes .../TestFunctions Matlab/testNN_ADiGatorJac.m | 227 ++ .../testNN_ADiGatorJac.mat | Bin 0 -> 1541 bytes 11-09/TestFunctions Matlab/testNN_Grd.m | 21 + 11-09/TestFunctions Matlab/testNN_Hes.m | 25 + 11-09/TestFunctions Matlab/testNN_Jac.m | 21 + 11-09/TestFunctions/TestFunctions.jl | 372 ++++ 11-09/TestFunctions/roughNN.jl | 43 + 11-09/TestFunctions/testNN.jl | 628 ++++++ 11-09/TestFunctions/testNN_Hes.jl | 26 + 11-09/TestFunctions/testNN_Jac.jl | 23 + 11-09/Untitled.ipynb | 570 +++++ 11-09/lesson.ipynb | 1864 +++++++++++++++++ 23 files changed, 7604 insertions(+) create mode 100644 11-09/NWTN.jl create mode 100644 11-09/NWTN.m create mode 100644 11-09/SDG.jl create mode 100644 11-09/SDG.m create mode 100644 11-09/TestFunctions Matlab/TestFunctions.m create mode 100644 11-09/TestFunctions Matlab/roughNN.m create mode 100644 11-09/TestFunctions Matlab/testNN.m create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorGrd.m create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorGrd.mat create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorHes.m create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorHes.mat create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorJac.m create mode 100644 11-09/TestFunctions Matlab/testNN_ADiGatorJac.mat create mode 100644 11-09/TestFunctions Matlab/testNN_Grd.m create mode 100644 11-09/TestFunctions Matlab/testNN_Hes.m create mode 100644 11-09/TestFunctions Matlab/testNN_Jac.m create mode 100644 11-09/TestFunctions/TestFunctions.jl create mode 100644 11-09/TestFunctions/roughNN.jl create mode 100644 11-09/TestFunctions/testNN.jl create mode 100644 11-09/TestFunctions/testNN_Hes.jl create mode 100644 11-09/TestFunctions/testNN_Jac.jl create mode 100644 11-09/Untitled.ipynb create mode 100644 11-09/lesson.ipynb diff --git a/11-09/NWTN.jl b/11-09/NWTN.jl new file mode 100644 index 0000000..d7b364e --- /dev/null +++ b/11-09/NWTN.jl @@ -0,0 +1,387 @@ +using LinearAlgebra, Printf, Plots + +function NWTN(f; + x::Union{Nothing, Vector}=nothing, + eps::Real=1e-6, + MaxFeval::Integer=1000, + m1::Real=1e-4, + m2::Real=0.9, + delta::Real=1e-6, + tau::Real=0.9, + sfgrd::Real=0.2, + MInf::Real=-Inf, + mina::Real=1e-16, + plt::Union{Plots.Plot, Nothing}=nothing, + plotatend::Bool=true, + Plotf::Integer=0, + printing::Bool=true)::Tuple{AbstractArray, String} + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # inner functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function f2phi(alpha, derivate=false) + # computes and returns the value of the tomography at alpha + # + # phi( alpha ) = f( x + alpha * d ) + # + # if Plotf > 2 saves the data in gap() for plotting + # + # if the second output parameter is required, put there the derivative + # of the tomography in alpha + # + # phi'( alpha ) = < \nabla f( x + alpha * d ) , d > + # + # saves the point in lastx, the gradient in lastg, the Hessian in lasth, + # and increases feval + + lastx = x + alpha * d + phi, lastg, lastH = f(lastx) + + if Plotf > 2 + if fStar > - Inf + push!(gap, (phi - fStar) / max(abs(fStar), 1)) + else + push!(gap, phi) + end + end + + feval += 1 + + if derivate + return (phi, dot(d, lastg)) + end + return (phi, nothing) + end + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function ArmijoWolfeLS(phi0, phip0, as, m1, m2, tau) + # performs an Armijo-Wolfe Line Search. + # + # phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 + # + # as > 0 is the first value to be tested: if phi'( as ) < 0 then as is + # divided by tau < 1 (hence it is increased) until this does not happen + # any longer + # + # m1 and m2 are the standard Armijo-Wolfe parameters; note that the strong + # Wolfe condition is used + # + # returns the optimal step and the optimal f-value + + lsiter = 1 # count iterations of first phase + local phips, phia + while feval ≤ MaxFeval + phia, phips = f2phi(as, true) + + if (phia ≤ phi0 + m1 * as * phip0) && (abs(phips) ≤ - m2 * phip0) + if printing + @printf(" %2d", lsiter) + end + a = as; + return (a, phia) # Armijo + strong Wolfe satisfied, we are done + + end + if phips ≥ 0 + break + end + as = as / tau + lsiter += 1 + end + + if printing + @printf(" %2d ", lsiter) + end + lsiter = 1 # count iterations of second phase + + am = 0 + a = as + phipm = phip0 + while (feval ≤ MaxFeval ) && ((as - am)) > mina && (phips > 1e-12) + + # compute the new value by safeguarded quadratic interpolation + a = (am * phips - as * phipm) / (phips - phipm) + a = max(am + ( as - am ) * sfgrd, min(as - ( as - am ) * sfgrd, a)) + + # compute phi(a) + phia, phip = f2phi(a, true) + + if (phia ≤ phi0 + m1 * a * phip0) && (abs(phip) ≤ -m2 * phip0) + break # Armijo + strong Wolfe satisfied, we are done + end + + # restrict the interval based on sign of the derivative in a + if phip < 0 + am = a + phipm = phip + else + as = a + if as ≤ mina + break + end + phips = phip + end + lsiter += 1 + end + + if printing + @printf("%2d", lsiter) + end + return (a, phia) + end + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function BacktrackingLS(phi0, phip0, as, m1, tau) + # performs a Backtracking Line Search. + # + # phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 + # + # as > 0 is the first value to be tested, which is decreased by + # multiplying it by tau < 1 until the Armijo condition with parameter + # m1 is satisfied + # + # returns the optimal step and the optimal f-value + + lsiter = 1 # count ls iterations + while feval ≤ MaxFeval && as > mina + phia, _ = f2phi(as) + if phia ≤ phi0 + m1 * as * phip0 # Armijo satisfied + break # we are done + end + as *= tau + lsiter += 1 + end + + if printing + @printf(" %2d", lsiter) + end + + return (as, phia) + end + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + #Plotf = 2 + # 0 = nothing is plotted + # 1 = the level sets of f and the trajectory are plotted (when n = 2) + # 2 = the function value / gap are plotted, iteration-wise + # 3 = the function value / gap are plotted, function-evaluation-wise + + Interactive = false + + PXY = Matrix{Real}(undef, 2, 0) + + local gap + if Plotf > 1 + if Plotf == 2 + MaxIter = 50 # expected number of iterations for the gap plot + else + MaxIter = 70 # expected number of iterations for the gap plot + end + gap = [] + end + + if Plotf == 2 && plt == nothing + plt = plot(xlims=(0, MaxIter), ylims=(1e-15, 1e+1)) + end + if Plotf > 1 && plt == nothing + plt = plot(xlims=(0, MaxIter)) + end + if plt == nothing + plt = plot() + end + + local fStar + if isnothing(x) + (fStar, x, _) = f(nothing) + else + (fStar, _, _) = f(nothing) + end + + n = size(x, 1) + + if m1 ≤ 0 || m1 ≥ 1 + throw(ArgumentError("m1 is not in (0 ,1)")) + end + + AWLS = (m2 > 0 && m2 < 1) + + if delta < 0 + throw(ArgumentError("delta must be ≥ 0")) + end + + if tau ≤ 0 || tau ≥ 1 + throw(ArgumentError("tau is not in (0 ,1)")) + end + + if sfgrd ≤ 0 || sfgrd ≥ 1 + throw(ArgumentError("sfgrd is not in (0, 1)")) + end + + if mina < 0 + throw(ArgumentError("mina must be ≥ 0")) + end + + # "global" variables- - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + lastx = zeros(n) # last point visited in the line search + lastg = zeros(n) # gradient of lastx + lastH = zeros(n, n) # Hessian of lastx + d = zeros(n) # Newton's direction + feval = 0 # f() evaluations count ("common" with LSs) + + status = "error" + + # initializations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if fStar > -Inf + prevv = Inf + end + + if printing + @printf("Newton's method\n") + if fStar > -Inf + @printf("feval\trel gap\t\t|| g(x) ||\trate\t\tdelta") + else + @printf("feval\tf(x)\t\t\t|| g(x) ||\tdelta") + end + @printf("\t\tls it\ta*") + @printf("\n\n") + end + + + v, _ = f2phi(0) + ng = norm(lastg) + if eps < 0 + ng0 = -ng # norm of first subgradient: why is there a "-"? ;-) + else + ng0 = 1 # un-scaled stopping criterion + end + + # main loop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + while true + + # output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + if fStar > -Inf + gapk = ( v - fStar ) / max(abs( fStar ), 1) + + if printing + @printf("%4d\t%1.4e\t%1.4e", feval, gapk, ng) + if prevv < Inf + @printf("\t%1.4e", ( v - fStar ) / ( prevv - fStar )) + else + @printf("\t\t") + end + end + prevv = v + + if Plotf > 1 + if Plotf ≥ 2 + push!(gap, gapk) + end + end + else + if printing + @printf("%4d\t%1.8e\t\t%1.4e", feval, v, ng) + end + + if Plotf > 1 + if Plotf ≥ 2 + push!(gap, v) + end + end + end + + # stopping criteria - - - - - - - - - - - - - - - - - - - - - - - - - - + + if ng ≤ eps * ng0 + status = "optimal" + break + end + + if feval > MaxFeval + status = "stopped" + break + end + + # compute Newton's direction- - - - - - - - - - - - - - - - - - - - - - + + lambdan = eigmin(lastH) # smallest eigenvalue + if lambdan < delta + if printing + @printf("\t%1.4e", delta - lambdan) + end + lastH = lastH + (delta - lambdan) * I + else + if printing + @printf("\t0.00e+00") + end + end + d = -lastH \ lastg + phip0 = lastg' * d + + # compute step size - - - - - - - - - - - - - - - - - - - - - - - - - - + # in Newton's method, the default initial stepsize is 1 + + if AWLS + a, v = ArmijoWolfeLS(v, phip0, 1, m1, m2, tau) + else + a, v = BacktrackingLS(v, phip0, 1, m1, tau) + end + + # output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + if printing + @printf("\t%1.2e", a) + @printf("\n") + end + + if a ≤ mina + status = "error" + break + end + + if v ≤ MInf + status = "unbounded" + break + end + + # compute new point - - - - - - - - - - - - - - - - - - - - - - - - - - + + # possibly plot the trajectory + if n == 2 && Plotf == 1 + PXY = hcat(PXY, hcat(x, lastx)) + end + + x = lastx + ng = norm(lastg) + + # iterate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if Interactive + readline() + end + end + + if plotatend + if Plotf ≥ 2 + plot!(plt, gap) + elseif Plotf == 1 && n == 2 + plot!(plt, PXY[1, :], PXY[2, :]) + end + display(plt) + end + + # end of main loop- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + return (x, status) +end \ No newline at end of file diff --git a/11-09/NWTN.m b/11-09/NWTN.m new file mode 100644 index 0000000..dab9ae9 --- /dev/null +++ b/11-09/NWTN.m @@ -0,0 +1,553 @@ +function [ x , status ] = NWTN( f , varargin ) + +%function [ x , status ] = NWTN( f , x , eps , MaxFeval , m1 , m2 , delta , +% tau , sfgrd , MInf , mina ) +% +% Apply a classical Newton's method for the minimization of the provided +% function f, which must have the following interface: +% +% [ v , g , H ] = f( x ) +% +% Input: +% +% - x is either a [ n x 1 ] real (column) vector denoting the input of +% f(), or [] (empty). +% +% Output: +% +% - v (real, scalar): if x == [] this is the best known lower bound on +% the unconstrained global optimum of f(); it can be -Inf if either f() +% is not bounded below, or no such information is available. If x ~= [] +% then v = f(x). +% +% - g (real, [ n x 1 ] real vector): this also depends on x. if x == [] +% this is the standard starting point from which the algorithm should +% start, otherwise it is the gradient of f() at x (or a subgradient if +% f() is not differentiable at x, which it should not be if you are +% applying the gradient method to it). +% +% - H (real, [ n x n ] real matrix) must only be specified if x ~= [], +% and it is the Hessian of f() at x. If no such information is +% available, the function throws error. +% +% The other [optional] input parameters are: +% +% - x (either [ n x 1 ] real vector or [], default []): starting point. +% If x == [], the default starting point provided by f() is used. +% +% - eps (real scalar, optional, default value 1e-6): the accuracy in the +% stopping criterion: the algorithm is stopped when the norm of the +% gradient is less than or equal to eps. If a negative value is provided, +% this is used in a *relative* stopping criterion: the algorithm is +% stopped when the norm of the gradient is less than or equal to +% (- eps) * || norm of the first gradient ||. +% +% - MaxFeval (integer scalar, optional, default value 1000): the maximum +% number of function evaluations (hence, iterations will be not more than +% MaxFeval because at each iteration at least a function evaluation is +% performed, possibly more due to the line search). +% +% - m1 (real scalar, optional, default value 1e-4): first parameter of the +% Armijo-Wolfe-type line search (sufficient decrease). Has to be in (0,1) +% +% - m2 (real scalar, optional, default value 0.9): typically the second +% parameter of the Armijo-Wolfe-type line search (strong curvature +% condition). It should to be in (0,1); if not, it is taken to mean that +% the simpler Backtracking line search should be used instead +% +% - delta (real scalar, optional, default value 1e-6): minimum positive +% value for the eigenvalues of the modified Hessian used to compute the +% Newton direction +% +% - tau (real scalar, optional, default value 0.9): scaling parameter for +% the line search. In the Armijo-Wolfe line search it is used in the +% first phase: if the derivative is not positive, then the step is +% divided by tau (which is < 1, hence it is increased). In the +% Backtracking line search, each time the step is multiplied by tau +% (hence it is decreased). +% +% - sfgrd (real scalar, optional, default value 0.2): safeguard parameter +% for the line search. to avoid numerical problems that can occur with +% the quadratic interpolation if the derivative at one endpoint is too +% large w.r.t. the one at the other (which leads to choosing a point +% extremely near to the other endpoint), a *safeguarded* version of +% interpolation is used whereby the new point is chosen in the interval +% [ as * ( 1 + sfgrd ) , am * ( 1 - sfgrd ) ], being [ as , am ] the +% current interval, whatever quadratic interpolation says. If you +% experiemce problems with the line search taking too many iterations to +% converge at "nasty" points, try to increase this +% +% - MInf (real scalar, optional, default value -Inf): if the algorithm +% determines a value for f() <= MInf this is taken as an indication that +% the problem is unbounded below and computation is stopped +% (a "finite -Inf"). +% +% - mina (real scalar, optional, default value 1e-16): if the algorithm +% determines a stepsize value <= mina, this is taken as an indication +% that something has gone wrong (the gradient is not a direction of +% descent, so maybe the function is not differentiable) and computation +% is stopped. It is legal to take mina = 0, thereby in fact skipping this +% test. +% +% Output: +% +% - x ([ n x 1 ] real column vector): the best solution found so far. +% +% - status (string): a string describing the status of the algorithm at +% termination +% +% = 'optimal': the algorithm terminated having proven that x is a(n +% approximately) optimal solution, i.e., the norm of the gradient at x +% is less than the required threshold +% +% = 'unbounded': the algorithm has determined an extrenely large negative +% value for f() that is taken as an indication that the problem is +% unbounded below (a "finite -Inf", see MInf above) +% +% = 'stopped': the algorithm terminated having exhausted the maximum +% number of iterations: x is the bast solution found so far, but not +% necessarily the optimal one +% +% = 'error': the algorithm found a numerical error that prevents it from +% continuing optimization (see mina above) +% +%{ + ======================================= + Author: Antonio Frangioni + Date: 29-10-21 + Version 1.21 + Copyright Antonio Frangioni + ======================================= +%} + +Plotf = 2; +% 0 = nothing is plotted +% 1 = the level sets of f and the trajectory are plotted (when n = 2) +% 2 = the function value / gap are plotted, iteration-wise +% 3 = the function value / gap are plotted, function-evaluation-wise + +Interactive = false; % if we pause at every iteration + +if Plotf > 1 + if Plotf == 2 + MaxIter = 50; % expected number of iterations for the gap plot + else + MaxIter = 70; % expected number of iterations for the gap plot + end + gap = []; + + xlim( [ 0 MaxIter ] ); + ax = gca; + ax.FontSize = 16; + ax.Position = [ 0.03 0.07 0.95 0.92 ]; + ax.Toolbar.Visible = 'off'; +end + +% reading and checking input- - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +if ~ isa( f , 'function_handle' ) + error( 'f not a function' ); +end + +if isempty( varargin ) || isempty( varargin{ 1 } ) + [ fStar , x ] = f( [] ); +else + x = varargin{ 1 }; + if ~ isreal( x ) + error( 'x not a real vector' ); + end + + if size( x , 2 ) ~= 1 + error( 'x is not a (column) vector' ); + end + + fStar = f( [] ); +end + +n = size( x , 1 ); + +if length( varargin ) > 1 + eps = varargin{ 2 }; + if ~ isreal( eps ) || ~ isscalar( eps ) + error( 'eps is not a real scalar' ); + end +else + eps = 1e-6; +end + +if length( varargin ) > 2 + MaxFeval = round( varargin{ 3 } ); + if ~ isscalar( MaxFeval ) + error( 'MaxFeval is not an integer scalar' ); + end +else + MaxFeval = 1000; +end + +if length( varargin ) > 3 + m1 = varargin{ 4 }; + if ~ isscalar( m1 ) + error( 'm1 is not a real scalar' ); + end + if m1 <= 0 || m1 >= 1 + error( 'm1 is not in (0 ,1)' ); + end +else + m1 = 1e-4; +end + +if length( varargin ) > 4 + m2 = varargin{ 5 }; + if ~ isscalar( m1 ) + error( 'm2 is not a real scalar' ); + end +else + m2 = 0.9; +end + +AWLS = ( m2 > 0 && m2 < 1 ); + +if length( varargin ) > 5 + delta = varargin{ 6 }; + if ~ isscalar( delta ) + error( 'delta is not a real scalar' ); + end + if delta < 0 + error( 'delta must be > 0' ); + end +else + delta = 1e-6; +end + +if length( varargin ) > 6 + tau = varargin{ 7 }; + if ~ isscalar( tau ) + error( 'tau is not a real scalar' ); + end + if tau <= 0 || tau >= 1 + error( 'tau is not in (0 ,1)' ); + end +else + tau = 0.9; +end + +if length( varargin ) > 7 + sfgrd = varargin{ 8 }; + if ~ isscalar( sfgrd ) + error( 'sfgrd is not a real scalar' ); + end + if sfgrd <= 0 || sfgrd >= 1 + error( 'sfgrd is not in (0, 1)' ); + end +else + sfgrd = 0.2; +end + +if length( varargin ) > 8 + MInf = varargin{ 9 }; + if ~ isscalar( MInf ) + error( 'MInf is not a real scalar' ); + end +else + MInf = - Inf; +end + +if length( varargin ) > 9 + mina = varargin{ 10 }; + if ~ isscalar( mina ) + error( 'mina is not a real scalar' ); + end + if mina < 0 + error( 'mina is < 0' ); + end +else + mina = 1e-16; +end + +% "global" variables- - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +lastx = zeros( n , 1 ); % last point visited in the line search +lastg = zeros( n , 1 ); % gradient of lastx +lastH = zeros( n , n ); % Hessian of lastx +d = zeros( n , 1 ); % Newton's direction +feval = 0; % f() evaluations count ("common" with LSs) + +% initializations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +fprintf( 'Newton''s method\n'); +if fStar > - Inf + fprintf( 'feval\trel gap\t\t|| g(x) ||\trate\t\tdelta'); + prevv = Inf; +else + fprintf( 'feval\tf(x)\t\t\t|| g(x) ||\tdelta'); +end +fprintf( '\t\tls it\ta*'); +fprintf( '\n\n' ); + +v = f2phi( 0 ); +ng = norm( lastg ); +if eps < 0 + ng0 = - ng; % norm of first subgradient: why is there a "-"? ;-) +else + ng0 = 1; % un-scaled stopping criterion +end + +% main loop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +while true + + % output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + if fStar > - Inf + gapk = ( v - fStar ) / max( [ abs( fStar ) 1 ] ); + + fprintf( '%4d\t%1.4e\t%1.4e' , feval , gapk , ng ); + if prevv < Inf + fprintf( '\t%1.4e' , ( v - fStar ) / ( prevv - fStar ) ); + else + fprintf( '\t\t' ); + end + prevv = v; + + if Plotf > 1 + if Plotf >= 2 + gap( end + 1 ) = gapk; + end + semilogy( gap , 'Color' , 'k' , 'LineWidth' , 2 ); + if Plotf == 2 + ylim( [ 1e-15 1e+1 ] ); + else + ylim( [ 1e-15 1e+4 ] ); + end + drawnow; + end + else + fprintf( '%4d\t%1.8e\t\t%1.4e' , feval , v , ng ); + + if Plotf > 1 + if Plotf >= 2 + gap( end + 1 ) = v; + end + plot( gap , 'Color' , 'k' , 'LineWidth' , 2 ); + drawnow; + end + end + + % stopping criteria - - - - - - - - - - - - - - - - - - - - - - - - - - + + if ng <= eps * ng0 + status = 'optimal'; + break; + end + + if feval > MaxFeval + status = 'stopped'; + break; + end + + % compute Newton's direction- - - - - - - - - - - - - - - - - - - - - - + + lambdan = eigs( lastH , 1 , 'sa' ); % smallest eigenvalue + if lambdan < delta + fprintf( '\t%1.4e' , delta - lambdan ); + lastH = lastH + ( delta - lambdan ) * eye( n ); + else + fprintf( '\t0.00e+00' ); + end + d = - lastH \ lastg; + phip0 = lastg' * d; + + % compute step size - - - - - - - - - - - - - - - - - - - - - - - - - - + % in Newton's method, the default initial stepsize is 1 + + if AWLS + [ a , v ] = ArmijoWolfeLS( v , phip0 , 1 , m1 , m2 , tau ); + else + [ a , v ] = BacktrackingLS( v , phip0 , 1 , m1 , tau ); + end + + % output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + fprintf( '\t%1.2e' , a ); + fprintf( '\n' ); + + if a <= mina + status = 'error'; + break; + end + + if v <= MInf + status = 'unbounded'; + break; + end + + % compute new point - - - - - - - - - - - - - - - - - - - - - - - - - - + + % possibly plot the trajectory + if n == 2 && Plotf == 1 + PXY = [ x , lastx ]; + line( 'XData' , PXY( 1 , : ) , 'YData' , PXY( 2 , : ) , ... + 'LineStyle' , '-' , 'LineWidth' , 2 , 'Marker' , 'o' , ... + 'Color' , [ 0 0 0 ] ); + end + + x = lastx; + ng = norm( lastg ); + + % iterate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if Interactive + pause; + end +end + +% end of main loop- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% inner functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ phi , varargout ] = f2phi( alpha ) +% +% computes and returns the value of the tomography at alpha +% +% phi( alpha ) = f( x + alpha * d ) +% +% if Plotf > 2 saves the data in gap() for plotting +% +% if the second output parameter is required, put there the derivative +% of the tomography in alpha +% +% phi'( alpha ) = < \nabla f( x + alpha * d ) , d > +% +% saves the point in lastx, the gradient in lastg, the Hessian in lasth, +% and increases feval + + lastx = x + alpha * d; + [ phi , lastg , lastH ] = f( lastx ); + + if Plotf > 2 + if fStar > - Inf + gap( end + 1 ) = ( phi - fStar ) / max( [ abs( fStar ) 1 ] ); + else + gap( end + 1 ) = phi; + end + end + + if nargout > 1 + varargout{ 1 } = d' * lastg; + end + + feval = feval + 1; +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ a , phia ] = ArmijoWolfeLS( phi0 , phip0 , as , m1 , m2 , tau ) + +% performs an Armijo-Wolfe Line Search. +% +% phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 +% +% as > 0 is the first value to be tested: if phi'( as ) < 0 then as is +% divided by tau < 1 (hence it is increased) until this does not happen +% any longer +% +% m1 and m2 are the standard Armijo-Wolfe parameters; note that the strong +% Wolfe condition is used +% +% returns the optimal step and the optimal f-value + +lsiter = 1; % count iterations of first phase +while feval <= MaxFeval + [ phia , phips ] = f2phi( as ); + + if ( phia <= phi0 + m1 * as * phip0 ) && ( abs( phips ) <= - m2 * phip0 ) + fprintf( ' %2d' , lsiter ); + a = as; + return; % Armijo + strong Wolfe satisfied, we are done + + end + if phips >= 0 + break; + end + as = as / tau; + lsiter = lsiter + 1; +end + +fprintf( ' %2d ' , lsiter ); +lsiter = 1; % count iterations of second phase + +am = 0; +a = as; +phipm = phip0; +while ( feval <= MaxFeval ) && ( ( as - am ) ) > mina && ( phips > 1e-12 ) + + % compute the new value by safeguarded quadratic interpolation + a = ( am * phips - as * phipm ) / ( phips - phipm ); + a = max( [ am + ( as - am ) * sfgrd ... + min( [ as - ( as - am ) * sfgrd a ] ) ] ); + + % compute phi( a ) + [ phia , phip ] = f2phi( a ); + + if ( phia <= phi0 + m1 * a * phip0 ) && ( abs( phip ) <= - m2 * phip0 ) + break; % Armijo + strong Wolfe satisfied, we are done + end + + % restrict the interval based on sign of the derivative in a + if phip < 0 + am = a; + phipm = phip; + else + as = a; + if as <= mina + break; + end + phips = phip; + end + lsiter = lsiter + 1; +end + +fprintf( '%2d' , lsiter ); + +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ as , phia ] = BacktrackingLS( phi0 , phip0 , as , m1 , tau ) + +% performs a Backtracking Line Search. +% +% phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 +% +% as > 0 is the first value to be tested, which is decreased by +% multiplying it by tau < 1 until the Armijo condition with parameter +% m1 is satisfied +% +% returns the optimal step and the optimal f-value + +lsiter = 1; % count ls iterations +while feval <= MaxFeval && as > mina + [ phia , ~ ] = f2phi( as ); + if phia <= phi0 + m1 * as * phip0 % Armijo satisfied + break; % we are done + end + as = as * tau; + lsiter = lsiter + 1; +end + +fprintf( ' %2d' , lsiter ); + +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +end % the end- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/11-09/SDG.jl b/11-09/SDG.jl new file mode 100644 index 0000000..6b38e7a --- /dev/null +++ b/11-09/SDG.jl @@ -0,0 +1,423 @@ +using LinearAlgebra, Printf, Plots + +function SDG(f; + x::Union{Nothing, Vector}=nothing, + astart::Real=1, + eps::Real=1e-6, + MaxFeval::Integer=1000, + m1::Real=1e-3, + m2::Real=0.9, + tau::Real=0.9, + sfgrd::Real=0.01, + MInf::Real=-Inf, + mina::Real=1e-16, + plt::Union{Plots.Plot, Nothing}=nothing, + plotatend::Bool=true, + Plotf::Integer=0, + printing::Bool=true)::Tuple{AbstractArray, String} + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # local functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function f2phi(alpha, derivate=false) + lastx = x .- alpha .* g + (phi, lastg, _) = f(lastx) + + if (Plotf > 2) + if fStar > -Inf + push!(gap, (phi - fStar) / max(abs(fStar), 1)) + else + push!(gap, phi) + end + end + feval += 1 + + if derivate + return phi, dot(-g, lastg) + end + return phi, nothing + end + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function ArmijoWolfeLS(phi0, phip0, as, m1, m2, tau) + # performs an Armijo-Wolfe Line Search. + # + # Inputs: + # + # - phi0 = phi( 0 ) + # + # - phip0 = phi'( 0 ) (< 0) + # + # - as (> 0) is the first value to be tested: if the Armijo condition + # + # phi( as ) <= phi0 + m1 * as * phip0 + # + # is satisfied but the Wolfe condition is not, which means that the + # derivative in as is still negative, which means that longer steps + # might be possible), then as is divided by tau < 1 (hence it is + # increased) until this does not happen any longer + # + # - m1 (> 0 and < 1, typically small, like 0.01) is the parameter of + # the Armijo condition + # + # - m2 (> m1 > 0, typically large, like 0.9) is the parameter of the + # Wolfe condition + # + # - tau (> 0 and < 1) is the increasing coefficient for the first phase + # (extrapolation) + # + # Outputs: + # + # - a is the "optimal" step + # + # - phia = phi( a ) (the "optimal" f-value) + + lsiter = 1 # count iterations of first phase + local phips, phia + while feval ≤ MaxFeval + (phia, phips) = f2phi(as, true) # compute phi( a ) and phi'( a ) + + if phia > phi0 + m1 * as * phip0 # Armijo not satisfied + break + end + + if phips ≥ m2 * phip0 # Wolfe satisfied + if printing + @printf("%2d ", lsiter) + end + a = as + return (a, phia) # Armijo + Wolfe satisfied, done + end + if phips ≥ 0 # derivative is positive, break + break + end + as = as / tau + lsiter += 1 + end + + if printing + @printf("%2d ", lsiter) + end + lsiter = 1 # count iterations of second phase + + am = 0 + a = as + phipm = phip0 + while (feval ≤ MaxFeval) && ((as - am) > abs(mina)) && (abs(phips) > 1e-12) + + if (phipm < 0) && (phips > 0) + # if the derivative in as is positive and that in am is negative, + # then compute the new step by safeguarded quadratic interpolation + a = (am * phips - as * phipm) / (phips - phipm) + a = max(am + ( as - am ) * sfgrd, min(as - ( as - am ) * sfgrd, a)) + else + a = (as - am) / 2 # else just use dumb binary search + end + + phia, phipa = f2phi(a, true) # compute phi( a ) and phi'( a ) + + if phia ≤ phi0 + m1 * as * phip0 # Armijo satisfied + if phipa ≥ m2 * phip0 # Wolfe satisfied + break # Armijo + Wolfe satisfied, done + end + + am = a # Armijo is satisfied but Wolfe is not, i.e., the + phipm = phipa # derivative is still negative: move the left + # endpoint of the interval to a + else # Armijo not satisfied + as = a # move the right endpoint of the interval to a + phips = phipa + end + + lsiter += 1 + end + + if printing + @printf("%2d", lsiter) + end + + return (a, phia) + end + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function BacktrackingLS(phi0, phip0, as, m1, tau) + # performs a Backtracking Line Search. + # + # phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 + # + # as > 0 is the first value to be tested, which is decreased by + # multiplying it by tau < 1 until the Armijo condition with parameter + # m1 is satisfied + # + # returns the optimal step and the optimal f-value + + local phia + + lsiter = 1 # count ls iterations + while feval ≤ MaxFeval && as > mina + (phia, _) = f2phi(as) + if phia ≤ phi0 + m1 * as * phip0 # Armijo satisfied + break # we are done + end + as = as * tau + lsiter += 1 + end + + if printing + @printf("\t%2d", lsiter) + end + return (as, phia) + end + + # Plotf = 1 + # 0 = nothing is plotted + # 1 = the level sets of f and the trajectory are plotted (when n = 2) + # 2 = the function value / gap are plotted, iteration-wise + # 3 = the function value / gap are plotted, function-evaluation-wise + Interactive = false + + local gap + PXY = Matrix{Real}(undef, 2, 0) + + status = "error" + + if Plotf > 1 + if Plotf == 2 + MaxIter = 200 # expected number of iterations for the gap plot + else + MaxIter = 1000 # expected number of iterations for the gap plot + end + gap = [] + end + + if x == nothing + (fStar, x, _) = f(nothing) + else + (fStar, _, _) = f(nothing) + end + + n = size(x, 1) + + if astart == 0 + throw(ArgumentError("astart must be ≠ 0")) + end + + if m1 ≤ 0 || m1 ≥ 1 + throw(ArgumentError("m1: ($m1) is not in (0, 1)")) + end + + AWLS = (m2 > 0 && m2 < 1) + + if tau ≤ 0 || tau ≥ 1 + throw(ArgumentError("tau: ($tau) is not in (0, 1)")) + end + + if sfgrd ≤ 0 || sfgrd ≥ 1 + throw(ArgumentError("sfgrd: ($sfgrd) is not in (0, 1)")) + end + + if mina < 0 + throw(ArgumentError("mina: ($mina) must be ≥ 0")) + end + + if Plotf > 1 && plt == nothing + plt = plot(xlims=(0, MaxIter)) + elseif plt == nothing + plt = plot() + end + + # "global" variables- - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + lastx = zeros(n) # last point visited in the line search + lastg = zeros(n) # gradient of lastx + feval = 1 # f() evaluations count ("common" with LSs) + + # initializations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if printing + println("Gradient method") + end + if fStar > -Inf + if printing + print("feval\trel gap\t\t|| g(x) ||\trate\t") + end + prevv = Inf + else + if printing + print("feval\tf(x)\t\t\t|| g(x) ||") + end + end + if astart > 0 + if printing + print("\tls feval\ta*") + end + end + if printing + print("\n\n") + end + + # compute first f-value and gradient in x^0 - - - - - - - - - - - - - - - - + + g = zeros(2, 1) + v, _ = f2phi(0) + g = lastg + + # compute norm of the (first) gradient- - - - - - - - - - - - - - - - - - - + + ng = norm(g) + if eps < 0 + ng0 = -ng # norm of first subgradient: why is there a "-"? ;-) + else + ng0 = 1 # un-scaled stopping criterion + end + + # main loop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + while true + # output statistics & plot gap/f-values - - - - - - - - - - - - - - - - + + if fStar > -Inf + gapk = (v .- fStar) / max(abs(fStar), 1) + + if printing + @printf("%4d\t%1.4e\t%1.4e", feval, gapk, ng) + end + if prevv < Inf + if printing + @printf("\t%1.4e", (v .- fStar) / (prevv - fStar)) + end + else + if printing + print(" \t ") + end + end + prevv = v + + if Plotf > 1 + if Plotf ≥ 2 + push!(gap, gapk) + end + plot!(plt, yscale=:log) + if Plotf == 2 + plot!(plt, ylims=(1e-15, 1e+1)) + else + plot!(plt, ylims=(1e-15, 1e+4)) + end + end + else + if printing + @printf("%4d\t%1.8e\t\t%1.4e", feval, v, ng) + end + + if Plotf ≥ 2 + push!(gap, v) + end + end + + # stopping criteria - - - - - - - - - - - - - - - - - - - - - - - - - - + + if ng ≤ (eps * ng0) + status = "optimal" + if printing + print("\n") + end + break + end + + if feval > MaxFeval + status = "stopped" + if printing + print("\n") + end + break + end + + # compute step size - - - - - - - - - - - - - - - - - - - - - - - - - - + + phip0 = -ng * ng + + if astart < 0 + # fixed-step approach + lastx = x .+ astart .* g + (v, lastg, _) = f(lastx) + feval = feval + 1 + else + # line-search approach, either Armijo-Wolfe or Backtracking + + if AWLS + a, v = ArmijoWolfeLS(v, phip0, astart, m1, m2, tau) + else + a, v = BacktrackingLS(v, phip0, astart, m1, tau) + end + end + + # output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + if astart > 0 + if printing + @printf("\t%1.4e\n", a) + end + + if a ≤ mina + status = "error" + if printing + print("\n") + end + break + end + else + if printing + print("\n") + end + end + + if v ≤ MInf + status = "unbounded" + if printing + print("\n") + end + break + end + + # compute new point - - - - - - - - - - - - - - - - - - - - - - - - - - + + # possibly plot the trajectory + if n == 2 && Plotf == 1 + PXY = hcat(PXY, hcat(x, lastx)) + end + + x = lastx + + # update gradient - - - - - - - - - - - - - - - - - - - - - - - - - - - + + g = lastg + ng = norm(g) + + # iterate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if Interactive + readline() + end + end + + if plotatend + if Plotf ≥ 2 + plot!(plt, gap) + elseif Plotf == 1 && n == 2 + plot!(plt, PXY[1, :], PXY[2, :]) + end + display(plt) + end + + # end of main loop- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + return (x, status) +end diff --git a/11-09/SDG.m b/11-09/SDG.m new file mode 100644 index 0000000..8e1d836 --- /dev/null +++ b/11-09/SDG.m @@ -0,0 +1,602 @@ +function [ x , status ] = SDG( f , varargin ) + +%function [ x , status ] = SDG( f , x , astart , eps , MaxFeval , m1 , ... +% m2 , tau , sfgrd , MInf , mina ) +% +% Apply the classical Steepest Descent algorithm for the minimization of +% the provided function f, which must have the following interface: +% +% [ v , g ] = f( x ) +% +% Input: +% +% - x is either a [ n x 1 ] real (column) vector denoting the input of +% f(), or [] (empty). +% +% Output: +% +% - v (real, scalar): if x == [] this is the best known lower bound on +% the unconstrained global optimum of f(); it can be -Inf if either f() +% is not bounded below, or no such information is available. If x ~= [] +% then v = f( x ). +% +% - g (real, [ n x 1 ] real vector): this also depends on x. if x == [] +% this is the standard starting point from which the algorithm should +% start, otherwise it is the gradient of f() at x (or a subgradient if +% f() is not differentiable at x, which it should not be if you are +% applying the gradient method to it). +% +% The other [optional] input parameters are: +% +% - x (either [ n x 1 ] real vector or [], default []): starting point. +% If x == [], the default starting point provided by f() is used. +% +% - astart (real scalar, optional, default value 1): if it is > 0, then it +% is used as the starting value of alpha in the line search, be it the +% Armijo-Wolfe or the Backtracking one. Otherwise, it is taken to mean +% that no line search is to be performed, i.e., a fixed step approach +% has to be used with step = - astart (hence, astart == 0 is an invald +% setting in either case). +% +% - eps (real scalar, optional, default value 1e-6): the accuracy in the +% stopping criterion: the algorithm is stopped when the norm of the +% gradient is less than or equal to eps. If a negative value is provided, +% this is used in a *relative* stopping criterion: the algorithm is +% stopped when the norm of the gradient is less than or equal to +% (- eps) * || norm of the first gradient ||. +% +% - MaxFeval (integer scalar, optional, default value 1000): the maximum +% number of function evaluations (hence, iterations will be not more than +% MaxFeval because at each iteration at least a function evaluation is +% performed, possibly more due to the line search). +% +% - m1 (real scalar, optional, must be in ( 0 , 1 ), default value 1e-3): +% parameter of the Armijo condition (sufficient decrease) in the line +% search +% +% - m2 (real scalar, optional, default value 0.9): typically the parameter +% of the Wolfe condition (sufficient derivative increase) in the line +% search. It should to be in ( 0 , 1 ); if not, it is taken to mean that +% the simpler Backtracking line search should be used instead +% +% - tau (real scalar, optional, default value 0.9): scaling parameter for +% the line search. In the Armijo-Wolfe line search it is used in the +% first phase to identify a point where the Armijo condition is not +% satisfied or the derivative is positive by divding the current +% value (starting with astart, see above) by tau (which is < 1, hence it +% is increased). In the Backtracking line search, each time the step is +% multiplied by tau (hence it is decreased). +% +% - sfgrd (real scalar, optional, default value 0.01): safeguard parameter +% for the line search. to avoid numerical problems that can occur with +% the quadratic interpolation if the derivative at one endpoint is too +% large w.r.t. the one at the other (which leads to choosing a point +% extremely near to the other endpoint), a *safeguarded* version of +% interpolation is used whereby the new point is chosen in the interval +% [ as * ( 1 + sfgrd ) , am * ( 1 - sfgrd ) ], being [ as , am ] the +% current interval, whatever quadratic interpolation says. If you +% experiemce problems with the line search taking too many iterations to +% converge at "nasty" points, try to increase this +% +% - MInf (real scalar, optional, default value -Inf): if the algorithm +% determines a value for f() <= MInf this is taken as an indication that +% the problem is unbounded below and computation is stopped +% (a "finite -Inf"). +% +% - mina (real scalar, optional, default value 1e-16): if the algorithm +% determines a stepsize value <= mina, this is taken as an indication +% that something has gone wrong (the gradient is not a direction of +% descent, so maybe the function is not differentiable) and computation +% is stopped. It is legal to take mina = 0, thereby in fact skipping this +% test. +% +% Output: +% +% - x ([ n x 1 ] real column vector): the best solution found so far +% +% - status (string): a string describing the status of the algorithm at +% termination +% +% = 'optimal': the algorithm terminated having proven that x is a(n +% approximately) optimal solution, i.e., the norm of the gradient at x +% is less than the required threshold +% +% = 'unbounded': the algorithm has determined an extrenely large negative +% value for f() that is taken as an indication that the problem is +% unbounded below (a "finite -Inf", see MInf above) +% +% = 'stopped': the algorithm terminated having exhausted the maximum +% number of iterations: x is the bast solution found so far, but not +% necessarily the optimal one +% +% = 'error': the algorithm found a numerical error that prevents it from +% continuing optimization (see mina above) +% +%{ + ======================================= + Author: Antonio Frangioni + Date: 27-04-23 + Version 1.30 + Copyright Antonio Frangioni + ======================================= +%} + +Plotf = 1; +% 0 = nothing is plotted +% 1 = the level sets of f and the trajectory are plotted (when n = 2) +% 2 = the function value / gap are plotted, iteration-wise +% 3 = the function value / gap are plotted, function-evaluation-wise + +Interactive = true; % if we pause at every iteration + +if Plotf > 1 + if Plotf == 2 + MaxIter = 200; % expected number of iterations for the gap plot + else + MaxIter = 1000; % expected number of iterations for the gap plot + end + gap = []; +end + +% reading and checking input- - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +if ~ isa( f , 'function_handle' ) + error( 'f not a function' ); +end + +if isempty( varargin ) || isempty( varargin{ 1 } ) + [ fStar , x ] = f( [] ); +else + x = varargin{ 1 }; + if ~ isreal( x ) + error( 'x not a real vector' ); + end + + if size( x , 2 ) ~= 1 + error( 'x is not a (column) vector' ); + end + + fStar = f( [] ); +end + +n = size( x , 1 ); + +if length( varargin ) > 1 + astart = varargin{ 2 }; + if ~ isscalar( astart ) + error( 'astart is not a real scalar' ); + end + if astart == 0 + error( 'astart must be != 0' ); + end +else + astart = 1; +end + +if length( varargin ) > 2 + eps = varargin{ 3 }; + if ~ isreal( eps ) || ~ isscalar( eps ) + error( 'eps is not a real scalar' ); + end +else + eps = 1e-6; +end + +if length( varargin ) > 3 + MaxFeval = round( varargin{ 4 } ); + if ~ isscalar( MaxFeval ) + error( 'MaxFeval is not an integer scalar' ); + end +else + MaxFeval = 1000; +end + +if length( varargin ) > 4 + m1 = varargin{ 5 }; + if ~ isscalar( m1 ) + error( 'm1 is not a real scalar' ); + end + if m1 <= 0 || m1 >= 1 + error( 'm1 is not in ( 0 , 1 )' ); + end +else + m1 = 1e-3; +end + +if length( varargin ) > 5 + m2 = varargin{ 6 }; + if ~ isscalar( m1 ) + error( 'm2 is not a real scalar' ); + end +else + m2 = 0.9; +end + +AWLS = ( m2 > 0 && m2 < 1 ); + +if length( varargin ) > 6 + tau = varargin{ 7 }; + if ~ isscalar( tau ) + error( 'tau is not a real scalar' ); + end + if tau <= 0 || tau >= 1 + error( 'tau is not in ( 0 , 1 )' ); + end +else + tau = 0.9; +end + +if length( varargin ) > 7 + sfgrd = varargin{ 8 }; + if ~ isscalar( sfgrd ) + error( 'sfgrd is not a real scalar' ); + end + if sfgrd <= 0 || sfgrd >= 1 + error( 'sfgrd is not in ( 0 , 1 )' ); + end +else + sfgrd = 0.01; +end + +if length( varargin ) > 8 + MInf = varargin{ 9 }; + if ~ isscalar( MInf ) + error( 'MInf is not a real scalar' ); + end +else + MInf = - Inf; +end + +if length( varargin ) > 9 + mina = varargin{ 10 }; + if ~ isscalar( mina ) + error( 'mina is not a real scalar' ); + end + if mina < 0 + error( 'mina is < 0' ); + end +else + mina = 1e-16; +end + +if Plotf > 1 + xlim( [ 0 MaxIter ] ); + ax = gca; + ax.FontSize = 16; + ax.Position = [ 0.03 0.07 0.95 0.92 ]; + ax.Toolbar.Visible = 'off'; +end + +% "global" variables- - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +lastx = zeros( n , 1 ); % last point visited in the line search +lastg = zeros( n , 1 ); % gradient of lastx +feval = 1; % f() evaluations count ("common" with LSs) + +% initializations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +fprintf( 'Gradient method\n'); +if fStar > - Inf + fprintf( 'feval\trel gap\t\t|| g(x) ||\trate\t'); + prevv = Inf; +else + fprintf( 'feval\tf(x)\t\t\t|| g(x) ||'); +end +if astart > 0 + fprintf( '\tls feval\ta*' ); +end +fprintf( '\n\n' ); + +% compute first f-value and gradient in x^0 - - - - - - - - - - - - - - - - + +g = 0; +v = f2phi( 0 ); +g = lastg; + +% compute norm of the (first) gradient- - - - - - - - - - - - - - - - - - - + +ng = norm( g ); +if eps < 0 + ng0 = - ng; % norm of first subgradient: why is there a "-"? ;-) +else + ng0 = 1; % un-scaled stopping criterion +end + +% main loop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +while true + + % output statistics & plot gap/f-values - - - - - - - - - - - - - - - - + + if fStar > - Inf + gapk = ( v - fStar ) / max( [ abs( fStar ) 1 ] ); + + fprintf( '%4d\t%1.4e\t%1.4e' , feval , gapk , ng ); + if prevv < Inf + fprintf( '\t%1.4e' , ( v - fStar ) / ( prevv - fStar ) ); + else + fprintf( ' \t ' ); + end + prevv = v; + + if Plotf > 1 + if Plotf >= 2 + gap( end + 1 ) = gapk; + end + semilogy( gap , 'Color' , 'k' , 'LineWidth' , 2 ); + if Plotf == 2 + ylim( [ 1e-15 1e+1 ] ); + else + ylim( [ 1e-15 1e+4 ] ); + end + %drawnow; + end + else + fprintf( '%4d\t%1.8e\t\t%1.4e' , feval , v , ng ); + + if Plotf > 1 + if Plotf >= 2 + gap( end + 1 ) = v; + end + plot( gap , 'Color' , 'k' , 'LineWidth' , 2 ); + %drawnow; + end + end + + % stopping criteria - - - - - - - - - - - - - - - - - - - - - - - - - - + + if ng <= eps * ng0 + status = 'optimal'; + fprintf( '\n' ); + break; + end + + if feval > MaxFeval + status = 'stopped'; + fprintf( '\n' ); + break; + end + + % compute step size - - - - - - - - - - - - - - - - - - - - - - - - - - + + phip0 = - ng * ng; + + if astart < 0 + % fixed-step approach + + lastx = x + astart * g; + [ v , lastg ] = f( lastx ); + feval = feval + 1; + else + % line-search approach, either Armijo-Wolfe or Backtracking + + if AWLS + [ a , v ] = ArmijoWolfeLS( v , phip0 , astart , m1 , m2 , tau ); + else + [ a , v ] = BacktrackingLS( v , phip0 , astart , m1 , tau ); + end + end + + % output statistics - - - - - - - - - - - - - - - - - - - - - - - - - - + + if astart > 0 + fprintf( '\t%1.4e\n' , a ); + + if a <= mina + status = 'error'; + fprintf( '\n' ); + break; + end + else + fprintf( '\n' ); + end + + + if v <= MInf + status = 'unbounded'; + fprintf( '\n' ); + break; + end + + % compute new point - - - - - - - - - - - - - - - - - - - - - - - - - - + + % possibly plot the trajectory + if n == 2 && Plotf == 1 + PXY = [ x , lastx ]; + line( 'XData' , PXY( 1 , : ) , 'YData' , PXY( 2 , : ) , ... + 'LineStyle' , '-' , 'LineWidth' , 2 , 'Marker' , 'o' , ... + 'Color' , [ 0 0 0 ] ); + end + + x = lastx; + + % update gradient - - - - - - - - - - - - - - - - - - - - - - - - - - - + + g = lastg; + ng = norm( g ); + + % iterate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if Interactive + pause; + end +end + +% end of main loop- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% inner functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ phi , varargout ] = f2phi( alpha ) +% +% computes and returns the value of the tomography at alpha +% +% phi( alpha ) = f( x - alpha * g ) +% +% if Plotf > 2 saves the data in gap() for plotting +% +% if the second output parameter is required, put there the derivative +% of the tomography in alpha +% +% phi'( alpha ) = < \nabla f( x - alpha * g ) , - g > +% +% saves the point in lastx, the gradient in lastg and increases feval + + lastx = x - alpha * g; + [ phi , lastg ] = f( lastx ); + + if Plotf > 2 + if fStar > - Inf + gap( end + 1 ) = ( phi - fStar ) / max( [ abs( fStar ) 1 ] ); + else + gap( end + 1 ) = phi; + end + end + + if nargout > 1 + varargout{ 1 } = - g' * lastg; + end + + feval = feval + 1; +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ a , phia ] = ArmijoWolfeLS( phi0 , phip0 , as , m1 , m2 , tau ) + +% performs an Armijo-Wolfe Line Search. +% +% Inputs: +% +% - phi0 = phi( 0 ) +% +% - phip0 = phi'( 0 ) (< 0) +% +% - as (> 0) is the first value to be tested: if the Armijo condition +% +% phi( as ) <= phi0 + m1 * as * phip0 +% +% is satisfied but the Wolfe condition is not, which means that the +% derivative in as is still negative, which means that longer steps +% might be possible), then as is divided by tau < 1 (hence it is +% increased) until this does not happen any longer +% +% - m1 (> 0 and < 1, typically small, like 0.01) is the parameter of +% the Armijo condition +% +% - m2 (> m1 > 0, typically large, like 0.9) is the parameter of the +% Wolfe condition +% +% - tau (> 0 and < 1) is the increasing coefficient for the first phase +% (extrapolation) +% +% Outputs: +% +% - a is the "optimal" step +% +% - phia = phi( a ) (the "optimal" f-value) + +lsiter = 1; % count iterations of first phase +while feval <= MaxFeval + [ phia , phips ] = f2phi( as ); % compute phi( a ) and phi'( a ) + + if phia > phi0 + m1 * as * phip0 % Armijo not satisfied + break; + end + + if phips >= m2 * phip0 % Wolfe satisfied + fprintf( ' %2d ' , lsiter ); + a = as; + return; % Armijo + Wolfe satisfied, done + end + if phips >= 0 % derivative is positive, break + break; + end + as = as / tau; + lsiter = lsiter + 1; +end + +fprintf( ' %2d ' , lsiter ); +lsiter = 1; % count iterations of second phase + +am = 0; +a = as; +phipm = phip0; +while ( feval <= MaxFeval ) && ( ( as - am ) ) > abs( mina ) && ... + ( abs( phips ) > 1e-12 ) + + if ( phipm < 0 ) && ( phips > 0 ) + % if the derivative in as is positive and that in am is negative, + % then compute the new step by safeguarded quadratic interpolation + a = ( am * phips - as * phipm ) / ( phips - phipm ); + a = max( [ am + ( as - am ) * sfgrd ... + min( [ as - ( as - am ) * sfgrd a ] ) ] ); + else + a = ( as - am ) / 2; % else just use dumb binary search + end + + [ phia , phipa ] = f2phi( a ); % compute phi( a ) and phi'( a ) + + if phia <= phi0 + m1 * as * phip0 % Armijo satisfied + if phipa >= m2 * phip0 % Wolfe satisfied + break; % Armijo + Wolfe satisfied, done + end + + am = a; % Armijo is satisfied but Wolfe is not, i.e., the + phipm = phipa; % derivative is still negative: move the left + % endpoint of the interval to a + else % Armijo not satisfied + as = a; % move the right endpoint of the interval to a + phips = phipa; + end + + lsiter = lsiter + 1; +end + +fprintf( '%2d' , lsiter ); + +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ as , phia ] = BacktrackingLS( phi0 , phip0 , as , m1 , tau ) + +% performs a Backtracking Line Search. +% +% phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0 +% +% as > 0 is the first value to be tested, which is decreased by +% multiplying it by tau < 1 until the Armijo condition with parameter +% m1 is satisfied +% +% returns the optimal step and the optimal f-value + +lsiter = 1; % count ls iterations +while feval <= MaxFeval && as > mina + [ phia , ~ ] = f2phi( as ); + if phia <= phi0 + m1 * as * phip0 % Armijo satisfied + break; % we are done + end + as = as * tau; + lsiter = lsiter + 1; +end + +fprintf( '\t%2d' , lsiter ); + +end + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +end % the end- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/11-09/TestFunctions Matlab/TestFunctions.m b/11-09/TestFunctions Matlab/TestFunctions.m new file mode 100644 index 0000000..2423c94 --- /dev/null +++ b/11-09/TestFunctions Matlab/TestFunctions.m @@ -0,0 +1,415 @@ +function TF = TestFunctions() + +%function TF = TestFunctions() +% +% Produces a cell array of function handlers, useful to test unconstrained +% optimization algorithms. +% +% Each function in the array has the following interface: +% +% [ v , varargout ] = f( x ) +% +% Input: +% +% - x is either a [ n x 1 ] real (column) vector denoting the input of +% f(), or [] (empty). +% +% Output: +% +% - v (real, scalar): if x == [] this is the best known lower bound on +% the unconstrained global optimum of f(); it can be -Inf if either f() +% is not bounded below, or no such information is available. If x ~= [] +% then v = f(x). +% +% - g (real, [ n x 1 ] real vector) is the first optional argument. This +% also depends on x. if x == [] this is the standard starting point of an +% optimization algorithm, otherwise it is the gradient of f() at x, or a +% subgradient if f() is not differentiable at x. +% +% - H (real, [ n x n ] real matrix) is the first optional argument. This +% must only be specified if x ~= [], and it is the Hessian of f() at x. +% If no such information is available, the function throws error. +% +% The current list of functions is the following: +% +% 1 Standard 2x2 PSD quadratic function with nicely conditioned Hessian. +% +% 2 Standard 2x2 PSD quadratic function with less nicely conditioned +% Hessian. +% +% 3 Standard 2x2 PSD quadratic function with Hessian having one zero +% eigenvalue. +% +% 4 Standard 2x2 quadratic function with indefinite Hessian (one positive +% and one negative eigenvalue) +% +% 5 Standard 2x2 quadratic function with "very elongated" Hessian (a +% very small positive minimum eigenvalue, the other much larger) +% +% 6 the 2-dim Rosenbrock function +% +% 7 the "six-hump camel" function +% +% 8 the Ackley function +% +% 9 a 2-dim nondifferentiable function coming from Lasso regularization +% +% 10 a 76-dim (nonconvex, differentiable) function coming from a fitting +% problem with ( X , y ) both [ 288 , 1 ] (i.e., a fitting with only +% one feature) using a "rough" NN with 1 input, 1 output, 3 hidden +% layers of 5 nodes each, and tanh activation function +% +% 11 same as 10 plus a 1e-4 || x ||^2 / 2 ridge stabilising term +% +%{ + ======================================= + Author: Antonio Frangioni + Date: 08-11-18 + Version 1.01 + Copyright Antonio Frangioni + ======================================= +%} + +TF = cell( 10 , 1 ); +TF{ 1 } = @(x) genericquad( [ 6 -2 ; -2 6 ] , [ 10 ; 5 ] , x ); +% eigenvalues: 4, 8 +TF{ 2 } = @(x) genericquad( [ 5 -3 ; -3 5 ] , [ 10 ; 5 ] , x ); +% eigenvalues: 2, 8 +TF{ 3 } = @(x) genericquad( [ 4 -4 ; -4 4 ] , [ 10 ; 5 ] , x ); +% eigenvalues: 0, 8 +TF{ 4 } = @(x) genericquad( [ 3 -5 ; -5 3 ] , [ 10 ; 5 ] , x ); +% eigenvalues: -2, 8 +TF{ 5 } = @(x) genericquad( [ 101 -99 ; -99 101 ] , [ 10 ; 5 ] , x ); +% eigenvalues: 2, 200 +% HBG: alpha = 0.0165 , beta = 0.678 +TF{ 6 } = @rosenbrock; +TF{ 7 } = @sixhumpcamel; +TF{ 8 } = @ackley; +TF{ 9 } = @lasso; +TF{ 10 } = @myNN; +TF{ 11 } = @myNN2; + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = genericquad( Q , q , x ) + % generic quadratic function f(x) = x' * Q * x / 2 + q' * x + +if isempty( x ) % informative call + if min( eig( Q ) ) > 1e-14 + xStar = Q \ -q; + v = 0.5 * xStar' * Q * xStar + q' * xStar; + else + v = - Inf; + end + if nargout > 1 + varargout{ 1 } = [ 0 ; 0 ]; + end +else + if ~ isequal( size( x ) , [ 2 1 ] ) + error( 'genericquad: x is of wrong size' ); + end + v = 0.5 * x' * Q * x + q' * x; % f(x) + if nargout > 1 + varargout{ 1 } = Q * x + q; % \nabla f(x) + if nargout > 2 + varargout{ 2 } = Q; % \nabla^2 f(x) + end + end +end +end % genericquad + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = rosenbrock( x ) +% rosenbrock's valley-shaped function +% syms x y +% f = @(x, y) 100 * ( y - x^2 )^2 + ( x - 1 )^2 +% +% diff( f , x ) +% 2 * x - 400 * x * ( - x^2 + y ) - 2 +% +% diff( f , y ) +% - 200 * x^2 + 200 * y +% +% diff( f , x , 2 ) +% 1200 * x^2 - 400 * y + 2 +% +% diff( f , y , 2 ) +% 200 +% +% diff( f , x , y ) +% -400 * x + +if isempty( x ) % informative call + v = 0; + if nargout > 1 + varargout{ 1 } = [ -1 ; 1 ]; + end +else + v = 100 * ( x( 2 ) - x( 1 )^2 )^2 + ( x( 1 ) - 1 )^2; % f(x) + if nargout > 1 + g = zeros( 2 , 1 ); + g( 1 ) = 2 * x( 1 ) - 400* x( 1 ) * ( x( 2 ) - x( 1 )^2 ) - 2; + g( 2 ) = - 200 * x( 1 )^2 + 200 * x( 2 ); + + varargout{ 1 } = g; % \nabla f(x) + if nargout > 2 + H = zeros( 2 , 2 ); + H( 1 , 1 ) = 1200 * x( 1 )^2 - 400 * x( 2 ) + 2; + H( 2 , 2 ) = 200; + H( 2 , 1 ) = -400 * x( 1 ); + H( 1 , 2 ) = H( 2 , 1 ); + varargout{ 2 } = H; % \nabla^2 f(x) + end + end +end +end % rosenbrock + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = sixhumpcamel( x ) +% six-hump-camel valley-shaped function +% syms x y +% f = @(x, y) ( 4 - 2.1 * x^2 + x^4 / 3 ) * x^2 + x * y + 4 * ( y^2 - 1 ) * +% y^2 +% +% diff( f , x ) +% 2 * x^5 - ( 42 * x^3 ) / 5 + 8 * x + y +% +% diff( f , y ) +% 16 * y^3 - 8 * y + x +% +% diff( f , x , 2 ) +% 10 * x^4 - ( 126 * x^2 ) / 5 + 8 +% +% diff( f , y , 2 ) +% 48 * y^2 - 8 +% +% diff( f , x , y ) +% 1 + +if isempty( x ) % informative call + v = -1.03162845349; + if nargout > 1 + varargout{ 1 } = [ 0 ; 0 ]; + end +else + v = ( 4 - 2.1 * x( 1 )^2 + x( 1 )^4 / 3 ) * x( 1 )^2 + ... + x( 1 ) * x( 2 ) + 4 * ( x( 2 )^2 - 1 ) * x( 2 )^2; % f(x) + if nargout > 1 + g = zeros( 2 , 1 ); + g( 1 ) = 2 * x( 1 )^5 - ( 42 * x( 1 )^3 ) / 5 + 8 * x( 1 ) + x( 2 ); + g( 2 ) = 16 * x( 2 )^3 - 8 * x( 2 ) + x( 1 ); + + varargout{ 1 } = g; % \nabla f(x) + if nargout > 2 + H = zeros( 2 , 2 ); + H( 1 , 1 ) = 10 * x( 1 )^4 - ( 126 * x( 1 )^2 ) / 5 + 8; + H( 2 , 2 ) = 48 * x( 2 )^2 - 8; + H( 2 , 1 ) = 1; + H( 1 , 2 ) = H( 2 , 1 ); + varargout{ 2 } = H; % \nabla^2 f(x) + end + end +end +end % sixhumpcamel + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = ackley( xx ) + +% syms x y +% f = @(x, y) - 20 * exp( - 0.2 * sqrt( ( x^2 + y^2 ) / 2 ) ) ... +% - exp( ( cos( 2 * pi * x ) + cos( 2 * pi * y ) ) / 2 ) ... +% + 20 + exp(1) +% + +ManuallyComputedfGH = 0; + +if isempty( xx ) % informative call + v = 0; + if nargout > 1 + varargout{ 1 } = [ 2 ; 2 ]; + end +else + if ~ isequal( size( xx ) , [ 2 1 ] ) + error( 'ackley: x is of wrong size' ); + end + + if ManuallyComputedfGH + +% diff( f , x ) +% pi*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x) + +% (2*x*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) +% +% diff( f , y ) +% pi*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*y) + +% (2*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) +% +% diff( f , x , 2 ) +% +% (2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + +% 2*pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*cos(2*pi*x) - +% (x^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - +% (x^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - +% pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x)^2 +% +% diff( f , y , 2 ) +% (2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + +% 2*pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*cos(2*pi*y) - +% (y^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - +% (y^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - +% pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*y)^2 +% +% diff( f , x , y) +% - (x*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - +% (x*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - +% pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x)*sin(2*pi*y) + + x = xx( 1 ); + y = xx( 2 ); + sqn2 = ( x^2 + y^2 ) / 2; + cosx = cos( 2 * pi * x ); + cosy = cos( 2 * pi * y ); + comp1 = exp( - (sqn2)^(1/2) / 5 ); + comp2 = exp( ( cosx + cosy ) / 2 ); + + v = - 20 * comp1 - comp2 + 20 + exp( 1 ); + + if nargout > 1 + sinx = sin( 2 * pi * x ); + siny = sin( 2 * pi * y ); + + g = zeros( 2 , 1 ); + g( 1 ) = pi * comp2 * sinx + 2 * x * comp1 / (sqn2)^(1/2); + + g( 2 ) = pi * comp2 * siny + 2 * y * comp1 / (sqn2)^(1/2); + + varargout{ 1 } = g; % \nabla f(x) + if nargout > 2 + H = zeros( 2 , 2 ); + + H( 1 , 1 ) = (2*comp1)/(sqn2)^(1/2) + 2*pi^2*comp2*cosx ... + - (x^2*comp1)/(5*sqn2) - (x^2*comp1)/(sqn2)^(3/2)... + - pi^2*comp2*sinx^2; + + H( 2 , 2 ) = (2*comp1)/(sqn2)^(1/2) + 2*pi^2*comp2*cosy ... + - (y^2*comp1)/(5*sqn2) - (y^2*comp1)/(sqn2)^(3/2)... + - pi^2*comp2*siny^2; + + H( 1 , 2 ) = - (x*y*comp1)/(5*(sqn2)) ... + - (x*y*comp1)/(sqn2)^(3/2) ... + - pi^2*comp2*sinx*siny; + + H( 2 , 1 ) = H( 1 , 2 ); + varargout{ 2 } = H; % \nabla^2 f(x) + end + end + else + if nargout > 2 + [ H , g , v ] = ackley_Hes( xx ); + varargout{ 2 } = H; + varargout{ 1 } = g'; + elseif nargout > 1 + [ g , v ] = ackley_Grd( xx ); + varargout{ 1 } = g'; + else + v = - 20 * exp( - ( ( xx( 1 )^2 + xx( 2 )^2 ) / 2 )^(1/2) / 5 )... + - exp( cos( 2 * pi * xx( 1 ) ) / 2 + ... + cos( 2 * pi * xx( 2 ) ) / 2 ) + 20 + exp( 1 ); + end + end +end +end % ackley + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = lasso( x ) +% nondifferentiable lasso example: +% +% f( x , y ) = || 3 * x + 2 * y - 2 ||_2^2 + 10 ( | x | + | y | ) + +if isempty( x ) % informative call + v = ( 2 - 1/3 )^2 + 10/9; % optimal solution [ 1/9 , 0 ] + if nargout > 1 + varargout{ 1 } = [ 0 ; 0 ]; + end +else + v = ( 3 * x( 1 ) + 2 * x( 2 ) - 2 )^2 + ... + 10 * ( abs( x( 1 ) ) + abs( x( 2 ) ) ); % f(x) + if nargout > 1 + g = zeros( 2 , 1 ); + g( 1 ) = 18 * x( 1 ) + 12 * x( 2 ) - 12 + 10 * sign( x( 1 ) ); + g( 2 ) = 12 * x( 1 ) + 8 * x( 2 ) - 8 + 10 * sign( x( 2 ) ); + + varargout{ 1 } = g; % \nabla f(x) + if nargout > 2 + error( 'lasso: Hessian not available' ); + end + end +end +end % lasso + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = myNN( x ) +% 1 x 5 x 5 x 5 x 1 = 76 w NN for solving a 1D fitting problem + +if isempty( x ) % informative call + v = - Inf; % optimal value unknown (although 0 may perhaps be good) + if nargout > 1 + % Xavier initialization: uniform random in [ - A , A ] with + % A = \sqrt{6} / \sqrt{n + m}, with n and m the input and output + % layers. in our case n + m is either 6 or 10, so we take A = 1 + % + % note that starting point is random, so each run will be different + % (unless an explicit starting point is provided); if stability is + % neeed, the seed of the generator has to be set externally + varargout{ 1 } = 2 * rand( 76 , 1 ) - 1; + end +else + v = testNN( x ); % f(x) + if nargout > 1 + varargout{ 1 } = testNN_Jac( x )'; % \nabla f( x ) + if nargout > 2 + varargout{ 2 } = testNN_Hes( x )'; % \nabla^2 f( x ) + end + end +end +end % myNN + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function [ v , varargout ] = myNN2( x ) +% 1 x 5 x 5 x 5 x 1 = 76 w NN for solving a 1D fitting problem +% plus ridge stabilization \lambda || x ||^2 / 2 + +lambda = 1e+2; + +if isempty( x ) % informative call + v = - Inf; % optimal value unknown (although 0 may perhaps be good) + if nargout > 1 + % Xavier initialization: uniform random in [ - A , A ] with + % A = \sqrt{6} / \sqrt{n + m}, with n and m the input and output + % layers. in our case n + m is either 6 or 10, so we take A = 1 + % + % note that starting point is random, so each run will be different + % (unless an explicit starting point is provided); if stability is + % neeed, the seed of the generator has to be set externally + varargout{ 1 } = 2 * rand( 76 , 1 ) - 1; + end +else + v = testNN( x ) + lambda * x' * x / 2; % f(x) + if nargout > 1 + varargout{ 1 } = testNN_Jac( x )' + lambda * x; % \nabla f( x ) + if nargout > 2 + varargout{ 2 } = testNN_Hes( x )' + lambda * eye( 76 ); + % \nabla^2 f( x ) + end + end +end +end % myNN2 + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/roughNN.m b/11-09/TestFunctions Matlab/roughNN.m new file mode 100644 index 0000000..a7c0ac1 --- /dev/null +++ b/11-09/TestFunctions Matlab/roughNN.m @@ -0,0 +1,42 @@ +function v = roughNN( w , x ) +% +% v = roughNN( w , x ) +% +% returns the falue of the function v = f( x ) as currently estimated by +% a small NN with 1 input, 1 output, 3 hidden layers of 5 nodes each, and +% tanh activation function. +% +% Input: +% +% - w is the [ 76 x 1 ] real vector containing the weights of the NN, +% i.e., w is made as follows: +% [ 1 .. 5 ] are the [ 5 x 1 ] weigths of the first layer +% [ 6 .. 10 ] are the [ 5 x 1 ] biases of the first layer +% [ 11 .. 35 ] are the [ 5 x 5 ] weigths of the second layer +% [ 36 .. 40 ] are the [ 5 x 1 ] biases of the second layer +% [ 41 .. 65 ] are the [ 5 x 5 ] weigths of the third layer +% [ 66 .. 70 ] are the [ 5 x 1 ] biases of the third layer +% [ 71 .. 75 ] are the [ 5 x 1 ] weigths of the fourth (output) layer +% [ 76 ] is the [ 1 x 1 ] bias of the fourth (output) layer +% +% - x is the real scalar containing the input of f() +% +% Output: +% +% - v (real, scalar): v = f( x ) as estimated by the NN with weights w +% +%{ +% ======================================= +% Author: Antonio Frangioni +% Date: 28-08-22 +% Version 1.00 +% Copyright Antonio Frangioni +% ======================================= +%} + +g = tanh( ( ones( 5 , 1 ) * x ) .* w( 1 : 5 ) + w( 6 : 10 ) ); +g = tanh( reshape( w( 11 : 35 ) , [ 5 5 ] ) * g + w( 36 : 40 ) ); +g = tanh( reshape( w( 41 : 65 ) , [ 5 5 ] ) * g + w( 66 : 70 ) ); +v = g' * w( 71 : 75 ) + w( 76 ); + +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN.m b/11-09/TestFunctions Matlab/testNN.m new file mode 100644 index 0000000..45e4e42 --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN.m @@ -0,0 +1,627 @@ +function v = testNN( w ) +% +% v = testNN( w ) +% +% returns the falue of the empirical error of the NN (or, in fact, +% whatever function is encoded in 'roughNN()') with the weights contained +% in w. +% +% The empirical error is estimated over a 288-strong input/output pair +% ( X , y ), with X containing only one feature, that is hard-coded into +% the function so that its gradient can be easily computed by ADiGator. +% +% Input: +% +% - w is the real vector containing the weights of the NN, see roughNN +% for details +% +% Output: +% +% - the MSE of the error done by roughNN() on the given test set +% +%{ +% ======================================= +% Author: Antonio Frangioni +% Date: 28-08-22 +% Version 1.00 +% Copyright Antonio Frangioni +% ======================================= +%} + +N = 288; % size + +% inputs +X = [ +0.0000000000000000 +0.0034843205574913 +0.0069686411149826 +0.0104529616724739 +0.0139372822299652 +0.0174216027874564 +0.0209059233449477 +0.0243902439024390 +0.0278745644599303 +0.0313588850174216 +0.0348432055749129 +0.0383275261324042 +0.0418118466898955 +0.0452961672473868 +0.0487804878048781 +0.0522648083623693 +0.0557491289198606 +0.0592334494773519 +0.0627177700348432 +0.0662020905923345 +0.0696864111498258 +0.0731707317073171 +0.0766550522648084 +0.0801393728222996 +0.0836236933797909 +0.0871080139372822 +0.0905923344947735 +0.0940766550522648 +0.0975609756097561 +0.1010452961672474 +0.1045296167247387 +0.1080139372822300 +0.1114982578397213 +0.1149825783972125 +0.1184668989547038 +0.1219512195121951 +0.1254355400696864 +0.1289198606271777 +0.1324041811846690 +0.1358885017421603 +0.1393728222996516 +0.1428571428571428 +0.1463414634146341 +0.1498257839721254 +0.1533101045296167 +0.1567944250871080 +0.1602787456445993 +0.1637630662020906 +0.1672473867595819 +0.1707317073170732 +0.1742160278745645 +0.1777003484320558 +0.1811846689895470 +0.1846689895470383 +0.1881533101045296 +0.1916376306620209 +0.1951219512195122 +0.1986062717770035 +0.2020905923344948 +0.2055749128919861 +0.2090592334494774 +0.2125435540069686 +0.2160278745644599 +0.2195121951219512 +0.2229965156794425 +0.2264808362369338 +0.2299651567944251 +0.2334494773519164 +0.2369337979094077 +0.2404181184668990 +0.2439024390243902 +0.2473867595818815 +0.2508710801393728 +0.2543554006968641 +0.2578397212543554 +0.2613240418118467 +0.2648083623693380 +0.2682926829268293 +0.2717770034843205 +0.2752613240418119 +0.2787456445993031 +0.2822299651567944 +0.2857142857142857 +0.2891986062717770 +0.2926829268292683 +0.2961672473867596 +0.2996515679442509 +0.3031358885017422 +0.3066202090592334 +0.3101045296167247 +0.3135888501742160 +0.3170731707317073 +0.3205574912891986 +0.3240418118466899 +0.3275261324041812 +0.3310104529616725 +0.3344947735191638 +0.3379790940766551 +0.3414634146341464 +0.3449477351916376 +0.3484320557491289 +0.3519163763066202 +0.3554006968641115 +0.3588850174216028 +0.3623693379790941 +0.3658536585365854 +0.3693379790940767 +0.3728222996515679 +0.3763066202090593 +0.3797909407665505 +0.3832752613240418 +0.3867595818815331 +0.3902439024390244 +0.3937282229965157 +0.3972125435540070 +0.4006968641114982 +0.4041811846689896 +0.4076655052264808 +0.4111498257839721 +0.4146341463414634 +0.4181184668989547 +0.4216027874564460 +0.4250871080139373 +0.4285714285714285 +0.4320557491289199 +0.4355400696864111 +0.4390243902439024 +0.4425087108013937 +0.4459930313588850 +0.4494773519163763 +0.4529616724738676 +0.4564459930313589 +0.4599303135888502 +0.4634146341463415 +0.4668989547038327 +0.4703832752613241 +0.4738675958188153 +0.4773519163763066 +0.4808362369337979 +0.4843205574912892 +0.4878048780487805 +0.4912891986062718 +0.4947735191637631 +0.4982578397212544 +0.5017421602787456 +0.5052264808362370 +0.5087108013937283 +0.5121951219512195 +0.5156794425087108 +0.5191637630662020 +0.5226480836236933 +0.5261324041811847 +0.5296167247386759 +0.5331010452961673 +0.5365853658536586 +0.5400696864111498 +0.5435540069686411 +0.5470383275261324 +0.5505226480836236 +0.5540069686411150 +0.5574912891986064 +0.5609756097560976 +0.5644599303135889 +0.5679442508710801 +0.5714285714285714 +0.5749128919860627 +0.5783972125435540 +0.5818815331010453 +0.5853658536585367 +0.5888501742160279 +0.5923344947735192 +0.5958188153310104 +0.5993031358885017 +0.6027874564459930 +0.6062717770034843 +0.6097560975609756 +0.6132404181184670 +0.6167247386759582 +0.6202090592334495 +0.6236933797909407 +0.6271777003484320 +0.6306620209059233 +0.6341463414634146 +0.6376306620209059 +0.6411149825783973 +0.6445993031358885 +0.6480836236933798 +0.6515679442508711 +0.6550522648083623 +0.6585365853658536 +0.6620209059233449 +0.6655052264808362 +0.6689895470383276 +0.6724738675958188 +0.6759581881533101 +0.6794425087108014 +0.6829268292682926 +0.6864111498257840 +0.6898954703832753 +0.6933797909407666 +0.6968641114982579 +0.7003484320557491 +0.7038327526132404 +0.7073170731707317 +0.7108013937282229 +0.7142857142857143 +0.7177700348432056 +0.7212543554006969 +0.7247386759581882 +0.7282229965156795 +0.7317073170731707 +0.7351916376306620 +0.7386759581881532 +0.7421602787456446 +0.7456445993031359 +0.7491289198606272 +0.7526132404181185 +0.7560975609756098 +0.7595818815331010 +0.7630662020905923 +0.7665505226480837 +0.7700348432055749 +0.7735191637630662 +0.7770034843205575 +0.7804878048780488 +0.7839721254355401 +0.7874564459930313 +0.7909407665505226 +0.7944250871080140 +0.7979094076655052 +0.8013937282229965 +0.8048780487804879 +0.8083623693379791 +0.8118466898954704 +0.8153310104529616 +0.8188153310104529 +0.8222996515679443 +0.8257839721254355 +0.8292682926829268 +0.8327526132404182 +0.8362369337979094 +0.8397212543554007 +0.8432055749128919 +0.8466898954703833 +0.8501742160278746 +0.8536585365853658 +0.8571428571428572 +0.8606271777003485 +0.8641114982578397 +0.8675958188153310 +0.8710801393728222 +0.8745644599303136 +0.8780487804878049 +0.8815331010452961 +0.8850174216027875 +0.8885017421602788 +0.8919860627177700 +0.8954703832752613 +0.8989547038327526 +0.9024390243902439 +0.9059233449477352 +0.9094076655052264 +0.9128919860627178 +0.9163763066202091 +0.9198606271777003 +0.9233449477351916 +0.9268292682926830 +0.9303135888501742 +0.9337979094076655 +0.9372822299651568 +0.9407665505226481 +0.9442508710801394 +0.9477351916376306 +0.9512195121951219 +0.9547038327526133 +0.9581881533101045 +0.9616724738675958 +0.9651567944250871 +0.9686411149825784 +0.9721254355400697 +0.9756097560975610 +0.9790940766550522 +0.9825783972125436 +0.9860627177700348 +0.9895470383275261 +0.9930313588850174 +0.9965156794425087 +1.0000000000000000 ]; + +% outputs +y = [ +0.096798166000 +0.143459740000 +0.208317990000 +-0.038018393000 +0.148793230000 +0.512799550000 +-0.120798510000 +0.177158750000 +0.083816932000 +0.000756494710 +0.006887211700 +0.213572840000 +0.493783350000 +0.035274935000 +0.243769090000 +0.087417919000 +0.476797600000 +0.271438160000 +0.178877000000 +0.302770820000 +0.219586200000 +0.397548740000 +0.215089090000 +0.086588415000 +0.304056660000 +0.513946170000 +0.113409000000 +0.270068060000 +0.471061630000 +0.046628439000 +0.443157150000 +0.477349380000 +0.411852220000 +0.280063680000 +0.410626170000 +0.442082230000 +0.585090200000 +0.561297160000 +0.426446760000 +0.739395540000 +0.506414480000 +0.409925250000 +0.483992110000 +0.696575460000 +0.615166110000 +0.737349800000 +0.632542540000 +1.013287300000 +0.408451860000 +0.613835270000 +0.681370910000 +0.724988310000 +0.947395900000 +0.779004190000 +0.745667780000 +0.789666080000 +0.908202240000 +0.707755840000 +0.894037990000 +0.606428220000 +0.843615470000 +0.727874550000 +0.784348430000 +0.937189250000 +0.737952220000 +0.769620390000 +0.701166820000 +0.604155740000 +0.924881630000 +1.130475900000 +0.936493470000 +0.935667120000 +0.819976810000 +1.219958800000 +0.949769640000 +1.185254200000 +1.048672000000 +0.957402250000 +1.160938800000 +1.147023700000 +0.983283410000 +1.194051400000 +1.265849000000 +0.987167510000 +0.956395550000 +1.052589900000 +1.041239900000 +1.105649800000 +0.941725790000 +1.082398200000 +1.127045200000 +0.990602660000 +0.980803460000 +0.763155870000 +0.768571290000 +0.718186990000 +0.743430540000 +0.899271220000 +0.672586160000 +1.243876900000 +1.009891400000 +0.580803050000 +0.709665650000 +0.858643730000 +0.609667610000 +0.789520360000 +1.014111700000 +0.817911210000 +0.824534040000 +0.676622590000 +0.735885580000 +0.609022520000 +0.859070820000 +0.729465540000 +0.907844320000 +0.969161960000 +0.938595000000 +0.765435590000 +0.688922170000 +0.574990840000 +0.770659830000 +0.891310740000 +0.690971710000 +0.711048000000 +0.824634750000 +0.857126400000 +0.510549630000 +0.748820900000 +0.744129450000 +0.688191070000 +0.841053850000 +0.648943870000 +0.576231820000 +0.738291460000 +0.762720980000 +0.658108930000 +0.807248650000 +0.457323660000 +0.521077750000 +0.218860160000 +0.755337450000 +0.525976310000 +0.634217410000 +0.821176590000 +0.675074910000 +0.599022390000 +0.535501720000 +0.624415250000 +0.748616920000 +0.428448630000 +0.643341520000 +0.768654000000 +0.435878620000 +0.747073780000 +0.746823840000 +0.509674810000 +0.413964070000 +0.702246380000 +0.756141550000 +0.719368010000 +0.744580020000 +0.450466060000 +0.713008860000 +0.536099090000 +0.536595750000 +0.385158420000 +0.781369420000 +0.640457830000 +0.762680940000 +0.836824400000 +0.437730550000 +0.703038130000 +0.603083350000 +0.740709380000 +0.768477480000 +0.724346000000 +0.477804350000 +0.580883120000 +0.639146320000 +1.073252500000 +0.783713950000 +0.948384040000 +0.663369380000 +0.634232460000 +0.696070360000 +0.526957260000 +0.794798220000 +0.587766610000 +0.408654360000 +0.749043110000 +0.387306230000 +0.350567280000 +0.675537030000 +0.495158740000 +0.507149810000 +0.625867220000 +0.583647850000 +0.630796900000 +0.712643020000 +0.504536230000 +0.504499780000 +0.381836730000 +0.647114640000 +0.814415180000 +0.618741310000 +0.808727320000 +0.824111580000 +0.901249190000 +0.910594790000 +0.668334220000 +0.652467030000 +0.797380800000 +0.699257390000 +1.025428600000 +1.022629700000 +0.837597600000 +0.766407010000 +0.913657810000 +0.744506570000 +0.829397600000 +0.773018020000 +0.872046570000 +1.028215500000 +0.972177970000 +1.033239200000 +0.724398150000 +0.887466840000 +0.710846670000 +0.912868530000 +0.899725750000 +1.039970600000 +1.003988400000 +0.929601600000 +0.747319110000 +0.742110530000 +0.495198080000 +0.724133980000 +0.546209190000 +0.904975290000 +0.886555800000 +0.756973180000 +0.663691170000 +0.725449860000 +0.927661000000 +0.871628610000 +0.583857660000 +0.657822350000 +0.445564610000 +0.654537190000 +0.685853290000 +0.690412010000 +0.306045040000 +0.591718740000 +0.366728870000 +0.420310670000 +0.575582700000 +0.482907520000 +0.394669790000 +0.491601190000 +0.627475460000 +0.270874460000 +0.144405290000 +0.155561360000 +0.171715630000 +0.196642150000 +0.368318080000 +-0.046015957000 +0.287831380000 +0.121822920000 +0.390236930000 +0.084253654000 +0.201575720000 +0.048222309000 +0.075602342000 +0.128340910000 +0.123106810000 +0.069294711000 +0.308367180000 +0.213239800000 +0.401070710000 +0.073746174000 +0.268322470000 +-0.213145400000 +0.191332180000 +0.145485930000 +0.028213679000 +0.183566020000 +0.206160990000 ]; + +% compute MSE of prediction on all ( X( i ) , y( i ) ) + +v = 0; % return value + +for i = 1 : N % for all input / output pairs + + v = v + ( y( i ) - roughNN( w , X( i ) ) )^2; + +end + +v = v / 2; + +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorGrd.m b/11-09/TestFunctions Matlab/testNN_ADiGatorGrd.m new file mode 100644 index 0000000..71bd762 --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_ADiGatorGrd.m @@ -0,0 +1,227 @@ +% This code was generated using ADiGator version 1.4 +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function v = testNN_ADiGatorGrd(w) +global ADiGator_testNN_ADiGatorGrd +if isempty(ADiGator_testNN_ADiGatorGrd); ADiGator_LoadData(); end +Gator1Data = ADiGator_testNN_ADiGatorGrd.testNN_ADiGatorGrd.Gator1Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = testNN( w ) +%User Line: % +%User Line: % returns the falue of the empirical error of the NN (or, in fact, +%User Line: % whatever function is encoded in 'roughNN()') with the weights contained +%User Line: % in w. +%User Line: % +%User Line: % The empirical error is estimated over a 288-strong input/output pair +%User Line: % ( X , y ), with X containing only one feature, that is hard-coded into +%User Line: % the function so that its gradient can be easily computed by ADiGator. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the real vector containing the weights of the NN, see roughNN +%User Line: % for details +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - the MSE of the error done by roughNN() on the given test set +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +N.f = 288; +%User Line: N = 288; +%User Line: % inputs +X.f = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: X = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: % outputs +y.f = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: y = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: % compute MSE of prediction on all ( X( i ) , y( i ) ) +v.f = 0; +%User Line: v = 0; +cadaforvar1.f = 1:N.f; +%User Line: cadaforvar1 = 1 : N; +v.dw = zeros(76,1); +for cadaforcount1 = 1:288 + i.f = cadaforvar1.f(:,cadaforcount1); + %User Line: i = cadaforvar1(:,cadaforcount1); + cadainput2_1.dw = w.dw; cadainput2_1.f = w.f; + %User Line: cadainput2_1 = w; + cadainput2_2.f = X.f(i.f); + %User Line: cadainput2_2 = X( i ); + cadaoutput2_1 = ADiGator_roughNN(cadainput2_1,cadainput2_2); + % Call to function: roughNN + cada1f1 = y.f(i.f); + cada1f2dw = -cadaoutput2_1.dw; + cada1f2 = cada1f1 - cadaoutput2_1.f; + cada1f3dw = 2.*cada1f2.^(2-1).*cada1f2dw; + cada1f3 = cada1f2^2; + cada1td1 = v.dw; + cada1td1 = cada1td1 + cada1f3dw; + v.dw = cada1td1; + v.f = v.f + cada1f3; + %User Line: v = v + ( y( i ) - cadaoutput2_1 )^2; +end +v.dw = v.dw./2; +v.f = v.f/2; +%User Line: v = v / 2; +v.dw_size = 76; +v.dw_location = Gator1Data.Index1; +end +function v = ADiGator_roughNN(w,x) +global ADiGator_testNN_ADiGatorGrd +Gator1Data = ADiGator_testNN_ADiGatorGrd.ADiGator_roughNN.Gator1Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = roughNN( w , x ) +%User Line: % +%User Line: % returns the falue of the function v = f( x ) as currently estimated by +%User Line: % a small NN with 1 input, 1 output, 3 hidden layers of 5 nodes each, and +%User Line: % tanh activation function. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the [ 76 x 1 ] real vector containing the weights of the NN, +%User Line: % i.e., w is made as follows: +%User Line: % [ 1 .. 5 ] are the [ 5 x 1 ] weigths of the first layer +%User Line: % [ 6 .. 10 ] are the [ 5 x 1 ] biases of the first layer +%User Line: % [ 11 .. 35 ] are the [ 5 x 5 ] weigths of the second layer +%User Line: % [ 36 .. 40 ] are the [ 5 x 1 ] biases of the second layer +%User Line: % [ 41 .. 65 ] are the [ 5 x 5 ] weigths of the third layer +%User Line: % [ 66 .. 70 ] are the [ 5 x 1 ] biases of the third layer +%User Line: % [ 71 .. 75 ] are the [ 5 x 1 ] weigths of the fourth (output) layer +%User Line: % [ 76 ] is the [ 1 x 1 ] bias of the fourth (output) layer +%User Line: % +%User Line: % - x is the real scalar containing the input of f() +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - v (real, scalar): v = f( x ) as estimated by the NN with weights w +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +cada1f2 = Gator1Data.Data1*x.f; +cada1f3dw = w.dw(Gator1Data.Index1); +cada1f3 = w.f(Gator1Data.Index9); +cada1f4dw = cada1f2(:).*cada1f3dw; +cada1f4 = cada1f2.*cada1f3; +cada1f5dw = w.dw(Gator1Data.Index2); +cada1f5 = w.f(Gator1Data.Index10); +cada1td1 = zeros(10,1); +cada1td1(Gator1Data.Index11) = cada1f4dw; +cada1td1(Gator1Data.Index12) = cada1td1(Gator1Data.Index12) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index13); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( ( ones( 5 , 1 ) * x ) .* w( 1 : 5 ) + w( 6 : 10 ) ); +cada1f1dw = w.dw(Gator1Data.Index3); +cada1f1 = w.f(Gator1Data.Index14); +cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index15) = cada1f2dw; +cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1(Gator1Data.Index17) = cada1td2(Gator1Data.Index16); +cada1td2 = zeros(5,10); +cada1td2(Gator1Data.Index18) = g.dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index20) = cada1td1(Gator1Data.Index20) + cada1td2(Gator1Data.Index19); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index4); +cada1f5 = w.f(Gator1Data.Index21); +cada1td1 = zeros(80,1); +cada1td1(Gator1Data.Index22) = cada1f4dw; +cada1td1(Gator1Data.Index23) = cada1td1(Gator1Data.Index23) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index24); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 11 : 35 ) , [ 5 5 ] ) * g + w( 36 : 40 ) ); +cada1f1dw = w.dw(Gator1Data.Index5); +cada1f1 = w.f(Gator1Data.Index25); +cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index26) = cada1f2dw; +cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(225,1); +cada1td1(Gator1Data.Index28) = cada1td2(Gator1Data.Index27); +cada1td2 = zeros(5,40); +cada1td2(Gator1Data.Index29) = g.dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index31) = cada1td1(Gator1Data.Index31) + cada1td2(Gator1Data.Index30); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index6); +cada1f5 = w.f(Gator1Data.Index32); +cada1td1 = zeros(230,1); +cada1td1(Gator1Data.Index33) = cada1f4dw; +cada1td1(Gator1Data.Index34) = cada1td1(Gator1Data.Index34) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index35); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 41 : 65 ) , [ 5 5 ] ) * g + w( 66 : 70 ) ); +cada1f1dw = w.dw(Gator1Data.Index7); +cada1f1 = w.f(Gator1Data.Index36); +cada1f2dw = g.dw; +cada1f2 = g.f.'; +cada1f3 = 5; +cada1td2 = sparse(Gator1Data.Index37,Gator1Data.Index38,cada1f2dw,5,70); +cada1td2 = cada1f1.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1(Gator1Data.Index40) = cada1td2(Gator1Data.Index39); +cada1td2 = zeros(5,5); +cada1td2(Gator1Data.Index41) = cada1f1dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index43) = cada1td1(Gator1Data.Index43) + cada1td2(Gator1Data.Index42); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*cada1f1; +cada1f5dw = w.dw(Gator1Data.Index8); +cada1f5 = w.f(76); +cada1td1 = zeros(76,1); +cada1td1(Gator1Data.Index44) = cada1f4dw; +cada1td1(76) = cada1td1(76) + cada1f5dw; +v.dw = cada1td1; +v.f = cada1f4 + cada1f5; +%User Line: v = g' * w( 71 : 75 ) + w( 76 ); +end + + +function ADiGator_LoadData() +global ADiGator_testNN_ADiGatorGrd +ADiGator_testNN_ADiGatorGrd = load('testNN_ADiGatorGrd.mat'); +return +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorGrd.mat b/11-09/TestFunctions Matlab/testNN_ADiGatorGrd.mat new file mode 100644 index 0000000000000000000000000000000000000000..f092430c2e6df44a77b3046163edfd5c0b4676f9 GIT binary patch literal 1541 zcma)(eLT~70LM4`G0n3wTMIuVoLOeg^TT(TT1+eDDP_a9CeJG5X=<0|$V0l&6V8ge z@>ovcJT##^M7k?_@RV9zI@c=n;Hta+zt3Nv*XRA;`@^Jd_olhQRFW0Uq;0q42_m^f zm=(#{$BT)Na`?QtGi){xVfT10XCF5lj)``FJ>vziFE`Yp^X&3SCZ3-Ue&ks%7Y-hq~Cc}wqW zG-jc1`XfVs9cj(Kd1!lGa6sr*Ug$QT?`|6@)#VQ2tNZSE$EK*_G~d>->$4R5^pWt8 zEt#TG`3j8^%!RpQYFnkjWz*S|UxeZ2BBL?q-dPMH@JWEYo-^Dds?1xVoQ4zM={Z`F zSI~)$c&u*yaR~J;17k*Izp=gM$VN=6|2av|c2QfKmIKK%M-!|HXG0E{8C2>PHL211 z)|*`E%6Ch&ofv+4U8om~B408cK&^}p_Zo<{s zLEW#$w2ac*<(!6cHx66rOG!}ive--5>6n7vXv)|1w@uX8vOXq1P8H!(4l=%2)`h-V zZia7kbSPEY3yZ}_g@E!@&$UE^^cbmRPHeJBpQkTMWcc*-i>gG`2dv~WvMQ;XUcwcd zlyIw6+53->#3o`8=K{~M*AD6*wNpXq7Ohv1MoW?nPbgLczyHiekOTC3gHcMNtHgkQ zuBWv>qF05)RCw{e6O^XhD@!$m2fg|g9nRY|VmAHgW>)d=aAXZ4f5$Pp0Rfxly=kdf zcsr}WE-lAw35QQDd;3t+aA4VLUKK`W`?zbc zp)ews-yo-u8|$`}oy$FQ__)f?u86#J262fN`oO6*^@GA8w=ScK&?)W0Z6nqV@qc5o zH{WFKpSk8m-@)8A#7xs>x$%YLnLZcPljI4U;UUFFgIQ&zE*YjWq%gBp?&EWi8$ONI zJmJT>J7RmKA#q-=AD$%NWc*Vu!4cz0R{ayUcDq)7}Jh zO)AP~DU;S|Sk9T$D%d(qu8*5vA!hWMR|{nLlEC}+SCbbNzo&PbNVrdQPVBf#y|Vv} zS}t?I@>0}Gy)(NWI=7{LT)EDt)QS82vW&tTEOqA3wJxe)NkOgQvW6!Xel_hn751?M%MlN-HV zOfR@3$rt+W@I6GYD8!|6WLCQi?liRcQfcN>&z^-TjgW>eG*k?Pcqjk}b)b7ds0Y~r z;Yz3(2nkRU5b8n;KxhC#0BAxY0C1280IMJ=0BfMN0BA#%0IY_>0l-2t0O&)j0MLSp z0Kh}r0nmX)0nmds07S+jYQ;H>lWa)MYoU4Tr4PoDuEvFgJzUqok8IZR5zfTYaPML} PGB5q$8v>%rhJ*bFqHTmF literal 0 HcmV?d00001 diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorHes.m b/11-09/TestFunctions Matlab/testNN_ADiGatorHes.m new file mode 100644 index 0000000..b53580d --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_ADiGatorHes.m @@ -0,0 +1,508 @@ +% This code was generated using ADiGator version 1.4 +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function v = testNN_ADiGatorHes(w) +global ADiGator_testNN_ADiGatorHes +if isempty(ADiGator_testNN_ADiGatorHes); ADiGator_LoadData(); end +Gator1Data = ADiGator_testNN_ADiGatorHes.testNN_ADiGatorHes.Gator1Data; +Gator2Data = ADiGator_testNN_ADiGatorHes.testNN_ADiGatorHes.Gator2Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = testNN( w ) +%User Line: % +%User Line: % returns the falue of the empirical error of the NN (or, in fact, +%User Line: % whatever function is encoded in 'roughNN()') with the weights contained +%User Line: % in w. +%User Line: % +%User Line: % The empirical error is estimated over a 288-strong input/output pair +%User Line: % ( X , y ), with X containing only one feature, that is hard-coded into +%User Line: % the function so that its gradient can be easily computed by ADiGator. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the real vector containing the weights of the NN, see roughNN +%User Line: % for details +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - the MSE of the error done by roughNN() on the given test set +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +N.f = 288; +% Deriv 1 Line: N.f = 288; +%User Line: N = 288; +%User Line: % inputs +X.f = Gator2Data.Data1; +% Deriv 1 Line: X.f = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: X = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: % outputs +y.f = Gator2Data.Data2; +% Deriv 1 Line: y.f = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: y = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: % compute MSE of prediction on all ( X( i ) , y( i ) ) +v.f = 0; +% Deriv 1 Line: v.f = 0; +%User Line: v = 0; +cadaforvar1.f = 1:N.f; +% Deriv 1 Line: cadaforvar1.f = 1:N.f; +%User Line: cadaforvar1 = 1 : N; +v.dw = Gator2Data.Data3; +% Deriv 1 Line: v.dw = zeros(76,1); +v.dwdw = zeros(5776,1); +for cadaforcount1 = 1:288 + i.f = cadaforvar1.f(:,cadaforcount1); + % Deriv 1 Line: i.f = cadaforvar1.f(:,cadaforcount1); + %User Line: i = cadaforvar1(:,cadaforcount1); + cadainput2_1.dw = w.dw; + % Deriv 1 Line: cadainput2_1.dw = w.dw; + cadainput2_1.f = w.f; + % Deriv 1 Line: cadainput2_1.f = w.f; + %User Line: cadainput2_1 = w; + cadainput2_2.f = X.f(i.f); + % Deriv 1 Line: cadainput2_2.f = X.f(i.f); + %User Line: cadainput2_2 = X( i ); + cadaoutput2_1 = ADiGator_roughNN(cadainput2_1,cadainput2_2); + % Call to function: ADiGator_roughNN + % Call to function: roughNN + cada1f1 = y.f(i.f); + % Deriv 1 Line: cada1f1 = y.f(i.f); + cada1f2dwdw = -cadaoutput2_1.dwdw; + cada1f2dw = uminus(cadaoutput2_1.dw); + % Deriv 1 Line: cada1f2dw = -cadaoutput2_1.dw; + cada1f2 = cada1f1 - cadaoutput2_1.f; + % Deriv 1 Line: cada1f2 = cada1f1 - cadaoutput2_1.f; + cada2f1dw = 1.*cada1f2.^(1-1).*cada1f2dw; + cada2f1 = cada1f2^1; + cada2f2dw = 2.*cada2f1dw; + cada2f2 = 2*cada2f1; + cada2tempdw = cada2f2dw(Gator2Data.Index1); + cada2tf1 = cada1f2dw(Gator2Data.Index2); + cada2td1 = cada2tf1(:).*cada2tempdw; + cada2td1(Gator2Data.Index3) = cada2td1(Gator2Data.Index3) + cada2f2.*cada1f2dwdw; + cada1f3dwdw = cada2td1; + cada1f3dw = cada2f2*cada1f2dw; + % Deriv 1 Line: cada1f3dw = 2.*cada1f2.^(2-1).*cada1f2dw; + cada1f3 = cada1f2^2; + % Deriv 1 Line: cada1f3 = cada1f2^2; + cada1td1dw = v.dwdw; cada1td1 = v.dw; + % Deriv 1 Line: cada1td1 = v.dw; + cada2td1 = cada1td1dw; + cada2td1 = cada2td1 + cada1f3dwdw; + cada1td1dw = cada2td1; + cada1td1 = cada1td1 + cada1f3dw; + % Deriv 1 Line: cada1td1 = cada1td1 + cada1f3dw; + v.dwdw = cada1td1dw; v.dw = cada1td1; + % Deriv 1 Line: v.dw = cada1td1; + v.f = v.f + cada1f3; + % Deriv 1 Line: v.f = v.f + cada1f3; + %User Line: v = v + ( y( i ) - cadaoutput2_1 )^2; +end +v.dwdw = v.dwdw./2; +v.dw = v.dw/2; +% Deriv 1 Line: v.dw = v.dw./2; +v.f = v.f/2; +% Deriv 1 Line: v.f = v.f/2; +%User Line: v = v / 2; +v.dw_size = 76; +% Deriv 1 Line: v.dw_size = 76; +v.dw_location = Gator1Data.Index1; +% Deriv 1 Line: v.dw_location = Gator1Data.Index1; +v.dwdw_size = [v.dw_size,76]; +v.dwdw_location = [v.dw_location(Gator2Data.Index4,:), Gator2Data.Index5]; +end +function v = ADiGator_roughNN(w,x) +global ADiGator_testNN_ADiGatorHes +Gator1Data = ADiGator_testNN_ADiGatorHes.ADiGator_roughNN.Gator1Data; +Gator2Data = ADiGator_testNN_ADiGatorHes.ADiGator_roughNN.Gator2Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = roughNN( w , x ) +%User Line: % +%User Line: % returns the falue of the function v = f( x ) as currently estimated by +%User Line: % a small NN with 1 input, 1 output, 3 hidden layers of 5 nodes each, and +%User Line: % tanh activation function. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the [ 76 x 1 ] real vector containing the weights of the NN, +%User Line: % i.e., w is made as follows: +%User Line: % [ 1 .. 5 ] are the [ 5 x 1 ] weigths of the first layer +%User Line: % [ 6 .. 10 ] are the [ 5 x 1 ] biases of the first layer +%User Line: % [ 11 .. 35 ] are the [ 5 x 5 ] weigths of the second layer +%User Line: % [ 36 .. 40 ] are the [ 5 x 1 ] biases of the second layer +%User Line: % [ 41 .. 65 ] are the [ 5 x 5 ] weigths of the third layer +%User Line: % [ 66 .. 70 ] are the [ 5 x 1 ] biases of the third layer +%User Line: % [ 71 .. 75 ] are the [ 5 x 1 ] weigths of the fourth (output) layer +%User Line: % [ 76 ] is the [ 1 x 1 ] bias of the fourth (output) layer +%User Line: % +%User Line: % - x is the real scalar containing the input of f() +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - v (real, scalar): v = f( x ) as estimated by the NN with weights w +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +cada1f2 = Gator1Data.Data1*x.f; +% Deriv 1 Line: cada1f2 = Gator1Data.Data1*x.f; +cada1f3dw = w.dw(Gator1Data.Index1); +% Deriv 1 Line: cada1f3dw = w.dw(Gator1Data.Index1); +cada1f3 = w.f(Gator1Data.Index9); +% Deriv 1 Line: cada1f3 = w.f(Gator1Data.Index9); +cada2f1 = cada1f2(:); +cada1f4dw = cada2f1.*cada1f3dw; +% Deriv 1 Line: cada1f4dw = cada1f2(:).*cada1f3dw; +cada1f4 = cada1f2.*cada1f3; +% Deriv 1 Line: cada1f4 = cada1f2.*cada1f3; +cada1f5dw = w.dw(Gator1Data.Index2); +% Deriv 1 Line: cada1f5dw = w.dw(Gator1Data.Index2); +cada1f5 = w.f(Gator1Data.Index10); +% Deriv 1 Line: cada1f5 = w.f(Gator1Data.Index10); +cada1td1 = zeros(10,1); +% Deriv 1 Line: cada1td1 = zeros(10,1); +cada1td1(Gator1Data.Index11) = cada1f4dw; +% Deriv 1 Line: cada1td1(Gator1Data.Index11) = cada1f4dw; +cada2f1 = cada1td1(Gator1Data.Index12); +cada2f2 = cada2f1 + cada1f5dw; +cada1td1(Gator1Data.Index12) = cada2f2; +% Deriv 1 Line: cada1td1(Gator1Data.Index12) = cada1td1(Gator1Data.Index12) + cada1f5dw; +cada1f6dw = cada1td1; +% Deriv 1 Line: cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +% Deriv 1 Line: cada1f6 = cada1f4 + cada1f5; +cada1tf1dw = cada1f6dw(Gator2Data.Index1); +cada1tf1 = cada1f6(Gator1Data.Index13); +% Deriv 1 Line: cada1tf1 = cada1f6(Gator1Data.Index13); +cada2f1dw = cada1tf1dw(Gator2Data.Index2); +cada2f1 = cada1tf1(:); +cada2tf1 = cada2f1(Gator2Data.Index28); +cada2f2dw = -sech(cada2tf1(:)).*tanh(cada2tf1(:)).*cada2f1dw; +cada2f2 = sech(cada2f1); +cada2tf2 = cada2f2(Gator2Data.Index29); +cada2f3dw = 2.*cada2tf2(:).^(2-1).*cada2f2dw; +cada2f3 = cada2f2.^2; +cada2tf1 = cada1f6dw(Gator2Data.Index30); +g.dwdw = cada2tf1(:).*cada2f3dw; +g.dw = cada2f3.*cada1f6dw; +% Deriv 1 Line: g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +% Deriv 1 Line: g.f = tanh(cada1f6); +%User Line: g = tanh( ( ones( 5 , 1 ) * x ) .* w( 1 : 5 ) + w( 6 : 10 ) ); +cada1f1dw = w.dw(Gator1Data.Index3); +% Deriv 1 Line: cada1f1dw = w.dw(Gator1Data.Index3); +cada1f1 = w.f(Gator1Data.Index14); +% Deriv 1 Line: cada1f1 = w.f(Gator1Data.Index14); +cada1f2dw = cada1f1dw; +% Deriv 1 Line: cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +% Deriv 1 Line: cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +% Deriv 1 Line: cada1f3 = 5; +cada1td2 = zeros(5,25); +% Deriv 1 Line: cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index15) = cada1f2dw; +% Deriv 1 Line: cada1td2(Gator1Data.Index15) = cada1f2dw; +cada2f1dw = g.dw; +cada2f1 = g.f.'; +cada2td1 = zeros(5,10); +cada2td1(Gator2Data.Index31) = cada2f1dw; +cada2td1 = cada1td2.'*cada2td1; +cada2td1 = cada2td1(:); +cada1td2dw = cada2td1(Gator2Data.Index32); +cada1td2 = cada2f1*cada1td2; +% Deriv 1 Line: cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1dw = zeros(200,1); +% Deriv 1 Line: cada1td1 = zeros(75,1); +cada2f1dw = cada1td2dw(Gator2Data.Index3); +cada2f1 = cada1td2(Gator1Data.Index16); +cada1td1dw(logical(Gator2Data.Index16)) = cada2f1dw(nonzeros(Gator2Data.Index16)); +cada1td1(Gator1Data.Index17) = cada2f1; +% Deriv 1 Line: cada1td1(Gator1Data.Index17) = cada1td2(Gator1Data.Index16); +cada1td2 = zeros(5,10); +cada1td2dw = zeros(20,1); +% Deriv 1 Line: cada1td2 = zeros(5,10); +cada1td2dw = g.dwdw(Gator2Data.Index17); +cada1td2(Gator1Data.Index18) = g.dw; +% Deriv 1 Line: cada1td2(Gator1Data.Index18) = g.dw; +cada2td2 = zeros(5,25); +cada2td2(Gator2Data.Index33) = cada1f2dw; +cada2td2 = cada1td2.'*cada2td2; +cada2td1 = zeros(150,1); +cada2td1(Gator2Data.Index35) = cada2td2(Gator2Data.Index34); +cada2td2 = zeros(5,20); +cada2td2(Gator2Data.Index36) = cada1td2dw; +cada2td2 = cada1f2*cada2td2; +cada2td2 = cada2td2(:); +cada2td1(Gator2Data.Index38) = cada2td1(Gator2Data.Index38) + cada2td2(Gator2Data.Index37); +cada1td2dw = cada2td1; +cada1td2 = cada1f2*cada1td2; +% Deriv 1 Line: cada1td2 = cada1f2*cada1td2; +cada1td2dw = cada1td2dw(Gator2Data.Index4); +cada1td2 = cada1td2(:); +% Deriv 1 Line: cada1td2 = cada1td2(:); +cada2f1 = cada1td1(Gator1Data.Index20); +cada2f2dw = cada1td2dw(Gator2Data.Index5); +cada2f2 = cada1td2(Gator1Data.Index19); +cada2f3dw = cada2f2dw; +cada2f3 = cada2f1 + cada2f2; +cada1td1dw(logical(Gator2Data.Index18)) = cada2f3dw(nonzeros(Gator2Data.Index18)); +cada1td1(Gator1Data.Index20) = cada2f3; +% Deriv 1 Line: cada1td1(Gator1Data.Index20) = cada1td1(Gator1Data.Index20) + cada1td2(Gator1Data.Index19); +cada1f4dwdw = cada1td1dw; cada1f4dw = cada1td1; +% Deriv 1 Line: cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +% Deriv 1 Line: cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index4); +% Deriv 1 Line: cada1f5dw = w.dw(Gator1Data.Index4); +cada1f5 = w.f(Gator1Data.Index21); +% Deriv 1 Line: cada1f5 = w.f(Gator1Data.Index21); +cada1td1 = zeros(80,1); +cada1td1dw = zeros(200,1); +% Deriv 1 Line: cada1td1 = zeros(80,1); +cada1td1dw = cada1f4dwdw(Gator2Data.Index19); +cada1td1(Gator1Data.Index22) = cada1f4dw; +% Deriv 1 Line: cada1td1(Gator1Data.Index22) = cada1f4dw; +cada2f1 = cada1td1(Gator1Data.Index23); +cada2f2 = cada2f1 + cada1f5dw; +cada1td1(Gator1Data.Index23) = cada2f2; +% Deriv 1 Line: cada1td1(Gator1Data.Index23) = cada1td1(Gator1Data.Index23) + cada1f5dw; +cada1f6dwdw = cada1td1dw; cada1f6dw = cada1td1; +% Deriv 1 Line: cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +% Deriv 1 Line: cada1f6 = cada1f4 + cada1f5; +cada1tf1dw = cada1f6dw(Gator2Data.Index6); +cada1tf1 = cada1f6(Gator1Data.Index24); +% Deriv 1 Line: cada1tf1 = cada1f6(Gator1Data.Index24); +cada2f1dw = cada1tf1dw(Gator2Data.Index7); +cada2f1 = cada1tf1(:); +cada2tf1 = cada2f1(Gator2Data.Index39); +cada2f2dw = -sech(cada2tf1(:)).*tanh(cada2tf1(:)).*cada2f1dw; +cada2f2 = sech(cada2f1); +cada2tf2 = cada2f2(Gator2Data.Index40); +cada2f3dw = 2.*cada2tf2(:).^(2-1).*cada2f2dw; +cada2f3 = cada2f2.^2; +cada2tf1 = cada1f6dw(Gator2Data.Index41); +cada2td1 = cada2tf1(:).*cada2f3dw; +cada2tf1 = cada2f3(Gator2Data.Index42); +cada2td1(Gator2Data.Index43) = cada2td1(Gator2Data.Index43) + cada2tf1(:).*cada1f6dwdw; +g.dwdw = cada2td1; +g.dw = cada2f3.*cada1f6dw; +% Deriv 1 Line: g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +% Deriv 1 Line: g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 11 : 35 ) , [ 5 5 ] ) * g + w( 36 : 40 ) ); +cada1f1dw = w.dw(Gator1Data.Index5); +% Deriv 1 Line: cada1f1dw = w.dw(Gator1Data.Index5); +cada1f1 = w.f(Gator1Data.Index25); +% Deriv 1 Line: cada1f1 = w.f(Gator1Data.Index25); +cada1f2dw = cada1f1dw; +% Deriv 1 Line: cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +% Deriv 1 Line: cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +% Deriv 1 Line: cada1f3 = 5; +cada1td2 = zeros(5,25); +% Deriv 1 Line: cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index26) = cada1f2dw; +% Deriv 1 Line: cada1td2(Gator1Data.Index26) = cada1f2dw; +cada2f1dw = g.dw; +cada2f1 = g.f.'; +cada2td1 = zeros(5,40); +cada2td1(Gator2Data.Index44) = cada2f1dw; +cada2td1 = cada1td2.'*cada2td1; +cada2td1 = cada2td1(:); +cada1td2dw = cada2td1(Gator2Data.Index45); +cada1td2 = cada2f1*cada1td2; +% Deriv 1 Line: cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(225,1); +cada1td1dw = zeros(5200,1); +% Deriv 1 Line: cada1td1 = zeros(225,1); +cada2f1dw = cada1td2dw(Gator2Data.Index8); +cada2f1 = cada1td2(Gator1Data.Index27); +cada1td1dw(logical(Gator2Data.Index20)) = cada2f1dw(nonzeros(Gator2Data.Index20)); +cada1td1(Gator1Data.Index28) = cada2f1; +% Deriv 1 Line: cada1td1(Gator1Data.Index28) = cada1td2(Gator1Data.Index27); +cada1td2 = zeros(5,40); +cada1td2dw = zeros(1280,1); +% Deriv 1 Line: cada1td2 = zeros(5,40); +cada1td2dw = g.dwdw(Gator2Data.Index21); +cada1td2(Gator1Data.Index29) = g.dw; +% Deriv 1 Line: cada1td2(Gator1Data.Index29) = g.dw; +cada2td2 = zeros(5,25); +cada2td2(Gator2Data.Index46) = cada1f2dw; +cada2td2 = cada1td2.'*cada2td2; +cada2td1 = zeros(4800,1); +cada2td1(Gator2Data.Index48) = cada2td2(Gator2Data.Index47); +cada2td2 = sparse(Gator2Data.Index49,Gator2Data.Index50,cada1td2dw,5,880); +cada2td2 = cada1f2*cada2td2; +cada2td2 = cada2td2(:); +cada2td1(Gator2Data.Index52) = cada2td1(Gator2Data.Index52) + cada2td2(Gator2Data.Index51); +cada1td2dw = cada2td1; +cada1td2 = cada1f2*cada1td2; +% Deriv 1 Line: cada1td2 = cada1f2*cada1td2; +cada1td2dw = cada1td2dw(Gator2Data.Index9); +cada1td2 = cada1td2(:); +% Deriv 1 Line: cada1td2 = cada1td2(:); +cada2f1 = cada1td1(Gator1Data.Index31); +cada2f2dw = cada1td2dw(Gator2Data.Index10); +cada2f2 = cada1td2(Gator1Data.Index30); +cada2f3dw = cada2f2dw; +cada2f3 = cada2f1 + cada2f2; +cada1td1dw(logical(Gator2Data.Index22)) = cada2f3dw(nonzeros(Gator2Data.Index22)); +cada1td1(Gator1Data.Index31) = cada2f3; +% Deriv 1 Line: cada1td1(Gator1Data.Index31) = cada1td1(Gator1Data.Index31) + cada1td2(Gator1Data.Index30); +cada1f4dwdw = cada1td1dw; cada1f4dw = cada1td1; +% Deriv 1 Line: cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +% Deriv 1 Line: cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index6); +% Deriv 1 Line: cada1f5dw = w.dw(Gator1Data.Index6); +cada1f5 = w.f(Gator1Data.Index32); +% Deriv 1 Line: cada1f5 = w.f(Gator1Data.Index32); +cada1td1 = zeros(230,1); +cada1td1dw = zeros(5200,1); +% Deriv 1 Line: cada1td1 = zeros(230,1); +cada1td1dw = cada1f4dwdw(Gator2Data.Index23); +cada1td1(Gator1Data.Index33) = cada1f4dw; +% Deriv 1 Line: cada1td1(Gator1Data.Index33) = cada1f4dw; +cada2f1 = cada1td1(Gator1Data.Index34); +cada2f2 = cada2f1 + cada1f5dw; +cada1td1(Gator1Data.Index34) = cada2f2; +% Deriv 1 Line: cada1td1(Gator1Data.Index34) = cada1td1(Gator1Data.Index34) + cada1f5dw; +cada1f6dwdw = cada1td1dw; cada1f6dw = cada1td1; +% Deriv 1 Line: cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +% Deriv 1 Line: cada1f6 = cada1f4 + cada1f5; +cada1tf1dw = cada1f6dw(Gator2Data.Index11); +cada1tf1 = cada1f6(Gator1Data.Index35); +% Deriv 1 Line: cada1tf1 = cada1f6(Gator1Data.Index35); +cada2f1dw = cada1tf1dw(Gator2Data.Index12); +cada2f1 = cada1tf1(:); +cada2tf1 = cada2f1(Gator2Data.Index53); +cada2f2dw = -sech(cada2tf1(:)).*tanh(cada2tf1(:)).*cada2f1dw; +cada2f2 = sech(cada2f1); +cada2tf2 = cada2f2(Gator2Data.Index54); +cada2f3dw = 2.*cada2tf2(:).^(2-1).*cada2f2dw; +cada2f3 = cada2f2.^2; +cada2tf1 = cada1f6dw(Gator2Data.Index55); +cada2td1 = cada2tf1(:).*cada2f3dw; +cada2tf1 = cada2f3(Gator2Data.Index56); +cada2td1(Gator2Data.Index57) = cada2td1(Gator2Data.Index57) + cada2tf1(:).*cada1f6dwdw; +g.dwdw = cada2td1; +g.dw = cada2f3.*cada1f6dw; +% Deriv 1 Line: g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +% Deriv 1 Line: g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 41 : 65 ) , [ 5 5 ] ) * g + w( 66 : 70 ) ); +cada1f1dw = w.dw(Gator1Data.Index7); +% Deriv 1 Line: cada1f1dw = w.dw(Gator1Data.Index7); +cada1f1 = w.f(Gator1Data.Index36); +% Deriv 1 Line: cada1f1 = w.f(Gator1Data.Index36); +cada1f2dwdw = g.dwdw; cada1f2dw = g.dw; +% Deriv 1 Line: cada1f2dw = g.dw; +cada1f2 = g.f.'; +% Deriv 1 Line: cada1f2 = g.f.'; +cada1f3 = 5; +% Deriv 1 Line: cada1f3 = 5; +cada2td1 = zeros(10580,1); +cada2td1 = cada1f2dwdw(Gator2Data.Index27); +cada1td2dw = cada2td1; +cada1td2 = sparse(Gator1Data.Index37,Gator1Data.Index38,cada1f2dw,5,70); +% Deriv 1 Line: cada1td2 = sparse(Gator1Data.Index37,Gator1Data.Index38,cada1f2dw,5,70); +cada2f1dw = cada1f1dw; +cada2f1 = cada1f1.'; +cada2td2 = zeros(5,5); +cada2td2(Gator2Data.Index58) = cada2f1dw; +cada2td2 = cada1td2.'*cada2td2; +cada2td1 = zeros(4410,1); +cada2td1(Gator2Data.Index60) = cada2td2(Gator2Data.Index59); +cada2td2 = sparse(Gator2Data.Index61,Gator2Data.Index62,cada1td2dw,5,4180); +cada2td2 = cada2f1*cada2td2; +cada2td2 = cada2td2(:); +cada2td1(Gator2Data.Index64) = cada2td1(Gator2Data.Index64) + cada2td2(Gator2Data.Index63); +cada1td2dw = cada2td1; +cada1td2 = cada2f1*cada1td2; +% Deriv 1 Line: cada1td2 = cada1f1.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1dw = zeros(4640,1); +% Deriv 1 Line: cada1td1 = zeros(75,1); +cada2f1dw = cada1td2dw(Gator2Data.Index13); +cada2f1 = cada1td2(Gator1Data.Index39); +cada1td1dw(logical(Gator2Data.Index24)) = cada2f1dw(nonzeros(Gator2Data.Index24)); +cada1td1(Gator1Data.Index40) = cada2f1; +% Deriv 1 Line: cada1td1(Gator1Data.Index40) = cada1td2(Gator1Data.Index39); +cada1td2 = zeros(5,5); +% Deriv 1 Line: cada1td2 = zeros(5,5); +cada1td2(Gator1Data.Index41) = cada1f1dw; +% Deriv 1 Line: cada1td2(Gator1Data.Index41) = cada1f1dw; +cada2td1 = sparse(Gator2Data.Index65,Gator2Data.Index66,cada1f2dw,5,70); +cada2td1 = cada1td2.'*cada2td1; +cada2td1 = cada2td1(:); +cada1td2dw = full(cada2td1(Gator2Data.Index67)); +cada1td2 = cada1f2*cada1td2; +% Deriv 1 Line: cada1td2 = cada1f2*cada1td2; +cada1td2dw = cada1td2dw(Gator2Data.Index14); +cada1td2 = cada1td2(:); +% Deriv 1 Line: cada1td2 = cada1td2(:); +cada2f1 = cada1td1(Gator1Data.Index43); +cada2f2dw = cada1td2dw(Gator2Data.Index15); +cada2f2 = cada1td2(Gator1Data.Index42); +cada2f3dw = cada2f2dw; +cada2f3 = cada2f1 + cada2f2; +cada1td1dw(logical(Gator2Data.Index25)) = cada2f3dw(nonzeros(Gator2Data.Index25)); +cada1td1(Gator1Data.Index43) = cada2f3; +% Deriv 1 Line: cada1td1(Gator1Data.Index43) = cada1td1(Gator1Data.Index43) + cada1td2(Gator1Data.Index42); +cada1f4dwdw = cada1td1dw; cada1f4dw = cada1td1; +% Deriv 1 Line: cada1f4dw = cada1td1; +cada1f4 = cada1f2*cada1f1; +% Deriv 1 Line: cada1f4 = cada1f2*cada1f1; +cada1f5dw = w.dw(Gator1Data.Index8); +% Deriv 1 Line: cada1f5dw = w.dw(Gator1Data.Index8); +cada1f5 = w.f(76); +% Deriv 1 Line: cada1f5 = w.f(76); +cada1td1 = zeros(76,1); +cada1td1dw = zeros(4640,1); +% Deriv 1 Line: cada1td1 = zeros(76,1); +cada1td1dw = cada1f4dwdw(Gator2Data.Index26); +cada1td1(Gator1Data.Index44) = cada1f4dw; +% Deriv 1 Line: cada1td1(Gator1Data.Index44) = cada1f4dw; +cada2f1 = cada1td1(76); +cada2f2 = cada2f1 + cada1f5dw; +cada1td1(76) = cada2f2; +% Deriv 1 Line: cada1td1(76) = cada1td1(76) + cada1f5dw; +v.dwdw = cada1td1dw; v.dw = cada1td1; +% Deriv 1 Line: v.dw = cada1td1; +v.f = cada1f4 + cada1f5; +% Deriv 1 Line: v.f = cada1f4 + cada1f5; +%User Line: v = g' * w( 71 : 75 ) + w( 76 ); +end + + +function ADiGator_LoadData() +global ADiGator_testNN_ADiGatorHes +ADiGator_testNN_ADiGatorHes = load('testNN_ADiGatorHes.mat'); +return +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorHes.mat b/11-09/TestFunctions Matlab/testNN_ADiGatorHes.mat new file mode 100644 index 0000000000000000000000000000000000000000..49646ffa53f1e198374398b610a163171e373db9 GIT binary patch literal 179117 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 literal 0 HcmV?d00001 diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorJac.m b/11-09/TestFunctions Matlab/testNN_ADiGatorJac.m new file mode 100644 index 0000000..7ad591b --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_ADiGatorJac.m @@ -0,0 +1,227 @@ +% This code was generated using ADiGator version 1.4 +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function v = testNN_ADiGatorJac(w) +global ADiGator_testNN_ADiGatorJac +if isempty(ADiGator_testNN_ADiGatorJac); ADiGator_LoadData(); end +Gator1Data = ADiGator_testNN_ADiGatorJac.testNN_ADiGatorJac.Gator1Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = testNN( w ) +%User Line: % +%User Line: % returns the falue of the empirical error of the NN (or, in fact, +%User Line: % whatever function is encoded in 'roughNN()') with the weights contained +%User Line: % in w. +%User Line: % +%User Line: % The empirical error is estimated over a 288-strong input/output pair +%User Line: % ( X , y ), with X containing only one feature, that is hard-coded into +%User Line: % the function so that its gradient can be easily computed by ADiGator. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the real vector containing the weights of the NN, see roughNN +%User Line: % for details +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - the MSE of the error done by roughNN() on the given test set +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +N.f = 288; +%User Line: N = 288; +%User Line: % inputs +X.f = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: X = [;0.0000000000000000;0.0034843205574913;0.0069686411149826;0.0104529616724739;0.0139372822299652;0.0174216027874564;0.0209059233449477;0.0243902439024390;0.0278745644599303;0.0313588850174216;0.0348432055749129;0.0383275261324042;0.0418118466898955;0.0452961672473868;0.0487804878048781;0.0522648083623693;0.0557491289198606;0.0592334494773519;0.0627177700348432;0.0662020905923345;0.0696864111498258;0.0731707317073171;0.0766550522648084;0.0801393728222996;0.0836236933797909;0.0871080139372822;0.0905923344947735;0.0940766550522648;0.0975609756097561;0.1010452961672474;0.1045296167247387;0.1080139372822300;0.1114982578397213;0.1149825783972125;0.1184668989547038;0.1219512195121951;0.1254355400696864;0.1289198606271777;0.1324041811846690;0.1358885017421603;0.1393728222996516;0.1428571428571428;0.1463414634146341;0.1498257839721254;0.1533101045296167;0.1567944250871080;0.1602787456445993;0.1637630662020906;0.1672473867595819;0.1707317073170732;0.1742160278745645;0.1777003484320558;0.1811846689895470;0.1846689895470383;0.1881533101045296;0.1916376306620209;0.1951219512195122;0.1986062717770035;0.2020905923344948;0.2055749128919861;0.2090592334494774;0.2125435540069686;0.2160278745644599;0.2195121951219512;0.2229965156794425;0.2264808362369338;0.2299651567944251;0.2334494773519164;0.2369337979094077;0.2404181184668990;0.2439024390243902;0.2473867595818815;0.2508710801393728;0.2543554006968641;0.2578397212543554;0.2613240418118467;0.2648083623693380;0.2682926829268293;0.2717770034843205;0.2752613240418119;0.2787456445993031;0.2822299651567944;0.2857142857142857;0.2891986062717770;0.2926829268292683;0.2961672473867596;0.2996515679442509;0.3031358885017422;0.3066202090592334;0.3101045296167247;0.3135888501742160;0.3170731707317073;0.3205574912891986;0.3240418118466899;0.3275261324041812;0.3310104529616725;0.3344947735191638;0.3379790940766551;0.3414634146341464;0.3449477351916376;0.3484320557491289;0.3519163763066202;0.3554006968641115;0.3588850174216028;0.3623693379790941;0.3658536585365854;0.3693379790940767;0.3728222996515679;0.3763066202090593;0.3797909407665505;0.3832752613240418;0.3867595818815331;0.3902439024390244;0.3937282229965157;0.3972125435540070;0.4006968641114982;0.4041811846689896;0.4076655052264808;0.4111498257839721;0.4146341463414634;0.4181184668989547;0.4216027874564460;0.4250871080139373;0.4285714285714285;0.4320557491289199;0.4355400696864111;0.4390243902439024;0.4425087108013937;0.4459930313588850;0.4494773519163763;0.4529616724738676;0.4564459930313589;0.4599303135888502;0.4634146341463415;0.4668989547038327;0.4703832752613241;0.4738675958188153;0.4773519163763066;0.4808362369337979;0.4843205574912892;0.4878048780487805;0.4912891986062718;0.4947735191637631;0.4982578397212544;0.5017421602787456;0.5052264808362370;0.5087108013937283;0.5121951219512195;0.5156794425087108;0.5191637630662020;0.5226480836236933;0.5261324041811847;0.5296167247386759;0.5331010452961673;0.5365853658536586;0.5400696864111498;0.5435540069686411;0.5470383275261324;0.5505226480836236;0.5540069686411150;0.5574912891986064;0.5609756097560976;0.5644599303135889;0.5679442508710801;0.5714285714285714;0.5749128919860627;0.5783972125435540;0.5818815331010453;0.5853658536585367;0.5888501742160279;0.5923344947735192;0.5958188153310104;0.5993031358885017;0.6027874564459930;0.6062717770034843;0.6097560975609756;0.6132404181184670;0.6167247386759582;0.6202090592334495;0.6236933797909407;0.6271777003484320;0.6306620209059233;0.6341463414634146;0.6376306620209059;0.6411149825783973;0.6445993031358885;0.6480836236933798;0.6515679442508711;0.6550522648083623;0.6585365853658536;0.6620209059233449;0.6655052264808362;0.6689895470383276;0.6724738675958188;0.6759581881533101;0.6794425087108014;0.6829268292682926;0.6864111498257840;0.6898954703832753;0.6933797909407666;0.6968641114982579;0.7003484320557491;0.7038327526132404;0.7073170731707317;0.7108013937282229;0.7142857142857143;0.7177700348432056;0.7212543554006969;0.7247386759581882;0.7282229965156795;0.7317073170731707;0.7351916376306620;0.7386759581881532;0.7421602787456446;0.7456445993031359;0.7491289198606272;0.7526132404181185;0.7560975609756098;0.7595818815331010;0.7630662020905923;0.7665505226480837;0.7700348432055749;0.7735191637630662;0.7770034843205575;0.7804878048780488;0.7839721254355401;0.7874564459930313;0.7909407665505226;0.7944250871080140;0.7979094076655052;0.8013937282229965;0.8048780487804879;0.8083623693379791;0.8118466898954704;0.8153310104529616;0.8188153310104529;0.8222996515679443;0.8257839721254355;0.8292682926829268;0.8327526132404182;0.8362369337979094;0.8397212543554007;0.8432055749128919;0.8466898954703833;0.8501742160278746;0.8536585365853658;0.8571428571428572;0.8606271777003485;0.8641114982578397;0.8675958188153310;0.8710801393728222;0.8745644599303136;0.8780487804878049;0.8815331010452961;0.8850174216027875;0.8885017421602788;0.8919860627177700;0.8954703832752613;0.8989547038327526;0.9024390243902439;0.9059233449477352;0.9094076655052264;0.9128919860627178;0.9163763066202091;0.9198606271777003;0.9233449477351916;0.9268292682926830;0.9303135888501742;0.9337979094076655;0.9372822299651568;0.9407665505226481;0.9442508710801394;0.9477351916376306;0.9512195121951219;0.9547038327526133;0.9581881533101045;0.9616724738675958;0.9651567944250871;0.9686411149825784;0.9721254355400697;0.9756097560975610;0.9790940766550522;0.9825783972125436;0.9860627177700348;0.9895470383275261;0.9930313588850174;0.9965156794425087;1.0000000000000000 ]; +%User Line: % outputs +y.f = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: y = [;0.096798166000;0.143459740000;0.208317990000;-0.038018393000;0.148793230000;0.512799550000;-0.120798510000;0.177158750000;0.083816932000;0.000756494710;0.006887211700;0.213572840000;0.493783350000;0.035274935000;0.243769090000;0.087417919000;0.476797600000;0.271438160000;0.178877000000;0.302770820000;0.219586200000;0.397548740000;0.215089090000;0.086588415000;0.304056660000;0.513946170000;0.113409000000;0.270068060000;0.471061630000;0.046628439000;0.443157150000;0.477349380000;0.411852220000;0.280063680000;0.410626170000;0.442082230000;0.585090200000;0.561297160000;0.426446760000;0.739395540000;0.506414480000;0.409925250000;0.483992110000;0.696575460000;0.615166110000;0.737349800000;0.632542540000;1.013287300000;0.408451860000;0.613835270000;0.681370910000;0.724988310000;0.947395900000;0.779004190000;0.745667780000;0.789666080000;0.908202240000;0.707755840000;0.894037990000;0.606428220000;0.843615470000;0.727874550000;0.784348430000;0.937189250000;0.737952220000;0.769620390000;0.701166820000;0.604155740000;0.924881630000;1.130475900000;0.936493470000;0.935667120000;0.819976810000;1.219958800000;0.949769640000;1.185254200000;1.048672000000;0.957402250000;1.160938800000;1.147023700000;0.983283410000;1.194051400000;1.265849000000;0.987167510000;0.956395550000;1.052589900000;1.041239900000;1.105649800000;0.941725790000;1.082398200000;1.127045200000;0.990602660000;0.980803460000;0.763155870000;0.768571290000;0.718186990000;0.743430540000;0.899271220000;0.672586160000;1.243876900000;1.009891400000;0.580803050000;0.709665650000;0.858643730000;0.609667610000;0.789520360000;1.014111700000;0.817911210000;0.824534040000;0.676622590000;0.735885580000;0.609022520000;0.859070820000;0.729465540000;0.907844320000;0.969161960000;0.938595000000;0.765435590000;0.688922170000;0.574990840000;0.770659830000;0.891310740000;0.690971710000;0.711048000000;0.824634750000;0.857126400000;0.510549630000;0.748820900000;0.744129450000;0.688191070000;0.841053850000;0.648943870000;0.576231820000;0.738291460000;0.762720980000;0.658108930000;0.807248650000;0.457323660000;0.521077750000;0.218860160000;0.755337450000;0.525976310000;0.634217410000;0.821176590000;0.675074910000;0.599022390000;0.535501720000;0.624415250000;0.748616920000;0.428448630000;0.643341520000;0.768654000000;0.435878620000;0.747073780000;0.746823840000;0.509674810000;0.413964070000;0.702246380000;0.756141550000;0.719368010000;0.744580020000;0.450466060000;0.713008860000;0.536099090000;0.536595750000;0.385158420000;0.781369420000;0.640457830000;0.762680940000;0.836824400000;0.437730550000;0.703038130000;0.603083350000;0.740709380000;0.768477480000;0.724346000000;0.477804350000;0.580883120000;0.639146320000;1.073252500000;0.783713950000;0.948384040000;0.663369380000;0.634232460000;0.696070360000;0.526957260000;0.794798220000;0.587766610000;0.408654360000;0.749043110000;0.387306230000;0.350567280000;0.675537030000;0.495158740000;0.507149810000;0.625867220000;0.583647850000;0.630796900000;0.712643020000;0.504536230000;0.504499780000;0.381836730000;0.647114640000;0.814415180000;0.618741310000;0.808727320000;0.824111580000;0.901249190000;0.910594790000;0.668334220000;0.652467030000;0.797380800000;0.699257390000;1.025428600000;1.022629700000;0.837597600000;0.766407010000;0.913657810000;0.744506570000;0.829397600000;0.773018020000;0.872046570000;1.028215500000;0.972177970000;1.033239200000;0.724398150000;0.887466840000;0.710846670000;0.912868530000;0.899725750000;1.039970600000;1.003988400000;0.929601600000;0.747319110000;0.742110530000;0.495198080000;0.724133980000;0.546209190000;0.904975290000;0.886555800000;0.756973180000;0.663691170000;0.725449860000;0.927661000000;0.871628610000;0.583857660000;0.657822350000;0.445564610000;0.654537190000;0.685853290000;0.690412010000;0.306045040000;0.591718740000;0.366728870000;0.420310670000;0.575582700000;0.482907520000;0.394669790000;0.491601190000;0.627475460000;0.270874460000;0.144405290000;0.155561360000;0.171715630000;0.196642150000;0.368318080000;-0.046015957000;0.287831380000;0.121822920000;0.390236930000;0.084253654000;0.201575720000;0.048222309000;0.075602342000;0.128340910000;0.123106810000;0.069294711000;0.308367180000;0.213239800000;0.401070710000;0.073746174000;0.268322470000;-0.213145400000;0.191332180000;0.145485930000;0.028213679000;0.183566020000;0.206160990000 ]; +%User Line: % compute MSE of prediction on all ( X( i ) , y( i ) ) +v.f = 0; +%User Line: v = 0; +cadaforvar1.f = 1:N.f; +%User Line: cadaforvar1 = 1 : N; +v.dw = zeros(76,1); +for cadaforcount1 = 1:288 + i.f = cadaforvar1.f(:,cadaforcount1); + %User Line: i = cadaforvar1(:,cadaforcount1); + cadainput2_1.dw = w.dw; cadainput2_1.f = w.f; + %User Line: cadainput2_1 = w; + cadainput2_2.f = X.f(i.f); + %User Line: cadainput2_2 = X( i ); + cadaoutput2_1 = ADiGator_roughNN(cadainput2_1,cadainput2_2); + % Call to function: roughNN + cada1f1 = y.f(i.f); + cada1f2dw = -cadaoutput2_1.dw; + cada1f2 = cada1f1 - cadaoutput2_1.f; + cada1f3dw = 2.*cada1f2.^(2-1).*cada1f2dw; + cada1f3 = cada1f2^2; + cada1td1 = v.dw; + cada1td1 = cada1td1 + cada1f3dw; + v.dw = cada1td1; + v.f = v.f + cada1f3; + %User Line: v = v + ( y( i ) - cadaoutput2_1 )^2; +end +v.dw = v.dw./2; +v.f = v.f/2; +%User Line: v = v / 2; +v.dw_size = 76; +v.dw_location = Gator1Data.Index1; +end +function v = ADiGator_roughNN(w,x) +global ADiGator_testNN_ADiGatorJac +Gator1Data = ADiGator_testNN_ADiGatorJac.ADiGator_roughNN.Gator1Data; +% ADiGator Start Derivative Computations +%User Line: % +%User Line: % v = roughNN( w , x ) +%User Line: % +%User Line: % returns the falue of the function v = f( x ) as currently estimated by +%User Line: % a small NN with 1 input, 1 output, 3 hidden layers of 5 nodes each, and +%User Line: % tanh activation function. +%User Line: % +%User Line: % Input: +%User Line: % +%User Line: % - w is the [ 76 x 1 ] real vector containing the weights of the NN, +%User Line: % i.e., w is made as follows: +%User Line: % [ 1 .. 5 ] are the [ 5 x 1 ] weigths of the first layer +%User Line: % [ 6 .. 10 ] are the [ 5 x 1 ] biases of the first layer +%User Line: % [ 11 .. 35 ] are the [ 5 x 5 ] weigths of the second layer +%User Line: % [ 36 .. 40 ] are the [ 5 x 1 ] biases of the second layer +%User Line: % [ 41 .. 65 ] are the [ 5 x 5 ] weigths of the third layer +%User Line: % [ 66 .. 70 ] are the [ 5 x 1 ] biases of the third layer +%User Line: % [ 71 .. 75 ] are the [ 5 x 1 ] weigths of the fourth (output) layer +%User Line: % [ 76 ] is the [ 1 x 1 ] bias of the fourth (output) layer +%User Line: % +%User Line: % - x is the real scalar containing the input of f() +%User Line: % +%User Line: % Output: +%User Line: % +%User Line: % - v (real, scalar): v = f( x ) as estimated by the NN with weights w +%User Line: % +%User Line: %{ +%User Line: % ======================================= +%User Line: % Author: Antonio Frangioni +%User Line: % Date: 28-08-22 +%User Line: % Version 1.00 +%User Line: % Copyright Antonio Frangioni +%User Line: % ======================================= +%User Line: %} +cada1f2 = Gator1Data.Data1*x.f; +cada1f3dw = w.dw(Gator1Data.Index1); +cada1f3 = w.f(Gator1Data.Index9); +cada1f4dw = cada1f2(:).*cada1f3dw; +cada1f4 = cada1f2.*cada1f3; +cada1f5dw = w.dw(Gator1Data.Index2); +cada1f5 = w.f(Gator1Data.Index10); +cada1td1 = zeros(10,1); +cada1td1(Gator1Data.Index11) = cada1f4dw; +cada1td1(Gator1Data.Index12) = cada1td1(Gator1Data.Index12) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index13); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( ( ones( 5 , 1 ) * x ) .* w( 1 : 5 ) + w( 6 : 10 ) ); +cada1f1dw = w.dw(Gator1Data.Index3); +cada1f1 = w.f(Gator1Data.Index14); +cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index15) = cada1f2dw; +cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1(Gator1Data.Index17) = cada1td2(Gator1Data.Index16); +cada1td2 = zeros(5,10); +cada1td2(Gator1Data.Index18) = g.dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index20) = cada1td1(Gator1Data.Index20) + cada1td2(Gator1Data.Index19); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index4); +cada1f5 = w.f(Gator1Data.Index21); +cada1td1 = zeros(80,1); +cada1td1(Gator1Data.Index22) = cada1f4dw; +cada1td1(Gator1Data.Index23) = cada1td1(Gator1Data.Index23) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index24); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 11 : 35 ) , [ 5 5 ] ) * g + w( 36 : 40 ) ); +cada1f1dw = w.dw(Gator1Data.Index5); +cada1f1 = w.f(Gator1Data.Index25); +cada1f2dw = cada1f1dw; +cada1f2 = reshape(cada1f1,5,5); +cada1f3 = 5; +cada1td2 = zeros(5,25); +cada1td2(Gator1Data.Index26) = cada1f2dw; +cada1td2 = g.f.'*cada1td2; +cada1td1 = zeros(225,1); +cada1td1(Gator1Data.Index28) = cada1td2(Gator1Data.Index27); +cada1td2 = zeros(5,40); +cada1td2(Gator1Data.Index29) = g.dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index31) = cada1td1(Gator1Data.Index31) + cada1td2(Gator1Data.Index30); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*g.f; +cada1f5dw = w.dw(Gator1Data.Index6); +cada1f5 = w.f(Gator1Data.Index32); +cada1td1 = zeros(230,1); +cada1td1(Gator1Data.Index33) = cada1f4dw; +cada1td1(Gator1Data.Index34) = cada1td1(Gator1Data.Index34) + cada1f5dw; +cada1f6dw = cada1td1; +cada1f6 = cada1f4 + cada1f5; +cada1tf1 = cada1f6(Gator1Data.Index35); +g.dw = sech(cada1tf1(:)).^2.*cada1f6dw; +g.f = tanh(cada1f6); +%User Line: g = tanh( reshape( w( 41 : 65 ) , [ 5 5 ] ) * g + w( 66 : 70 ) ); +cada1f1dw = w.dw(Gator1Data.Index7); +cada1f1 = w.f(Gator1Data.Index36); +cada1f2dw = g.dw; +cada1f2 = g.f.'; +cada1f3 = 5; +cada1td2 = sparse(Gator1Data.Index37,Gator1Data.Index38,cada1f2dw,5,70); +cada1td2 = cada1f1.'*cada1td2; +cada1td1 = zeros(75,1); +cada1td1(Gator1Data.Index40) = cada1td2(Gator1Data.Index39); +cada1td2 = zeros(5,5); +cada1td2(Gator1Data.Index41) = cada1f1dw; +cada1td2 = cada1f2*cada1td2; +cada1td2 = cada1td2(:); +cada1td1(Gator1Data.Index43) = cada1td1(Gator1Data.Index43) + cada1td2(Gator1Data.Index42); +cada1f4dw = cada1td1; +cada1f4 = cada1f2*cada1f1; +cada1f5dw = w.dw(Gator1Data.Index8); +cada1f5 = w.f(76); +cada1td1 = zeros(76,1); +cada1td1(Gator1Data.Index44) = cada1f4dw; +cada1td1(76) = cada1td1(76) + cada1f5dw; +v.dw = cada1td1; +v.f = cada1f4 + cada1f5; +%User Line: v = g' * w( 71 : 75 ) + w( 76 ); +end + + +function ADiGator_LoadData() +global ADiGator_testNN_ADiGatorJac +ADiGator_testNN_ADiGatorJac = load('testNN_ADiGatorJac.mat'); +return +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_ADiGatorJac.mat b/11-09/TestFunctions Matlab/testNN_ADiGatorJac.mat new file mode 100644 index 0000000000000000000000000000000000000000..05b389f295bdc5ebb6887203b75fe41adcc92f65 GIT binary patch literal 1541 zcma)(eLT~70LM4`*)q?{Y%TndaAuh`&kx^WYB9}YNZGKhDe_PuPg5(+k%x4lCps(c z@?0Iod1!_55b3Vy$wO*&>0GODm8kW7~5=e`YzK%|_UisEnzIb040HL?oy%Mi#5Y*!Nx>LYpc;z_lC_FI};S@1cCmz3R15>p&@trH{D_L1G! zY|g>l+>DI;Wu&d}=KjEj@Q_G9ex$$ecejnv4f%tFn!fwjI+Tvn&| ztu?*WUFe={_hk6lHIYFCo3e(F3%1>>;Y*G)*yfsvq#JRy{U`}4Oba0))FD-wVan4D zqU}*woBIBw02ivf*NAQK@k7NvL5u! zatnN;vlCtAAS#t0l|m}hy;hSDvLocOS&8WaV~(*Pl@l^EFQ}2!9NC!uOi(D9`x>4c06a_jNR~qyZPCN2X@vW3WJU?42if5pACzp zqT4w|_8EERi+DnM#k+@EMgvRMb80X$H`oInr+!hUwUI~{Mw!PdNm-Q_2_?2UBRKY$ z4*v+U#8y1w#U8_NJOP9O=CNq$K;=c{lFQ;Nn3&Vrqs}JPsb1_ic@;AR`T%u*xd5UK zE&B?hs#9-#29+}ej{)kTa)BCc2p@BrGV1&<@Tr(70|V6Ta)A~CSjSiC``^D&GtR7k)lZA4i70e8_q04cgwL=5yjbU3SZxSyyz*M z*0Esr-4VM>P04c#O-Y{jV83NuwRAMR@OW2t&P<~5z;#`X?XB38RvaObPY#`v4O)^c zq!s6)#MWl00tc^Ong%wl}u?euDIVvLGSx&833+ zGg%1jPs=*bx`~hu5dk@{otsv`<2-TV#B|La!Qg49tcgkKt<81Yu4Ycn)Q%_5KDxT} z#HhG6x`!&1-yL~$ciha}m~2YB+R%2nPP(J}qC82jKD>iFe%izA_TReCXYI4E>znl^ zVd~ORzKhxPE~85Bgm#hNFr_hJPDR4(v#1fu31y-89a>Wtln*kln@V|4b&mzzrCr+d zRz06JU{xFYO8?Z>hc4|IAD6H3EqCUc>w4xc&hnZi#6<`P-6~_q@w0uZi_O zu4d<5Qxx-kcLbi|*HqHt84A0@6@L<1c!i$+)U$nlQZu5d8v~UB5djJTB34)-o} QAPX}0y(J>5ZMnFA0N=8M>Hq)$ literal 0 HcmV?d00001 diff --git a/11-09/TestFunctions Matlab/testNN_Grd.m b/11-09/TestFunctions Matlab/testNN_Grd.m new file mode 100644 index 0000000..9518ff5 --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_Grd.m @@ -0,0 +1,21 @@ +% function [Grd,Fun] = testNN_Grd(w) +% +% Gradient wrapper file generated by ADiGator +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function [Grd,Fun] = testNN_Grd(w) +gator_w.f = w; +gator_w.dw = ones(76,1); +v = testNN_ADiGatorGrd(gator_w); +Grd = reshape(v.dw,[1 76]); +Fun = v.f; +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_Hes.m b/11-09/TestFunctions Matlab/testNN_Hes.m new file mode 100644 index 0000000..280e29a --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_Hes.m @@ -0,0 +1,25 @@ +% function [Grd,Fun] = testNN_Grd(w) +% +% Gradient wrapper file generated by ADiGator +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function [Hes,Grd,Fun] = testNN_Hes(w) +gator_w.f = w; +gator_w.dw = ones(76,1); +v = testNN_ADiGatorHes(gator_w); +xind1 = v.dwdw_location(:,1); +xind2 = v.dwdw_location(:,2); +Hes = zeros(76,76); +Hes((xind2-1)*76 + xind1) = v.dwdw; +Grd = reshape(v.dw,[1 76]); +Fun = v.f; +end \ No newline at end of file diff --git a/11-09/TestFunctions Matlab/testNN_Jac.m b/11-09/TestFunctions Matlab/testNN_Jac.m new file mode 100644 index 0000000..14ef2c7 --- /dev/null +++ b/11-09/TestFunctions Matlab/testNN_Jac.m @@ -0,0 +1,21 @@ +% function [Jac,Fun] = testNN_Jac(w) +% +% Jacobian wrapper file generated by ADiGator +% ©2010-2014 Matthew J. Weinstein and Anil V. Rao +% ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +% Contact: mweinstein@ufl.edu +% Bugs/suggestions may be reported to the sourceforge forums +% DISCLAIMER +% ADiGator is a general-purpose software distributed under the GNU General +% Public License version 3.0. While the software is distributed with the +% hope that it will be useful, both the software and generated code are +% provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +% or fitness for any purpose or application. + +function [Jac,Fun] = testNN_Jac(w) +gator_w.f = w; +gator_w.dw = ones(76,1); +v = testNN_ADiGatorJac(gator_w); +Jac = reshape(v.dw,[1 76]); +Fun = v.f; +end \ No newline at end of file diff --git a/11-09/TestFunctions/TestFunctions.jl b/11-09/TestFunctions/TestFunctions.jl new file mode 100644 index 0000000..4bdd006 --- /dev/null +++ b/11-09/TestFunctions/TestFunctions.jl @@ -0,0 +1,372 @@ +using LinearAlgebra: I, eigvals + +function TestFunctions() + + # function TF = TestFunctions() + # + # Produces a cell array of function handlers, useful to test unconstrained + # optimization algorithms. + # + # Each function in the array has the following interface: + # + # [ v , varargout ] = f( x ) + # + # Input: + # + # - x is either a [ n x 1 ] real (column) vector denoting the input of + # f(), or [] (empty). + # + # Output: + # + # - v (real, scalar): if x == [] this is the best known lower bound on + # the unconstrained global optimum of f(); it can be -Inf if either f() + # is not bounded below, or no such information is available. If x ~= [] + # then v = f(x). + # + # - g (real, [ n x 1 ] real vector) is the first optional argument. This + # also depends on x. if x == [] this is the standard starting point of an + # optimization algorithm, otherwise it is the gradient of f() at x, or a + # subgradient if f() is not differentiable at x. + # + # - H (real, [ n x n ] real matrix) is the first optional argument. This + # must only be specified if x ~= [], and it is the Hessian of f() at x. + # If no such information is available, the function throws error. + # + # The current list of functions is the following: + # + # 1 Standard 2x2 PSD quadratic function with nicely conditioned Hessian. + # + # 2 Standard 2x2 PSD quadratic function with less nicely conditioned + # Hessian. + # + # 3 Standard 2x2 PSD quadratic function with Hessian having one zero + # eigenvalue. + # + # 4 Standard 2x2 quadratic function with indefinite Hessian (one positive + # and one negative eigenvalue) + # + # 5 Standard 2x2 quadratic function with "very elongated" Hessian (a + # very small positive minimum eigenvalue, the other much larger) + # + # 6 the 2-dim Rosenbrock function + # + # 7 the "six-hump camel" function + # + # 8 the Ackley function + # + # 9 a 2-dim nondifferentiable function coming from Lasso regularization + # + # 10 a 76-dim (nonconvex, differentiable) function coming from a fitting + # problem with ( X , y ) both [ 288 , 1 ] (i.e., a fitting with only + # one feature) using a "rough" NN with 1 input, 1 output, 3 hidden + # layers of 5 nodes each, and tanh activation function + # + # 11 same as 10 plus a 1e-4 || x ||^2 / 2 ridge stabilising term + # + #{ + # ======================================= + # Author: Antonio Frangioni + # Date: 08-11-18 + # Version 1.01 + # Copyright Antonio Frangioni + # ======================================= + #} + + TF = [] + push!(TF, x -> genericquad([6 -2; -2 6], [10; 5], x)) + # eigenvalues: 4, 8 + push!(TF, x -> genericquad([5 -3; -3 5], [10; 5], x)) + # eigenvalues: 2, 8 + push!(TF, x -> genericquad([4 -4; -4 4], [10; 5], x)) + # eigenvalues: 0, 8 + push!(TF, x -> genericquad([3 -5; -5 3], [10; 5], x)) + # eigenvalues: -2, 8 + push!(TF, x -> genericquad([101 -99; -99 101], [10; 5], x)) + # eigenvalues: 2, 200 + # HBG: alpha = 0.0165 , beta = 0.678 + push!(TF, rosenbrock) + push!(TF, sixhumpcamel) + push!(TF, ackley) + push!(TF, lasso) + push!(TF, myNN) + push!(TF, myNN2) + return TF +end + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function genericquad(Q, q, x::Union{Nothing, Real}) + # generic quadratic function f(x) = x' * Q * x / 2 + q' * x + + if x === nothing # informative call + if minimum(eigvals(Q)) > 1e-14 + xStar = Q \ -q + v = 0.5 * xStar' * Q * xStar + q' * xStar + else + v = -Inf + end + return (v, zeros(size(q)), zeros(size(Q))) + else + if size(x) ≠ (2, 1) + throw(ArgumentError("genericquad: x is of wrong size")) + end + v = 0.5 * x' * Q * x + q' * x # f(x) + return (v, Q * x + q, Q) + end +end # genericquad + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function rosenbrock(x::Union{Nothing, AbstractVecOrMat}) + # rosenbrock's valley-shaped function + # syms x y + # f = @(x, y) 100 * ( y - x^2 )^2 + ( x - 1 )^2 + # + # diff( f , x ) + # 2 * x - 400 * x * ( - x^2 + y ) - 2 + # + # diff( f , y ) + # - 200 * x^2 + 200 * y + # + # diff( f , x , 2 ) + # 1200 * x^2 - 400 * y + 2 + # + # diff( f , y , 2 ) + # 200 + # + # diff( f , x , y ) + # -400 * x + + if isnothing(x) # informative call + v = 0 + return (v, [-1, 1], [0 0; 0 0]) + else + v = 100 * (x[2] - x[1]^2 )^2 + ( x[1] - 1 )^2 # f(x) + + g = zeros(2) + g[1] = 2 * x[1] - 400* x[1] * (x[2] - x[1]^2) - 2 + g[2] = -200 * x[1]^2 + 200 * x[2] + + H = zeros(2, 2) + H[1, 1] = 1200 * x[1]^2 -400 * x[2] + 2 + H[2, 2] = 200 + H[2, 1] = -400 * x[1] + H[1, 2] = H[2, 1] + + return (v, g, H) + end +end # rosenbrock + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function sixhumpcamel(x::Union{Nothing, AbstractVecOrMat}) + # six-hump-camel valley-shaped function + # syms x y + # f = @(x, y) ( 4 - 2.1 * x^2 + x^4 / 3 ) * x^2 + x * y + 4 * ( y^2 - 1 ) * + # y^2 + # + # diff( f , x ) + # 2 * x^5 - ( 42 * x^3 ) / 5 + 8 * x + y + # + # diff( f , y ) + # 16 * y^3 - 8 * y + x + # + # diff( f , x , 2 ) + # 10 * x^4 - ( 126 * x^2 ) / 5 + 8 + # + # diff( f , y , 2 ) + # 48 * y^2 - 8 + # + # diff( f , x , y ) + # 1 + + if isnothing(x) # informative call + v = -1.03162845349 + return (v, [1, 1], [0 0; 0 0]) + else + v = ( 4 - 2.1 * x[1]^2 + x[1]^4 / 3 ) * x[1]^2 + x[1] * x[2] + + 4 * ( x[2]^2 - 1 ) * x[2]^2 # f(x) + + g = zeros(2) + g[1] = 2 * x[1]^5 - (42 * x[1]^3) / 5 + 8 * x[1] + x[2] + g[2] = 16 * x[2]^3 - 8 * x[2] + x[1] + + H = zeros(2, 2) + H[1, 1] = 10 * x[1]^4 - ( 126 * x[1]^2 ) / 5 + 8 + H[2, 2] = 48 * x[2]^2 - 8 + H[2, 1] = 1 + H[1, 2] = H[2, 1] + + return (v, g, H) + end +end # sixhumpcamel + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function ackley(xx::Union{Nothing, AbstractVecOrMat}) + + # syms x y + # f = @(x, y) - 20 * exp( - 0.2 * sqrt( ( x^2 + y^2 ) / 2 ) ) ... + # - exp( ( cos( 2 * pi * x ) + cos( 2 * pi * y ) ) / 2 ) ... + # + 20 + exp(1) + # + + ManuallyComputedfGH = true + + if isnothing(xx) # informative call + v = 0 + return (v, [2, 2], [0 0; 0 0]) + else + if size(xx, 1) ≠ 2 || size(xx, 2) ≠ 1 + error("ackley: x is of wrong size") + end + + if ManuallyComputedfGH + + # diff( f , x ) + # pi*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x) + + # (2*x*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + # + # diff( f , y ) + # pi*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*y) + + # (2*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + # + # diff( f , x , 2 ) + # + # (2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + + # 2*pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*cos(2*pi*x) - + # (x^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - + # (x^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - + # pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x)^2 + # + # diff( f , y , 2 ) + # (2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(1/2) + + # 2*pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*cos(2*pi*y) - + # (y^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - + # (y^2*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - + # pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*y)^2 + # + # diff( f , x , y) + # - (x*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(5*(x^2/2 + y^2/2)) - + # (x*y*exp(-(x^2/2 + y^2/2)^(1/2)/5))/(x^2/2 + y^2/2)^(3/2) - + # pi^2*exp(cos(2*pi*x)/2 + cos(2*pi*y)/2)*sin(2*pi*x)*sin(2*pi*y) + + x = xx[1] + y = xx[2] + sqn2 = (x^2 + y^2) / 2 + cosx = cos(2 * π * x) + cosy = cos(2 * π * y) + comp1 = exp(-(sqn2)^(1/2) / 5) + comp2 = exp((cosx + cosy) / 2) + + v = -20 * comp1 - comp2 + 20 + ℯ + + sinx = sin(2 * π * x) + siny = sin(2 * π * y) + + g = zeros(2) # \nabla f(x) + g[1] = π * comp2 * sinx + 2 * x * comp1 / (sqn2)^(1/2) + g[2] = π * comp2 * siny + 2 * y * comp1 / (sqn2)^(1/2) + + H = zeros(2, 2) + + H[1, 1] = (2*comp1)/(sqn2)^(1/2) + 2*π^2*comp2*cosx + + - (x^2*comp1)/(5*sqn2) - (x^2*comp1)/(sqn2)^(3/2) + + - π^2*comp2*sinx^2 + + H[2, 2] = (2*comp1)/(sqn2)^(1/2) + 2*π^2*comp2*cosy + + - (y^2*comp1)/(5*sqn2) - (y^2*comp1)/(sqn2)^(3/2) + + - π^2*comp2*siny^2 + + H[1, 2] = -(x*y*comp1)/(5*(sqn2)) + + - (x*y*comp1)/(sqn2)^(3/2) + + - π^2*comp2*sinx*siny + + H[2, 1] = H[1, 2] + else + error("first you need to find the ackley_Hes and ackley_Grd files :/") + (H, g, v) = ackley_Hes(xx) + g = g' + + (g, v) = ackley_Grd(xx) + + v = - 20 * exp( - ( ( xx[1]^2 + xx[2]^2 ) / 2 )^(1/2) / 5 ) + + -exp( cos( 2 * π * xx[1] ) / 2 + + cos( 2 * π * xx[2] ) / 2 ) + 20 + ℯ + end + return (v, g, H) + end +end # ackley + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function lasso(x::Union{Nothing, AbstractVecOrMat}) + # nondifferentiable lasso example: + # + # f( x , y ) = || 3 * x + 2 * y - 2 ||_2^2 + 10 ( | x | + | y | ) + + if isnothing(x) # informative call + v = ( 2 - 1/3 )^2 + 10/9 # optimal solution [ 1/9 , 0 ] + return (v, [0, 0]) + else + v = ( 3 * x( 1 ) + 2 * x( 2 ) - 2 )^2 + + 10 * ( abs( x( 1 ) ) + abs( x( 2 ) ) ) # f(x) + + g = zeros(2) + g[1] = 18 * x[1] + 12 * x[2] - 12 + 10 * sign( x[1] ) + g[2] = 12 * x[1] + 8 * x[2] - 8 + 10 * sign( x[2] ) + + return (v, g) + end +end # lasso + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +include("./testNN_Jac.jl") +include("./testNN_Hes.jl") +include("testNN.jl") + +function myNN(x::Union{Nothing, AbstractVecOrMat}) + # 1 x 5 x 5 x 5 x 1 = 76 w NN for solving a 1D fitting problem + + if isnothing(x) # informative call + v = -Inf; # optimal value unknown (although 0 may perhaps be good) + # Xavier initialization: uniform random in [ - A , A ] with + # A = \sqrt{6} / \sqrt{n + m}, with n and m the input and output + # layers. in our case n + m is either 6 or 10, so we take A = 1 + # + # note that starting point is random, so each run will be different + # (unless an explicit starting point is provided); if stability is + # neeed, the seed of the generator has to be set externally + return (v, 2 * rand(76, 1) - 1) + else + v = testNN(x) # f(x) + return (v, testNN_Jac(x)', testNN_Hes(x)') + end +end # myNN + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function myNN2(x::Union{Nothing, AbstractVecOrMat}) + # 1 x 5 x 5 x 5 x 1 = 76 w NN for solving a 1D fitting problem + # plus ridge stabilization \lambda || x ||^2 / 2 + + lambda = 1e+2 + + if isnothing(x) # informative call + v = -Inf # optimal value unknown (although 0 may perhaps be good) + # Xavier initialization: uniform random in [ - A , A ] with + # A = \sqrt{6} / \sqrt{n + m}, with n and m the input and output + # layers. in our case n + m is either 6 or 10, so we take A = 1 + # + # note that starting point is random, so each run will be different + # (unless an explicit starting point is provided); if stability is + # neeed, the seed of the generator has to be set externally + return (v, 2 * rand(76, 1) - 1) + else + v = testNN(x) + lambda * x' * x / 2 # f(x) + return (v, testNN_Jac(x)' + lambda * x, testNN_Hes(x)' + lambda * I) + end +end # myNN2 + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/11-09/TestFunctions/roughNN.jl b/11-09/TestFunctions/roughNN.jl new file mode 100644 index 0000000..69719c4 --- /dev/null +++ b/11-09/TestFunctions/roughNN.jl @@ -0,0 +1,43 @@ +function roughNN(w, x) +# +# v = roughNN( w , x ) +# +# returns the falue of the function v = f( x ) as currently estimated by +# a small NN with 1 input, 1 output, 3 hidden layers of 5 nodes each, and +# tanh activation function. +# +# Input: +# +# - w is the [ 76 x 1 ] real vector containing the weights of the NN, +# i.e., w is made as follows: +# [ 1 .. 5 ] are the [ 5 x 1 ] weigths of the first layer +# [ 6 .. 10 ] are the [ 5 x 1 ] biases of the first layer +# [ 11 .. 35 ] are the [ 5 x 5 ] weigths of the second layer +# [ 36 .. 40 ] are the [ 5 x 1 ] biases of the second layer +# [ 41 .. 65 ] are the [ 5 x 5 ] weigths of the third layer +# [ 66 .. 70 ] are the [ 5 x 1 ] biases of the third layer +# [ 71 .. 75 ] are the [ 5 x 1 ] weigths of the fourth (output) layer +# [ 76 ] is the [ 1 x 1 ] bias of the fourth (output) layer +# +# - x is the real scalar containing the input of f() +# +# Output: +# +# - v (real, scalar): v = f( x ) as estimated by the NN with weights w +# +#{ +# ======================================= +# Author: Antonio Frangioni +# Date: 28-08-22 +# Version 1.00 +# Copyright Antonio Frangioni +# ======================================= +#} + + g = tanh( (ones(5, 1) * x ) .* w( 1 : 5 ) + w( 6:10 ) ) + g = tanh( reshape( w( 11:35 ) , (5, 5) ) * g + w( 36:40 ) ) + g = tanh( reshape( w( 41:65 ) , (5, 5) ) * g + w( 66:70 ) ) + v = g' * w( 71:75 ) + w( 76 ) + + return v +end diff --git a/11-09/TestFunctions/testNN.jl b/11-09/TestFunctions/testNN.jl new file mode 100644 index 0000000..15e90de --- /dev/null +++ b/11-09/TestFunctions/testNN.jl @@ -0,0 +1,628 @@ +include("./roughNN.jl") + +function testNN(w) +# +# v = testNN( w ) +# +# returns the falue of the empirical error of the NN (or, in fact, +# whatever function is encoded in 'roughNN()') with the weights contained +# in w. +# +# The empirical error is estimated over a 288-strong input/output pair +# ( X , y ), with X containing only one feature, that is hard-coded into +# the function so that its gradient can be easily computed by ADiGator. +# +# Input: +# +# - w is the real vector containing the weights of the NN, see roughNN +# for details +# +# Output: +# +# - the MSE of the error done by roughNN() on the given test set +# +#{ +# ======================================= +# Author: Antonio Frangioni +# Date: 28-08-22 +# Version 1.00 +# Copyright Antonio Frangioni +# ======================================= +#} + +N = 288 # size + +# inputs +X = [ +0.0000000000000000 +0.0034843205574913 +0.0069686411149826 +0.0104529616724739 +0.0139372822299652 +0.0174216027874564 +0.0209059233449477 +0.0243902439024390 +0.0278745644599303 +0.0313588850174216 +0.0348432055749129 +0.0383275261324042 +0.0418118466898955 +0.0452961672473868 +0.0487804878048781 +0.0522648083623693 +0.0557491289198606 +0.0592334494773519 +0.0627177700348432 +0.0662020905923345 +0.0696864111498258 +0.0731707317073171 +0.0766550522648084 +0.0801393728222996 +0.0836236933797909 +0.0871080139372822 +0.0905923344947735 +0.0940766550522648 +0.0975609756097561 +0.1010452961672474 +0.1045296167247387 +0.1080139372822300 +0.1114982578397213 +0.1149825783972125 +0.1184668989547038 +0.1219512195121951 +0.1254355400696864 +0.1289198606271777 +0.1324041811846690 +0.1358885017421603 +0.1393728222996516 +0.1428571428571428 +0.1463414634146341 +0.1498257839721254 +0.1533101045296167 +0.1567944250871080 +0.1602787456445993 +0.1637630662020906 +0.1672473867595819 +0.1707317073170732 +0.1742160278745645 +0.1777003484320558 +0.1811846689895470 +0.1846689895470383 +0.1881533101045296 +0.1916376306620209 +0.1951219512195122 +0.1986062717770035 +0.2020905923344948 +0.2055749128919861 +0.2090592334494774 +0.2125435540069686 +0.2160278745644599 +0.2195121951219512 +0.2229965156794425 +0.2264808362369338 +0.2299651567944251 +0.2334494773519164 +0.2369337979094077 +0.2404181184668990 +0.2439024390243902 +0.2473867595818815 +0.2508710801393728 +0.2543554006968641 +0.2578397212543554 +0.2613240418118467 +0.2648083623693380 +0.2682926829268293 +0.2717770034843205 +0.2752613240418119 +0.2787456445993031 +0.2822299651567944 +0.2857142857142857 +0.2891986062717770 +0.2926829268292683 +0.2961672473867596 +0.2996515679442509 +0.3031358885017422 +0.3066202090592334 +0.3101045296167247 +0.3135888501742160 +0.3170731707317073 +0.3205574912891986 +0.3240418118466899 +0.3275261324041812 +0.3310104529616725 +0.3344947735191638 +0.3379790940766551 +0.3414634146341464 +0.3449477351916376 +0.3484320557491289 +0.3519163763066202 +0.3554006968641115 +0.3588850174216028 +0.3623693379790941 +0.3658536585365854 +0.3693379790940767 +0.3728222996515679 +0.3763066202090593 +0.3797909407665505 +0.3832752613240418 +0.3867595818815331 +0.3902439024390244 +0.3937282229965157 +0.3972125435540070 +0.4006968641114982 +0.4041811846689896 +0.4076655052264808 +0.4111498257839721 +0.4146341463414634 +0.4181184668989547 +0.4216027874564460 +0.4250871080139373 +0.4285714285714285 +0.4320557491289199 +0.4355400696864111 +0.4390243902439024 +0.4425087108013937 +0.4459930313588850 +0.4494773519163763 +0.4529616724738676 +0.4564459930313589 +0.4599303135888502 +0.4634146341463415 +0.4668989547038327 +0.4703832752613241 +0.4738675958188153 +0.4773519163763066 +0.4808362369337979 +0.4843205574912892 +0.4878048780487805 +0.4912891986062718 +0.4947735191637631 +0.4982578397212544 +0.5017421602787456 +0.5052264808362370 +0.5087108013937283 +0.5121951219512195 +0.5156794425087108 +0.5191637630662020 +0.5226480836236933 +0.5261324041811847 +0.5296167247386759 +0.5331010452961673 +0.5365853658536586 +0.5400696864111498 +0.5435540069686411 +0.5470383275261324 +0.5505226480836236 +0.5540069686411150 +0.5574912891986064 +0.5609756097560976 +0.5644599303135889 +0.5679442508710801 +0.5714285714285714 +0.5749128919860627 +0.5783972125435540 +0.5818815331010453 +0.5853658536585367 +0.5888501742160279 +0.5923344947735192 +0.5958188153310104 +0.5993031358885017 +0.6027874564459930 +0.6062717770034843 +0.6097560975609756 +0.6132404181184670 +0.6167247386759582 +0.6202090592334495 +0.6236933797909407 +0.6271777003484320 +0.6306620209059233 +0.6341463414634146 +0.6376306620209059 +0.6411149825783973 +0.6445993031358885 +0.6480836236933798 +0.6515679442508711 +0.6550522648083623 +0.6585365853658536 +0.6620209059233449 +0.6655052264808362 +0.6689895470383276 +0.6724738675958188 +0.6759581881533101 +0.6794425087108014 +0.6829268292682926 +0.6864111498257840 +0.6898954703832753 +0.6933797909407666 +0.6968641114982579 +0.7003484320557491 +0.7038327526132404 +0.7073170731707317 +0.7108013937282229 +0.7142857142857143 +0.7177700348432056 +0.7212543554006969 +0.7247386759581882 +0.7282229965156795 +0.7317073170731707 +0.7351916376306620 +0.7386759581881532 +0.7421602787456446 +0.7456445993031359 +0.7491289198606272 +0.7526132404181185 +0.7560975609756098 +0.7595818815331010 +0.7630662020905923 +0.7665505226480837 +0.7700348432055749 +0.7735191637630662 +0.7770034843205575 +0.7804878048780488 +0.7839721254355401 +0.7874564459930313 +0.7909407665505226 +0.7944250871080140 +0.7979094076655052 +0.8013937282229965 +0.8048780487804879 +0.8083623693379791 +0.8118466898954704 +0.8153310104529616 +0.8188153310104529 +0.8222996515679443 +0.8257839721254355 +0.8292682926829268 +0.8327526132404182 +0.8362369337979094 +0.8397212543554007 +0.8432055749128919 +0.8466898954703833 +0.8501742160278746 +0.8536585365853658 +0.8571428571428572 +0.8606271777003485 +0.8641114982578397 +0.8675958188153310 +0.8710801393728222 +0.8745644599303136 +0.8780487804878049 +0.8815331010452961 +0.8850174216027875 +0.8885017421602788 +0.8919860627177700 +0.8954703832752613 +0.8989547038327526 +0.9024390243902439 +0.9059233449477352 +0.9094076655052264 +0.9128919860627178 +0.9163763066202091 +0.9198606271777003 +0.9233449477351916 +0.9268292682926830 +0.9303135888501742 +0.9337979094076655 +0.9372822299651568 +0.9407665505226481 +0.9442508710801394 +0.9477351916376306 +0.9512195121951219 +0.9547038327526133 +0.9581881533101045 +0.9616724738675958 +0.9651567944250871 +0.9686411149825784 +0.9721254355400697 +0.9756097560975610 +0.9790940766550522 +0.9825783972125436 +0.9860627177700348 +0.9895470383275261 +0.9930313588850174 +0.9965156794425087 +1.0000000000000000] + +# outputs +y = [ +0.096798166000 +0.143459740000 +0.208317990000 +-0.038018393000 +0.148793230000 +0.512799550000 +-0.120798510000 +0.177158750000 +0.083816932000 +0.000756494710 +0.006887211700 +0.213572840000 +0.493783350000 +0.035274935000 +0.243769090000 +0.087417919000 +0.476797600000 +0.271438160000 +0.178877000000 +0.302770820000 +0.219586200000 +0.397548740000 +0.215089090000 +0.086588415000 +0.304056660000 +0.513946170000 +0.113409000000 +0.270068060000 +0.471061630000 +0.046628439000 +0.443157150000 +0.477349380000 +0.411852220000 +0.280063680000 +0.410626170000 +0.442082230000 +0.585090200000 +0.561297160000 +0.426446760000 +0.739395540000 +0.506414480000 +0.409925250000 +0.483992110000 +0.696575460000 +0.615166110000 +0.737349800000 +0.632542540000 +1.013287300000 +0.408451860000 +0.613835270000 +0.681370910000 +0.724988310000 +0.947395900000 +0.779004190000 +0.745667780000 +0.789666080000 +0.908202240000 +0.707755840000 +0.894037990000 +0.606428220000 +0.843615470000 +0.727874550000 +0.784348430000 +0.937189250000 +0.737952220000 +0.769620390000 +0.701166820000 +0.604155740000 +0.924881630000 +1.130475900000 +0.936493470000 +0.935667120000 +0.819976810000 +1.219958800000 +0.949769640000 +1.185254200000 +1.048672000000 +0.957402250000 +1.160938800000 +1.147023700000 +0.983283410000 +1.194051400000 +1.265849000000 +0.987167510000 +0.956395550000 +1.052589900000 +1.041239900000 +1.105649800000 +0.941725790000 +1.082398200000 +1.127045200000 +0.990602660000 +0.980803460000 +0.763155870000 +0.768571290000 +0.718186990000 +0.743430540000 +0.899271220000 +0.672586160000 +1.243876900000 +1.009891400000 +0.580803050000 +0.709665650000 +0.858643730000 +0.609667610000 +0.789520360000 +1.014111700000 +0.817911210000 +0.824534040000 +0.676622590000 +0.735885580000 +0.609022520000 +0.859070820000 +0.729465540000 +0.907844320000 +0.969161960000 +0.938595000000 +0.765435590000 +0.688922170000 +0.574990840000 +0.770659830000 +0.891310740000 +0.690971710000 +0.711048000000 +0.824634750000 +0.857126400000 +0.510549630000 +0.748820900000 +0.744129450000 +0.688191070000 +0.841053850000 +0.648943870000 +0.576231820000 +0.738291460000 +0.762720980000 +0.658108930000 +0.807248650000 +0.457323660000 +0.521077750000 +0.218860160000 +0.755337450000 +0.525976310000 +0.634217410000 +0.821176590000 +0.675074910000 +0.599022390000 +0.535501720000 +0.624415250000 +0.748616920000 +0.428448630000 +0.643341520000 +0.768654000000 +0.435878620000 +0.747073780000 +0.746823840000 +0.509674810000 +0.413964070000 +0.702246380000 +0.756141550000 +0.719368010000 +0.744580020000 +0.450466060000 +0.713008860000 +0.536099090000 +0.536595750000 +0.385158420000 +0.781369420000 +0.640457830000 +0.762680940000 +0.836824400000 +0.437730550000 +0.703038130000 +0.603083350000 +0.740709380000 +0.768477480000 +0.724346000000 +0.477804350000 +0.580883120000 +0.639146320000 +1.073252500000 +0.783713950000 +0.948384040000 +0.663369380000 +0.634232460000 +0.696070360000 +0.526957260000 +0.794798220000 +0.587766610000 +0.408654360000 +0.749043110000 +0.387306230000 +0.350567280000 +0.675537030000 +0.495158740000 +0.507149810000 +0.625867220000 +0.583647850000 +0.630796900000 +0.712643020000 +0.504536230000 +0.504499780000 +0.381836730000 +0.647114640000 +0.814415180000 +0.618741310000 +0.808727320000 +0.824111580000 +0.901249190000 +0.910594790000 +0.668334220000 +0.652467030000 +0.797380800000 +0.699257390000 +1.025428600000 +1.022629700000 +0.837597600000 +0.766407010000 +0.913657810000 +0.744506570000 +0.829397600000 +0.773018020000 +0.872046570000 +1.028215500000 +0.972177970000 +1.033239200000 +0.724398150000 +0.887466840000 +0.710846670000 +0.912868530000 +0.899725750000 +1.039970600000 +1.003988400000 +0.929601600000 +0.747319110000 +0.742110530000 +0.495198080000 +0.724133980000 +0.546209190000 +0.904975290000 +0.886555800000 +0.756973180000 +0.663691170000 +0.725449860000 +0.927661000000 +0.871628610000 +0.583857660000 +0.657822350000 +0.445564610000 +0.654537190000 +0.685853290000 +0.690412010000 +0.306045040000 +0.591718740000 +0.366728870000 +0.420310670000 +0.575582700000 +0.482907520000 +0.394669790000 +0.491601190000 +0.627475460000 +0.270874460000 +0.144405290000 +0.155561360000 +0.171715630000 +0.196642150000 +0.368318080000 +-0.046015957000 +0.287831380000 +0.121822920000 +0.390236930000 +0.084253654000 +0.201575720000 +0.048222309000 +0.075602342000 +0.128340910000 +0.123106810000 +0.069294711000 +0.308367180000 +0.213239800000 +0.401070710000 +0.073746174000 +0.268322470000 +-0.213145400000 +0.191332180000 +0.145485930000 +0.028213679000 +0.183566020000 +0.206160990000] + + # compute MSE of prediction on all ( X( i ) , y( i ) ) + + v = 0 # return value + + for i = 1:N # for all input / output pairs + v = v + ( y[i] - roughNN( w , X[i] ) )^2 + end + + v = v / 2 + + return v +end diff --git a/11-09/TestFunctions/testNN_Hes.jl b/11-09/TestFunctions/testNN_Hes.jl new file mode 100644 index 0000000..649f1be --- /dev/null +++ b/11-09/TestFunctions/testNN_Hes.jl @@ -0,0 +1,26 @@ +# function [Grd,Fun] = testNN_Grd(w) +# +# Gradient wrapper file generated by ADiGator +# ©2010-2014 Matthew J. Weinstein and Anil V. Rao +# ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +# Contact: mweinstein@ufl.edu +# Bugs/suggestions may be reported to the sourceforge forums +# DISCLAIMER +# ADiGator is a general-purpose software distributed under the GNU General +# Public License version 3.0. While the software is distributed with the +# hope that it will be useful, both the software and generated code are +# provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +# or fitness for any purpose or application. + +function testNN_Hes(w) + gator_w.f = w + gator_w.dw = ones(76,1) + v = testNN_ADiGatorHes(gator_w) + xind1 = v.dwdw_location(:,1) + xind2 = v.dwdw_location(:,2) + Hes = zeros(76,76) + Hes[(xind2-1)*76 + xind1] = v.dwdw + Grd = reshape(v.dw,[1 76]) + Fun = v.f + return (Hes, Grd, Fun) +end diff --git a/11-09/TestFunctions/testNN_Jac.jl b/11-09/TestFunctions/testNN_Jac.jl new file mode 100644 index 0000000..4cab98e --- /dev/null +++ b/11-09/TestFunctions/testNN_Jac.jl @@ -0,0 +1,23 @@ +# function [Jac,Fun] = testNN_Jac(w) +# +# Jacobian wrapper file generated by ADiGator +# ©2010-2014 Matthew J. Weinstein and Anil V. Rao +# ADiGator may be obtained at https://sourceforge.net/projects/adigator/ +# Contact: mweinstein@ufl.edu +# Bugs/suggestions may be reported to the sourceforge forums +# DISCLAIMER +# ADiGator is a general-purpose software distributed under the GNU General +# Public License version 3.0. While the software is distributed with the +# hope that it will be useful, both the software and generated code are +# provided 'AS IS' with NO WARRANTIES OF ANY KIND and no merchantability +# or fitness for any purpose or application. + +function testNN_Jac(w) + gator_w.f = w + gator_w.dw = ones(76,1) + v = testNN_ADiGatorJac(gator_w) + Jac = reshape(v.dw, (1, 76)) + Fun = v.f + + return (Jac, Fun) +end diff --git a/11-09/Untitled.ipynb b/11-09/Untitled.ipynb new file mode 100644 index 0000000..c58f437 --- /dev/null +++ b/11-09/Untitled.ipynb @@ -0,0 +1,570 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 27, + "id": "cb5170b7-6a4c-415f-8675-8382c5ce837c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "NWTN (generic function with 1 method)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using LinearAlgebra, Printf, Plots\n", + "\n", + "function NWTN(f;\n", + " x::Union{Nothing, Vector}=nothing,\n", + " eps::Real=1e-6,\n", + " MaxFeval::Integer=1000,\n", + " m1::Real=1e-4,\n", + " m2::Real=0.9,\n", + " delta::Real=1e-6,\n", + " tau::Real=0.9,\n", + " sfgrd::Real=0.2,\n", + " MInf::Real=-Inf,\n", + " mina::Real=1e-16,\n", + " plt::Union{Plots.Plot, Nothing}=nothing,\n", + " plotatend::Bool=true,\n", + " Plotf::Integer=0,\n", + " printing::Bool=true)::Tuple{AbstractArray, String}\n", + "\n", + " \n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # inner functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " function f2phi(alpha, derivate=false)\n", + " # computes and returns the value of the tomography at alpha\n", + " #\n", + " # phi( alpha ) = f( x + alpha * d )\n", + " #\n", + " # if Plotf > 2 saves the data in gap() for plotting\n", + " #\n", + " # if the second output parameter is required, put there the derivative\n", + " # of the tomography in alpha\n", + " #\n", + " # phi'( alpha ) = < \\nabla f( x + alpha * d ) , d >\n", + " #\n", + " # saves the point in lastx, the gradient in lastg, the Hessian in lasth,\n", + " # and increases feval\n", + " \n", + " lastx = x + alpha * d\n", + " phi, lastg, lastH = f(lastx)\n", + " \n", + " if Plotf > 2\n", + " if fStar > - Inf\n", + " push!(gap, (phi - fStar) / max(abs(fStar), 1))\n", + " else\n", + " push!(gap, phi)\n", + " end\n", + " end\n", + "\n", + " feval += 1\n", + "\n", + " if derivate\n", + " return (phi, dot(d, lastg))\n", + " end\n", + " return (phi, nothing)\n", + " end\n", + "\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " \n", + " function ArmijoWolfeLS(phi0, phip0, as, m1, m2, tau)\n", + " # performs an Armijo-Wolfe Line Search.\n", + " #\n", + " # phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0\n", + " #\n", + " # as > 0 is the first value to be tested: if phi'( as ) < 0 then as is\n", + " # divided by tau < 1 (hence it is increased) until this does not happen\n", + " # any longer\n", + " #\n", + " # m1 and m2 are the standard Armijo-Wolfe parameters; note that the strong\n", + " # Wolfe condition is used\n", + " #\n", + " # returns the optimal step and the optimal f-value\n", + " \n", + " lsiter = 1 # count iterations of first phase\n", + " local phips, phia\n", + " while feval ≤ MaxFeval \n", + " phia, phips = f2phi(as, true)\n", + " \n", + " if (phia ≤ phi0 + m1 * as * phip0) && (abs(phips) ≤ - m2 * phip0)\n", + " if printing\n", + " @printf(\" %2d\", lsiter)\n", + " end\n", + " a = as;\n", + " return (a, phia) # Armijo + strong Wolfe satisfied, we are done\n", + " \n", + " end\n", + " if phips ≥ 0\n", + " break\n", + " end\n", + " as = as / tau\n", + " lsiter += 1\n", + " end \n", + "\n", + " if printing\n", + " @printf(\" %2d \", lsiter)\n", + " end\n", + " lsiter = 1 # count iterations of second phase\n", + " \n", + " am = 0\n", + " a = as\n", + " phipm = phip0\n", + " while (feval ≤ MaxFeval ) && ((as - am)) > mina && (phips > 1e-12)\n", + " \n", + " # compute the new value by safeguarded quadratic interpolation\n", + " a = (am * phips - as * phipm) / (phips - phipm)\n", + " a = max(am + ( as - am ) * sfgrd, min(as - ( as - am ) * sfgrd, a))\n", + " \n", + " # compute phi(a)\n", + " phia, phip = f2phi(a, true)\n", + " \n", + " if (phia ≤ phi0 + m1 * a * phip0) && (abs(phip) ≤ -m2 * phip0)\n", + " break # Armijo + strong Wolfe satisfied, we are done\n", + " end\n", + " \n", + " # restrict the interval based on sign of the derivative in a\n", + " if phip < 0\n", + " am = a\n", + " phipm = phip\n", + " else\n", + " as = a\n", + " if as ≤ mina\n", + " break\n", + " end\n", + " phips = phip\n", + " end\n", + " lsiter += 1\n", + " end\n", + "\n", + " if printing\n", + " @printf(\"%2d\", lsiter)\n", + " end\n", + " return (a, phia)\n", + " end\n", + "\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " function BacktrackingLS(phi0, phip0, as, m1, tau)\n", + " # performs a Backtracking Line Search.\n", + " #\n", + " # phi0 = phi( 0 ), phip0 = phi'( 0 ) < 0\n", + " #\n", + " # as > 0 is the first value to be tested, which is decreased by\n", + " # multiplying it by tau < 1 until the Armijo condition with parameter\n", + " # m1 is satisfied\n", + " #\n", + " # returns the optimal step and the optimal f-value\n", + " \n", + " lsiter = 1 # count ls iterations\n", + " while feval ≤ MaxFeval && as > mina\n", + " phia, _ = f2phi(as)\n", + " if phia ≤ phi0 + m1 * as * phip0 # Armijo satisfied\n", + " break # we are done\n", + " end\n", + " as *= tau\n", + " lsiter += 1\n", + " end\n", + "\n", + " if printing\n", + " @printf(\" %2d\", lsiter)\n", + " end\n", + "\n", + " return (as, phia)\n", + " end\n", + " \n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " #Plotf = 2\n", + " # 0 = nothing is plotted\n", + " # 1 = the level sets of f and the trajectory are plotted (when n = 2)\n", + " # 2 = the function value / gap are plotted, iteration-wise\n", + " # 3 = the function value / gap are plotted, function-evaluation-wise\n", + "\n", + " Interactive = false\n", + "\n", + " PXY = Matrix{Real}(undef, 2, 0)\n", + "\n", + " local gap\n", + " if Plotf > 1\n", + " if Plotf == 2\n", + " MaxIter = 50 # expected number of iterations for the gap plot\n", + " else\n", + " MaxIter = 70 # expected number of iterations for the gap plot\n", + " end\n", + " gap = []\n", + " end\n", + "\n", + " if Plotf == 2 && plt == nothing\n", + " plt = plot(xlims=(0, MaxIter), ylims=(1e-15, 1e+1))\n", + " end\n", + " if Plotf > 1 && plt == nothing\n", + " plt = plot(xlims=(0, MaxIter))\n", + " end\n", + " if plt == nothing\n", + " plt = plot()\n", + " end\n", + "\n", + " local fStar\n", + " if isnothing(x)\n", + " (fStar, x, _) = f(nothing)\n", + " else\n", + " (fStar, _, _) = f(nothing)\n", + " end\n", + "\n", + " n = size(x, 1)\n", + "\n", + " if m1 ≤ 0 || m1 ≥ 1\n", + " throw(ArgumentError(\"m1 is not in (0 ,1)\"))\n", + " end\n", + "\n", + " AWLS = (m2 > 0 && m2 < 1)\n", + "\n", + " if delta < 0\n", + " throw(ArgumentError(\"delta must be ≥ 0\"))\n", + " end\n", + "\n", + " if tau ≤ 0 || tau ≥ 1\n", + " throw(ArgumentError(\"tau is not in (0 ,1)\"))\n", + " end\n", + "\n", + " if sfgrd ≤ 0 || sfgrd ≥ 1\n", + " throw(ArgumentError(\"sfgrd is not in (0, 1)\"))\n", + " end\n", + "\n", + " if mina < 0\n", + " throw(ArgumentError(\"mina must be ≥ 0\"))\n", + " end\n", + "\n", + " # \"global\" variables- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " \n", + " lastx = zeros(n) # last point visited in the line search\n", + " lastg = zeros(n) # gradient of lastx\n", + " lastH = zeros(n, n) # Hessian of lastx\n", + " d = zeros(n) # Newton's direction\n", + " feval = 0 # f() evaluations count (\"common\" with LSs)\n", + "\n", + " status = \"error\"\n", + " \n", + " # initializations - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " if fStar > -Inf\n", + " prevv = Inf\n", + " end\n", + "\n", + " if printing\n", + " @printf(\"Newton's method\\n\")\n", + " if fStar > -Inf\n", + " @printf(\"feval\\trel gap\\t\\t|| g(x) ||\\trate\\t\\tdelta\")\n", + " else\n", + " @printf(\"feval\\tf(x)\\t\\t\\t|| g(x) ||\\tdelta\")\n", + " end\n", + " @printf(\"\\t\\tls it\\ta*\")\n", + " @printf(\"\\n\\n\")\n", + " end\n", + "\n", + " \n", + " v, _ = f2phi(0)\n", + " ng = norm(lastg)\n", + " if eps < 0\n", + " ng0 = -ng # norm of first subgradient: why is there a \"-\"? ;-)\n", + " else\n", + " ng0 = 1 # un-scaled stopping criterion\n", + " end\n", + "\n", + " # main loop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " while true\n", + "\n", + " # output statistics - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " \n", + " if fStar > -Inf\n", + " gapk = ( v - fStar ) / max(abs( fStar ), 1)\n", + "\n", + " if printing\n", + " @printf(\"%4d\\t%1.4e\\t%1.4e\", feval, gapk, ng)\n", + " if prevv < Inf\n", + " @printf(\"\\t%1.4e\", ( v - fStar ) / ( prevv - fStar ))\n", + " else\n", + " @printf(\"\\t\\t\")\n", + " end\n", + " end\n", + " prevv = v\n", + " \n", + " if Plotf > 1\n", + " if Plotf ≥ 2\n", + " push!(gap, gapk)\n", + " end\n", + " end\n", + " else\n", + " if printing\n", + " @printf(\"%4d\\t%1.8e\\t\\t%1.4e\", feval, v, ng)\n", + " end\n", + " \n", + " if Plotf > 1\n", + " if Plotf ≥ 2\n", + " push!(gap, v)\n", + " end\n", + " end\n", + " end\n", + "\n", + " # stopping criteria - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " if ng ≤ eps * ng0\n", + " status = \"optimal\"\n", + " break\n", + " end\n", + " \n", + " if feval > MaxFeval\n", + " status = \"stopped\"\n", + " break\n", + " end\n", + " \n", + " # compute Newton's direction- - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " lambdan = eigmin(lastH) # smallest eigenvalue\n", + " if lambdan < delta\n", + " if printing\n", + " @printf(\"\\t%1.4e\", delta - lambdan)\n", + " end\n", + " lastH = lastH + (delta - lambdan) * I\n", + " else\n", + " if printing\n", + " @printf(\"\\t0.00e+00\")\n", + " end\n", + " end\n", + " d = -lastH \\ lastg\n", + " phip0 = lastg' * d\n", + " \n", + " # compute step size - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # in Newton's method, the default initial stepsize is 1\n", + " \n", + " if AWLS\n", + " a, v = ArmijoWolfeLS(v, phip0, 1, m1, m2, tau)\n", + " else\n", + " a, v = BacktrackingLS(v, phip0, 1, m1, tau)\n", + " end\n", + " \n", + " # output statistics - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + "\n", + " if printing\n", + " @printf(\"\\t%1.2e\", a)\n", + " @printf(\"\\n\")\n", + " end\n", + " \n", + " if a ≤ mina\n", + " status = \"error\"\n", + " break\n", + " end\n", + " \n", + " if v ≤ MInf\n", + " status = \"unbounded\"\n", + " break\n", + " end\n", + " \n", + " # compute new point - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " \n", + " # possibly plot the trajectory\n", + " if n == 2 && Plotf == 1\n", + " PXY = hcat(PXY, hcat(x, lastx))\n", + " end\n", + " \n", + " x = lastx\n", + " ng = norm(lastg)\n", + "\n", + " # iterate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " \n", + " if Interactive\n", + " readline()\n", + " end\n", + " end\n", + "\n", + " if plotatend\n", + " if Plotf ≥ 2\n", + " plot!(plt, gap)\n", + " elseif Plotf == 1 && n == 2\n", + " plot!(plt, PXY[1, :], PXY[2, :])\n", + " end\n", + " display(plt)\n", + " end\n", + "\n", + " # end of main loop- - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n", + " return (x, status)\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9fa92a74-19bc-46b3-92de-d39aa74f0075", + "metadata": {}, + "outputs": [], + "source": [ + "include(\"./TestFunctions/TestFunctions.jl\")\n", + "TF = TestFunctions();" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "14e530e5-1b32-4a3e-ac62-b67fd8723f06", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x4wZ880331T9xbhDkWWZc/7ZZ5917dr1jhusWrWqfv36ps3Wr18fHh5uegwW0b59+y+++ML0uFu3bh9//PEtG3z33Xc9evSweV3aJMtyeHj4unXrTI8bNGjw448/3rLNCy+8MHbsWNPjiRMnjhw50tZVald+fr67u3tqairnvLi42MvLKykp6ZZtnnnmmWnTpqlRnfaZDt0ffvhh796977jB8uXLmzRpoigK53z16tX16tUzPa4CB+sI73sR5a5du7p162barHv37ufPn09PT7dJadpXUVGxb9++uLg405dxcXE7d+68fbPMzMzZs2cvXLgwJyfHtgVqTXp6+rlz57p3705EjLFu3brdvsN37dp1398IVE1CQoKPj0+DBg2IyM3NrX379rt27brjZrNmzVqxYoX564GAOe57tN+5c2dcXJwgCEQUFxd34sSJKt8Sx8GC8L6ysrIqlz5ydnb29vbOyspStyTNyMnJURTF39/f9GVAQMDt+9bT07NZs2b5+fnr1q1r0KBBYmKizcvUjqysLC8vr8pxqYCAgMzMzNu3qfzA+/v7Z2dncyyRYSHZ2dk3r6N2x/0fGhoaGBiYn5//wQcftGjR4tq1a7atUddu/vB7eHi4ublV+Whvd0E4a9Ysw218fHzM/HaDwSDLcuWXFRUVTk5O1qlUm/71r3/dvv9jYmKIyLSmVOUw1R33bZ8+fZYuXTpt2rQ1a9aMHDly8uTJNq5fS4xG482DghUVFbcvq2YwGCq3kSTJYDCY/kCGh3f7weT2/f/6669//vnn77///r59+1xdXb/66ivb1qhrt/wDkSSpykd7uwvCiRMnSre5evWqmd9umsdhelxQUFBUVHT7zEa4hy+//PL2/f/nn38SUY0aNYxGY+XuzcjIuPeM0Hbt2mH6wMMIDg4uLi6unJF0xx0eEhJS2aZkZGSEhITYtERNCw4OzszMrOyw7/2BF0WxTZs2+MDb0s0f/tzc3PLy8iof7e0uCKtm+/btBQUFRBQfH//LL78UFRUR0apVq2JiYjB931IYY3369Fm5ciURSZK0Zs2afv36EdH169e3bdtWXl5ORJXTRDnn69evx2z+hxEcHBwTE7Nq1SoiKioq2rRpk2mHFxQUbN++3bRNfHy86TdCRCtXroyPj1erWu1p1aqVKIqmXZ2RkbF///5HH32UiLKzs//44w/TNqWlpaYHJSUlW7duxQfe2jjn27ZtKywsJKL4+PgNGzaUlJQQ0apVq9q3b+/r61v1n+tAtm7d2rJly7CwME9Pz5YtW77++uum5xlju3fvNj0eOHBg06ZNR44cWb169c2bN6tXrAYlJSVVr1592LBhbdu2jY2NLSsr45yfO3eOiEx/O/fv379Lly4jRoxo3rx5RETEqVOn1C7Zsf32229+fn4jR45s2rTpwIEDTU/u3r2bMWZ6fOnSpaioqJ49e/bv379WrVoXL15Ur1gNWrhwob+//5gxYyIiIiZMmGB6cvHixZGRkabHQUFBffv2HT58eGhoaFxcnOlfBFjEpk2bvHv3jgAAAWZJREFUWrZsGRoa6u3t3bJlyylTpnDOKyoqiOjAgQOcc0VR+vbt27x585EjR/r5+e3YsaPKr+Vgd5+4evXqzScffH19w8PDiejgwYMNGjTw8PAgIs75zp07s7OzY2NjQ0NDVatVoy5durR9+/Zq1ap16dLFNGpYXl6enJwcHR1tNBqvXr164MCBvLy84ODgtm3bYoD24V28eHHPnj2BgYGdOnUyjf8VFRUdO3bskUceMW1QUlKyZcsWWZa7d++OO3Ra3IkTJxITE+vUqdOqVSvTM5cvX87KymrSpAkRpaenJyUllZWVRUZGtmjRQtVKtSYvL+/s2bOVX/r5+dWuXZuIDhw40KhRI9P9CBVF2bFjR25ubseOHR9mFMzBghAAAMCyNDJGCAAAUDUIQgAA0DUEIQAA6BqCEAAAdA1BCAAAuoYgBAAAXUMQAgCAriEIAQBA1xCEAACgawhCAADQNQQhAADo2v8DJhMMqV8JuGEAAAAASUVORK5CYII=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.9999999959286234, 0.9999999907475938], \"optimal\")" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "NWTN(TF[6], printing=false, plotatend=true, Plotf=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae61290b-22fa-493a-9b56-3a7458e3b3ed", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.4", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/11-09/lesson.ipynb b/11-09/lesson.ipynb new file mode 100644 index 0000000..ec68311 --- /dev/null +++ b/11-09/lesson.ipynb @@ -0,0 +1,1864 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "3a7ffee3-334e-481b-82fa-5a0dd957eed3", + "metadata": {}, + "outputs": [], + "source": [ + "include(\"./SDG.jl\")\n", + "include(\"./TestFunctions/TestFunctions.jl\")\n", + "TF = TestFunctions();" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "372ca0fc-d0fc-4731-8c1d-bbb24b5d7772", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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YYmJidYuFSz1aRd5UD1Wx439mKz8dRFzpKAZgmhKHH88XMYiulCdLA3CDz74wMPD49SpU6dPnz558uTKlSsrbNC9e/fMzMyjR4+mpKQMHjz4ueees3apYKlO/mxqU2lWCynAjQLd0KGAZnxyTLlcQi+1wsQ+VCtLd7jvv//+kUcekSTJ1dV10qRJq1atqrCBl5eXi4sLETHGIiIiiouLrVwpVN3FItqfLaLTxck8YcIdhmDfknLFvAS+spdsRA5C9bLoHKEQ4vz5840bNy7/slGjRikpKf/eLC8v7/PPP09NTd29e/eiRYtu9t3KysqysrLi4+Ovv9OqVSuDASfGrW96mLQ7S2y9qJzMo1512fKeOHELdsqk0PgY/t92cqgn5jCgulkUPyaTqaSkpHzAR0Rubm75+fk321iW5ZycnHPnzkVGRla6wblz57Zs2XLixInyL41G42effdakSZObfcOrV68yhr+NOzGhHk2oR0T0UZKcWswKCysZpqN5bQrNa6H/Hpa9jNKYoJLCwir8LzSvTTlG87q5uUnSbSYZLApCJycnb2/vK1eulH+Zk5NTp06df2/m6en54osvEtGgQYNGjhw5evToSj++SZMmDz300C2GjBUIIdzd3S3cGCqVVsab+jB3d5d//xOa16bQvJbYlSWWnTUnDDN6uDpX6T+ieW1KP81r6YRkmzZtdu3a1aFDByLatWtXmzZtbrGxn59fSUkJ5/y2OQzVgwuavY//74TSuCYL9aTQmqxxTdahFsNjTkF1hSaaEMM/7SLXwSIyoBJLO8KZM2dOnz49LCwsLy/vm2++iY6OJiKTydSsWbP169dHRER88cUXLi4ujRo1ysjIePPNNx966CGjEfcB2YvPusgLO8in8sXpfHEqj7Znihf28rmt5Wea40gFVPbcHt69DosKwa4IqrE0CIcOHVpYWPjBBx84OzuvXr26devWRCRJUs+ePcvHzg0bNly+fPnSpUu9vb2nTZs2depUG1YNVedupNa+rLUvI6LcMtqQojzUCF0PqOyPVPFXmkgcjqkJUFMV9r+xY8eOHTv2xndkWV6yZEn56759+/bt29eapYHNfJWkDKonYSYK1HWphKbG8ZW95JqYPAJVYUygR1+dUFr6MCw5A+qato1PDGU9AjR/XSJoHYJQj97rKC07pbT/2bwhRUEcgir+d0I5Xyhe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hMOGDZszZ87rr7/+559/VrrB0aNHIyMjXVxcjEZjp06dTpw4Uc0VatqPP/744IMPhoSEnDlzplOnTlevXq2wwfbt2997773k/4eFuW9tz549PXv29PHxKS0tbd++/YULFypsUFJSEhkZefz48QYNGowfP37FihWq1KlRZ86c6dixo6IoHh4eXbt2PXDgQIUNsrKynnrqqeu7a15enip1atSAAQNeffXVV155JSYmptIN4uPju3XrVrNmTUVROnTocPbs2eot0PaEveKcCyEGDRq0cOHCSjeYOnXqU089Vf56xowZjz32WPUVp32tW7f+7rvvyl937tz5q6++qrDBkiVLhg0bVu11adWIESNee+218tdjx4596aWXKmzw3XfftW7dWlEUIcQPP/wQERFRzRVq2tNPPz1lypTy17Nnzx43blyFDU6dOuXj41PtdTmI8s723nvv/eSTTyrd4KGHHpozZ07568mTJz/33HPVV1y1sN8R4W1Xi4iNje3Xr1/56759+944jwe3lp+fn5iYeH127matd/78+YULF37zzTd4+sdtxcXF3bg3/vvIOjY2tm/fvuWLdPTt2/fo0aOXLl2q5iK1y5I/9rKyskWLFn366adJSUnVW53mWdLZ9u3bt/y1Q3a29huEt5Wenn79rJW/v396erq69WhIeno6Y+x669WuXfvixYsVtvH09IyIiMjLy1uzZk3Tpk2PHj1a7WVqhslkys7OvvXeeOPu6uXl5eTkhD3WchX+2DMyMsQ/VwIxGAw9e/a8dOnS/v3727dvv3z5cjXKdEyKomRlZTl2Z6vmxTL33ntvXFxchTdHjRq1cuVKS/670Wi8/kxOs9ns5ORk5fo0bvz48d9//32FNyMjI+Pi4oxGoxCCc16+0J3JZPr3QkojR44cOXJk+etHHnlk3rx5q1evroaytUiWZVmWb7033ri7CiEURcEeazmDwXBj8xoMhgoLYNavX/+XX34pf33vvffOmjVr3Lhx1V2lg2KM3Xb31jo1R4Rbt241/4uFKUhEgYGBaWlp5a/T0tLq1q1rs0o1qfwSuwrKjzwCAgIYYze2XkBAwC2+VWRkZHJycnUUrU2SJNWuXfvWe2NgYOD1YXd6ejrn/NZtDje6sfXS0tICAwNvsXGXLl0yMzP/ff0X3BnGWEBAgGN3thqbGs3Jybk+iBw8ePCPP/5Y/vrHH38cPHiwenVpjKura9++fdesWUNEpaWlGzZsGDJkCBEVFRVt3bqVc05ExcXF5RsLIX799dfmzZurWLD9u743CiHWrFlTvjcqirJ169byZ3wPHjx448aN5a26Zs2a7t27e3p6qluzhtzsj3379u3lJ7Cv765E9MsvvzRo0KBGjRrVX6cjyc7O3rFjR/nrIUOGlHcXRHR993Yoql6qcyvz5s1r27atp6dnUFBQ27Ztf/31VyHEH3/84eHhUb7BxYsX69evP2jQoAEDBjRu3DgzM1PVejVm9+7dvr6+48aNa9++fZ8+fUwmkxCi/ERgbm6uEKJv3769e/ceN25cJWl/fgAAAeVJREFU8+bNmzRpcv78ebVLtmvJycl169YdMWJE7969W7RoUd6G5b1zQkKCEIJz3r9//zZt2owfP97X13fbtm1ql6wlly9fbtq0ab9+/aKiooKDgy9cuFD+vp+f3/r164UQr732Wrt27caNG1d+E8umTZtUrVdj5syZ07ZtWw8Pj3r16rVt23bLli1CiHXr1tWuXbt8g5SUlKCgoGHDhvXr169Zs2Y5OTmq1mt99vv0iZSUlBsvVqxfv76vr29+fv6pU6fatm1b/mZhYeFff/3FGOvTpw8OAKsqIyMjNjbW19e3V69e5c8jLCkpOXToUNu2bWVZvnz58t69e3Nzc4OCgjp16mQ0GtWu197l5eX99ddfLi4uvXv3dnFxISIhxL59+5o3b+7m5kZEnPOYmJjs7Ozu3btjXrSqioqKtmzZYjab+/Tp4+HhUf5mYmJigwYNvLy8iouL9+3bl5aW5uPj07FjRy8vL3Wr1ZazZ8/m5ORc/7Jhw4be3t5XrlxJSUm55557yt/Mz8//66+/jEZjnz59bvtUI82x3yAEAACoBho7RwgAAGBdCEIAANA1BCEAAOgaghAAAHQNQQgAALqGIAQAAF1DEAIAgK4hCAEAQNcQhAAAoGsIQgAA0DUEIQAA6Nr/AalN3gQXwiGfAAAAAElFTkSuQmCC", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([1.1252762016860305, 1.274849677259977], \"stopped\")" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "158cbc5a-a8e4-404d-a841-b57c377e10d4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.9167976902294144, 0.8399415839141149], \"stopped\")" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], x=[-1, 1], astart=0.1, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ac55b2fe-9ae5-4fbc-bc83-624c237eb32d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.9983373844793831, 0.9963864758803652], \"stopped\")" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], x=[-1, 1], astart=0.1, MaxFeval=6000, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3204b230-6984-4d37-a328-03051840de41", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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4/ooKRQKufwhM481ChIXF5eysjJRFFWjBEVFRa6urnXaODs7FxcXq24XFRW5uLiwLOvs7FxSUqJuU1RUpBpcrVezZs00HxqVyWQIwoaY2KiFFmHL3M/Yh0YbxY7IlShIs8baGho1SSb2UdLof+zl5aVQKNS9wLNnz6qHSdUCAwPPnj2rup2amqoKvICAgMzMTHUWnj179gFBCAAAoHsaBaGVldWYMWPefffdwsLCHTt2JCUljR07loguXbo0bNgwVZspU6YsXrz44sWLN27cWLBgweTJk4nI19e3a9eu7777bmlp6XfffVddXf3EE0803coAAAA0lqZDi59++umMGTMCAwPd3NzWr1/v5uZGREqlMj8/X9XgySefnDVr1qBBg3ieT0hIGDdunGr5mjVrpk2b1rZtWz8/v61btz50rBYAAECXNDp8QjcadfjEr7/+2qZNm06dOjV1VUZn/vz5L7/8snqmLqiUl5f/73//mzNnjr4LMTinTp3KzMxs6KAmc/bDDz9069bNz89P34UYnPfee++tt94ypSkaxrofeOfOnceOHdN3FYZoyZIlubm5+q7C4OTm5i5dulTfVRiiY8eO/f777/quwhBt3br1zJkz+q7CEC1cuLC0tFTfVWiTsQYhAACAViAIAQDArCEIAQDArBnQZBkrKys3NzcND1+9e/eupaWliR3UqRVZWVnu7u6mtB9bK3iez83Nbdmypb4LMTilpaXV1dUuLi76LsTg5Ofn29raYt7Z/W7cuOHl5WUspxoYPXr0Bx988OA2BvR1eeXKlepqTU85pFQqOY4zlv+ELlVXV+P6HvXClqmXKIqCIOC4pvvV1NTI5XIGFz66j3F9lNzd3R/axoB6hAAAALqHHhUAAJg1BCEAAJg1BCEAAJg1BCEAAJg1A5o12hBBEC5dunTmzJmqqqrnnnuu3jY8z//www/nz58PCgqaOHGi+uCBjIyM1atXK5XK0aNHd+zYUYdV68iVK1dWr15dU1MzatSokJCQOn89d+5ccnJy7SWjRo2ys7M7fPjw+fPn1QunTJlielPjNm/efOjQIS8vrylTpqgvGa128uTJU6dOqe+OHz9eoVAQkSAIP/zww7lz5wIDAxMSEkzvKBRBEFavXp2WlhYQEJCQkHD/ZNG0tLRdu3bl5ub6+vqOHTtWtenKysrWrVunbhMREWECp/mt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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.3628062254502194, 0.12859141767257834], \"stopped\")" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], astart=-0.001, MaxFeval=1000, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "82de30b9-6006-4ee3-ac11-88268d3204ab", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-0.8717232114247211, 0.9328471204154523], \"stopped\")" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], astart=0.1, MaxFeval=1000, m2=0, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "bfa9f82f-5751-4d8c-aabb-970c7ac01d8d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([1.1172381629977606, 1.248370836883731], \"stopped\")" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], astart=0.2, MaxFeval=1000, m2=0, tau=0.5, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a6d2a63b-4a2b-44e0-8403-99d35c1ee6bb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.2903670577433367, 0.08652037379852633], \"stopped\")" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[6], astart=0.1, MaxFeval=1000, m2=0, tau=0.5, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "52ccb0a3-70f3-43ee-ac91-722c87f92e80", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Tk7Tpk3z8/Or818vXbq0bds2/d0hQ4boj9m8efPOnTu9vb2TkpJcXFxMV7HCFBYWLl++/NatW6NGjYqPj6/zX3NycrZv3177kREjRnh5eaWlpR09elT/4KRJkxwdHU1RrsJUVVWdOnUqIyPD09Nz6NChDR5z48aNZcuWFRcXDxgwYNCgQfrH9Z/96dOne3p6Nul10SNUkFmzZi1dujQsLGzFihUzZsyof8D69etHjx7t7+9/+fLluLi40tJS+fFBgwbt3LkzNDT0jTfeeO+990xbtYKsW7duzJgxAQEBly5deuSRR8rKyuockJSUtGvXLh8fn8LCwujoaP0K5m+//fbevXuzs7Ozs7MLCwtNXrhS7NixY8iQId7e3iUlJd26dbt+/XqdA1JTU999993suyorK+XHP//88+effz44OPjEiROPPfaYTqczee2KcOvWre7duxcUFPj5+Y0cObL+wrbl5eX61tuzZ8+LL74oCAIh5Ndff/3888/1/0m1DbhgwYIpU6YsWrRo8eLFDR6g1Wp79eqVlpYWHBw8c+ZM/RLwa9euHTt2rPzZj4uLq//ZfwAOypCXl2dnZ1dUVMQ5v3btWosWLS5fvlznmO7duy9btky+/dhjj3322Wec8z179nh6elZXV3PODx8+7ObmVllZadralaJbt25ff/21fLtXr16ff/55nQNqt8xTTz31wgsvyLejoqL27t1rmiKVrF+/fosWLZJvDx06dMGCBXUOWLt2be/eves8qNPpAgMDU1JSOOeSJIWFha1fv974xSrRxx9/3LdvX/n2F198ER8ff5+D586dO2rUKPn2vHnzZs2aZfT6FE+SJM75kiVL+vfv3+ABP//8c4cOHeTDNm7cGBoayhjjnHft2nX58uXyMfHx8fU/+/eHHqFSHDhwICIiQj6b5+7uHh0dvX///toHVFVVHT16NDExUb7bv3//vXv3EkL27t2bkJBga2tLCOnevbtOp8vIyDB5+eZXUVFx7Nix/v37y3f17VNbixYt9Lerq6trn31av379woUL65y2UhXO+b59++7fgISQK1eufPjhh8uWLdN3nS9fvpyXl9evXz9CCKW0X79+Df6hGuzbt2/AgAHy7f79+x88eFCr1TZ4pE6n+/bbb6dNm6Z/5Ny5cwsWLPj222+b3JuxIpQ+IJL27t2bmJgoH5aYmJiVlZWf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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-0.0898420454946345, 0.7126564254067507], \"optimal\")" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[7], Plotf=1, printing=false) # does job very good" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "49f77dcb-d5c0-4698-8ede-2e56d7337e53", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.12760835307443302, -0.18378703927430506], \"stopped\")" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[7], astart=-2e-1, Plotf=1, printing=false) # hmmm" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2f088446-dc0c-42a2-870d-df9d1dca4754", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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nWbW3wlCQhACgPYYecpK4PMnGd7q99/m0kY0lzrBhCC8DrvdvmDBgrFjxz7wwAOHDx++6prz588/++yzY8aMmTJlyvbt211XJADATeOIRrXn1o8x5IwU9law+BW2+fvESqvSZalYk51O6my4mszZIPyf//mfFStWPP/88927dx8xYkR9ff1lC2pqau64447q6uqnnnoqMzOzqanJ1aUCANyK9Ehu+TBhZ4ahykrdc2xz8sRT9Th7eBWHqlm3EH0NV5MZnFlks9kWLVq0atWqIUOGDBs2bOPGjV988cWjjz566Zq///3vXbt2/eijj9xTJwBAq8QHc9kDhT/3FhYdEfuutd8Zwz+byt8eqbu9n+vQZ6cMOblHePr06QsXLgwcOFC+O3DgwL179162ZufOnaNHj37llVceeuihpUuXShJOTwOA6kT70/w04fgU4x3R3MTvLzaXKl2UWuizU4ac3CM8d+5ccHCwwXBxcURERGFh4WVrTp06tWDBgnnz5t17770vvvji0aNH33zzzas+2rFjx1auXPnjjz/Kd41G46JFixITE2/1W3C7hoYGjtPjL4fHiKJotVrxjye3slqtHMf5+PgoXYgqcEQPd6IH4mjVSf6ZXYYXf6VZCfapnSShdX/ojY2NoijyvLceW9x3wTiqrVhfr+q/xJt9Qw4ICLjhT8SpIAwMDLz0nF9jY2NwcPCVTzZ06NC5c+cSUXh4+Pjx4994442rltupU6eRI0c+/fTTji0pKSmOlFUhxlhgYKDSVWiZKIpGozEgIEDpQrTMaDQiCK80sxc9kkxfn5beMPELjtDsnvzM7rz/rb4bcRzn7+/vvUF4pMbWv71voLrHyrjjDdmpH3iHDh3sdntpaWmHDh2IqKioqFOnTpet6dixY0xMjHy7Xbt29fX1LS0tvr6+Vz6aj49PVFRUenp6qwoHAHAFeZB3Rhy/8yx70yy+bhIf78HPSRLCrvLupWWnG5iPoLvhajKn/uUSFhY2duxYuRHmzJkz33zzzdSpU4movLw8OztbXnP//fdv3LixubmZiFavXp2WlnbVFAQAUCd5kPfm/2cob6TEHNucPLG0QUfNpaZK0menDDn/8Ym33nrr008/TUtL69279x/+8IdevXoRUXFxsXwslIgmT56clJSUmJjYr1+/f/3rX4sXL3ZXyQAAbpMcxn04WMifZAzz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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-0.08984190881815034, 0.712656391028696], \"optimal\")" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[7], astart=5e-2, tau=0.5, Plotf=1, printing=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "2fc40883-f252-4aea-b042-9f2993dc1444", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-1.7036067118830425, 0.7960835713103661], \"optimal\")" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[7], x=[-2, 1], Plotf=1, printing=false) # local minima" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "13d22e9a-671a-4a17-b7ec-e2de65990993", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-0.08984200737903672, 0.7126564527726588], \"optimal\")" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[7], x=[-2, 1], astart=-0.1, Plotf=1, printing=false)\n", + "# better local minimum but my chance" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "d212617b-1a64-4a32-8cc1-5fbe0c0dd9d0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gradient method\n", + "feval\trel gap\t\t|| g(x) ||\trate\t\tls feval\ta*\n", + "\n", + " 2\t4.5319e-02\t3.5796e+00 \t 1 7\t4.6146e-03\n", + " 10\t6.8718e-03\t2.9550e+00\t1.5163e-01 1 7\t1.5235e-03\n", + " 18\t6.1322e-03\t2.9416e+00\t8.9236e-01 1 8\t8.5011e-04\n", + " 27\t1.0649e-03\t2.8484e+00\t1.7367e-01 1 11\t1.9989e-04\n", + " 39\t5.5025e-04\t2.8388e+00\t5.1670e-01 1 10\t1.1872e-04\n", + " 50\t4.0450e-04\t2.8360e+00\t7.3512e-01 1 11\t5.6036e-05\n", + " 62\t4.5539e-05\t2.8293e+00\t1.1258e-01 1 14\t7.3297e-06\n", + " 77\t1.3124e-05\t2.8287e+00\t2.8819e-01 1 16\t1.8619e-06\n", + " 94\t1.7730e-06\t2.8285e+00\t1.3510e-01 1 19\t2.3411e-07\n", + " 114\t9.9925e-08\t2.8284e+00\t5.6359e-02 1 23\t1.4645e-08\n", + " 138\t1.7233e-08\t2.8284e+00\t1.7246e-01 1 25\t3.6613e-09\n", + " 164\t1.2058e-08\t2.8284e+00\t6.9970e-01 1 26\t1.8307e-09\n", + " 191\t2.5875e-09\t2.8284e+00\t2.1459e-01 1 28\t4.5767e-10\n", + " 220\t1.0739e-09\t2.8284e+00\t4.1502e-01 1 29\t2.2883e-10\n", + " 250\t7.5682e-10\t2.8284e+00\t7.0477e-01 1 30\t1.1442e-10\n", + " 281\t1.5852e-10\t2.8284e+00\t2.0945e-01 1 32\t2.8604e-11\n", + " 314\t7.0319e-11\t2.8284e+00\t4.4361e-01 1 33\t1.4302e-11\n", + " 348\t4.4097e-11\t2.8284e+00\t6.2709e-01 1 34\t7.1511e-12\n", + " 383\t1.3110e-11\t2.8284e+00\t2.9730e-01 1 36\t1.7878e-12\n", + " 420\t1.1942e-12\t2.8284e+00\t9.1088e-02 1 39\t2.2347e-13\n", + " 460\t5.9730e-13\t2.8284e+00\t5.0019e-01 1 40\t1.1174e-13\n", + " 501\t2.9887e-13\t2.8284e+00\t5.0037e-01 1 41\t5.5868e-14\n", + " 543\t1.4966e-13\t2.8284e+00\t5.0074e-01 1 42\t2.7934e-14\n", + " 586\t7.5051e-14\t2.8284e+00\t5.0148e-01 1 43\t1.3967e-14\n", + " 630\t3.9524e-14\t2.8284e+00\t5.2663e-01 1 44\t6.9835e-15\n", + " 675\t1.8208e-14\t2.8284e+00\t4.6067e-01 1 45\t3.4917e-15\n", + " 721\t7.5495e-15\t2.8284e+00\t4.1463e-01 1 46\t1.7459e-15\n", + " 768\t3.9968e-15\t2.8284e+00\t5.2941e-01 1 52\t5.4558e-17\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([-1.195842165283366e-15, -1.195842165283366e-15], \"error\")" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SDG(TF[8], x=[0.01, 0.01], Plotf=1, printing=true) ## not working :(" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "35c3c1c4-57f5-472f-958d-9f082f66b6ac", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "NWTN (generic function with 1 method)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "include(\"NWTN.jl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "aebfe53d-f6a6-4f88-a141-a95be699fa4e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Newton's method\n", + "feval\trel gap\t\t|| g(x) ||\trate\t\tdelta\t\tls it\ta*\n", + "\n", + " 1\t4.0000e+00\t4.0000e+00\t\t\t0.00e+00 1 3\t7.20e-02\n", + " 5\t3.4877e+00\t1.1580e+01\t8.7193e-01\t0.00e+00 1 1\t2.17e-01\n", + " 7\t3.2106e+00\t1.1422e+01\t9.2053e-01\t0.00e+00 1 1\t2.92e-01\n", + " 9\t2.8939e+00\t1.1298e+01\t9.0137e-01\t0.00e+00 1 1\t4.43e-01\n", + " 11\t2.5138e+00\t1.1340e+01\t8.6866e-01\t0.00e+00 1\t1.00e+00\n", + " 12\t2.0350e+00\t1.3918e+01\t8.0951e-01\t0.00e+00 1\t1.00e+00\n", + " 13\t1.4916e+00\t4.5931e+00\t7.3297e-01\t0.00e+00 1 1\t2.01e-01\n", + " 15\t1.3444e+00\t4.4425e+00\t9.0135e-01\t0.00e+00 1 1\t2.77e-01\n", + " 17\t1.1767e+00\t4.3336e+00\t8.7522e-01\t0.00e+00 1 1\t4.34e-01\n", + " 19\t9.7661e-01\t4.4575e+00\t8.2998e-01\t0.00e+00 1\t1.00e+00\n", + " 20\t7.3072e-01\t7.2446e+00\t7.4823e-01\t0.00e+00 1\t1.00e+00\n", + " 21\t4.7358e-01\t1.8687e+00\t6.4810e-01\t0.00e+00 1 1\t2.60e-01\n", + " 23\t3.9577e-01\t2.1797e+00\t8.3570e-01\t0.00e+00 1 1\t4.30e-01\n", + " 25\t3.0401e-01\t3.0081e+00\t7.6815e-01\t0.00e+00 1\t1.00e+00\n", + " 26\t1.9691e-01\t6.1663e+00\t6.4770e-01\t0.00e+00 1\t1.00e+00\n", + " 27\t1.0228e-01\t1.3863e+00\t5.1945e-01\t0.00e+00 1 1\t4.31e-01\n", + " 29\t6.7912e-02\t2.2435e+00\t6.6396e-01\t0.00e+00 1\t1.00e+00\n", + " 30\t3.2680e-02\t3.8085e+00\t4.8121e-01\t0.00e+00 1\t1.00e+00\n", + " 31\t1.0566e-02\t8.0488e-01\t3.2332e-01\t0.00e+00 1\t1.00e+00\n", + " 32\t3.1590e-03\t1.9530e+00\t2.9898e-01\t0.00e+00 1\t1.00e+00\n", + " 33\t2.4534e-04\t9.6840e-02\t7.7664e-02\t0.00e+00 1\t1.00e+00\n", + " 34\t5.2049e-06\t9.3779e-02\t2.1215e-02\t0.00e+00 1\t1.00e+00\n", + " 35\t1.1473e-09\t2.1576e-04\t2.2042e-04\t0.00e+00 1\t1.00e+00\n", + " 36\t1.3971e-16\t4.8898e-07\t1.2178e-07" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3wU1doH8GfO7KYXkkA6gQQSeglEauiEIgQuCFwpUlTg2t97FRQLoKKUiwUVC02UoggiUlV6EwHTKKGEGkgFQkIqycyc94/lRqQuYXdnd+b3/fjHZp1kn50s88sz58wZgXNOAAAAesXULgAAAEBNCEIAANA1BCEAAOgaghAAAHQNQQgAALqGIAQAAF1DEAIAgK4hCAEAQNcQhAAAoGsIQgAA0DU7CsJXX321oqLCzI1lWcbicCoy/zcF1oD9ryLOuSRJalehX5IkWfzgb0dBuGDBgsLCQjM3Li8vl2XZqvXAPZSVlaldgq5h/6tIURT8IaKi8vJyRVEs+zPtKAgBAABsD0EIAAC6hiAEAABdQxACAICuGczcTlGUkydPHjt2LCoqqlGjRnfcJjc3d/Xq1ZIkDRgwICQkpPL5HTt2HDx4MCoqKj4+njFELwAA2BFzYyk+Pr5z587jxo1buXLlHTfIzMxs1qzZH3/8kZqa2rRp07S0NNPzM2fOHD16dEFBwdSpU5966inLVA0AAGAhgpkXZBQUFHh7ew8bNiwqKmrq1Km3b/DGG2+cOnVqxYoVRPTCCy9UVFR8+eWXxcXFoaGhmzdvjomJuXLlSlhYWHJycmRk5B1fws/PLy0tzdfX15x6SktLjUajwWBuRwuWVVhY6OnpqXYV+oX9ryJZlsvLy11dXdUuRKdKSkqcnZ1FUbTgzzS3I/T29r73Br/++mt8fLzpcd++fX/99VciOnDggJubW0xMDBH5+fm1bdt28+bND1EtAACAhVmso8rMzAwKCjI9Dg4OzszM5Jzf/CQRBQUFZWZm3u0nlJWVTZ48ufLvrObNmw8aNOhuG+/MkII9eD0fXFOvjuvXrzs5OaldhX5h/6vI1BFiuoNaNl+Q6vlSuJe5HaHRaLzvL8tiv0tB+OssK+dcEIRbnrz5+bv9hGo3MRqN93i5pKts5lFLtsYAAGD/JiQ7Xyq7a45UjcU6wqCgoOzsbNPj7OzsoKAgQRBuftL0fLt27e72E5ydnf/zn/+YOUY4Moo3/pmVCsZq+LNYDeXl5c7OzmpXoV/Y/yqSZVkQBOx/Vfyew4kq2gY7GVQZI7yj0tLSEydOmB737Nlz/fr1psfr1q3r2bMnEbVq1aqkpCQhIYGI8vLy9u3bFxcX93AF3+DrxLsECSvPWHjFOQAAsFsLTyhjIrmF+0HzO8LFixdv3Lhx//79KSkpqampTz/9dI8ePZKSktq3b286+fncc8+1bNlyzJgxrq6uP/zww++//05E7u7ur7322mOPPTZixIgNGzYMHjz4blNGq2B0JE0/pIytjzP1AADaVyzRT+eVhD6W73/MDcLmzZu7u7sPHjzY9GWdOnWIqH79+mvWrDE9ExwcfOjQIdMF9SkpKZUX1L/66qtt2rQ5ePDgO++807dvXwuW3jOEnt9Hqfm8YTWL/30AAAD2ZcUZpXMQC3Cx/A34zL2O0AaqcB3h5CShQqH/tsasGVvDdWzqwv5XEa4jVEv7ddLrzcUufqWqXUdon8ZEsSWnlAoMFAIAaNqJAn62kPcMscr5P8cOwkhvIcpb2HABSQgAoGULjitjopjBOpHl2EFIRE9GsUUn7OXsLgAAWJyk0LLTyuhIawWWwwfh4Ai2J0fJLEEWAgBo07p0JcpbiPS21rxIhw9CdwM9VpstSUMQAgBo07dpfEyUFdPK4YOQiMZEsUUnFSQhAID25JfT9izlH7UQhPfULkAwCLQ3G1EIAKA1q88p3UOYtzVX09RCEBLR6Cj29UnMHQUA0JrvTitDI6y7aopGgnBkJFt9TimsULsOAACwnNxSSrjMH61p3ajSSBAGuFKnILbyLJpCAADtWHFGiQ9jrha7T9KdaSQIiWhMlLDoBIIQAEA7vj+jPB5h9ZzSThD2qcnOFtKxfEyZAQDQgvQinlbAu1tnWbWbaScIDYxG1BW+SUNTCACgBd+d5o+FM6P1Y0o7QUhET9Vj35zEGtwAAFrw3WllaB1bhJSmgjDKW4jwEn65iCQEAHBsx/P5pTKKDbDF7WY1FYSENbgBADRh+WllaB2B2eS261oLwiERbEeWklOqdh0AAFBVnOi70/xxm5wXJe0FoaeRBtRmS07h7CgAgKP67SL3MFJMdZv0g9oLQiIaE8UWHMca3AAAjmpuqvJCI9vFkwaDsEOgIAj0Ry6iEADA8aQX8X25triOvpIGg5CIRkViDW4AAIf0+TFlVCRzs/KyajfTZhCOjmKrzipFWIMbAMChXJdp8UllXH2bZpM2gzDQldoHCD+eQ1MIAOBIVpxRWlQXorxtNE3GRJtBSKbb1mMNbgAAhzI3VXmuoWjjF9VsEPYLY2nX+HGswQ0A4CCSrvCcUuoVatN2kDQchAZGw+rggkIAAIfxyVHl+UZMtHUOajcIiWhMFPsmjcvoCQEA7N7V67TuvDImSoVU0nIQNvIRQt3p14tIQgAAezf/hNKvFvNzVuGltRyEZJoygwsKAQDsm8Lpy2PKsw3ViSSNB+HQOmxrhnKpTO06AADg7jZe4P6utltc9BYaD0IvI/WrxZZiygwAgB2bmyo/p1I7SJoPQsIFhQAA9u30NZ54hQ8ORxBaTacgoUymg5cwZQYAwB59fkx5Moq52Poy+r9oPwgFotGYMgMAYJdKJVqSZuvFRW+h/SAkotGRwg9nlBJJ7ToAAODvlp9W2gawcE91psmY6CIIQ9yF1v7CaqzBDQBgZ744pqg4TcZEF0FImDIDAGB/9uXygnLqHqxmO0j6CcL+tdjRfH76GqbMAADYi7mpynMNGVM5B3UThE6MhtZh36ShKQQAsAuXymjjBWVkpPoxpH4FNvN0Pfb1SazBDQBgF+YfVwaFM181Fhe9hY6CsLGPEOhKWzKQhAAAKpM5zT+h/EvVqyYq2UURNoM1uAEA7MG6dCXEjVqotLjoLfQVhMPrst8uKpexBjcAgKpM02TUruIGe6nDNrydqE8YW34aTSEAgGrSCvjhPD6wtr0EkL3UYTNjotgCXFAIAKCez1KVcfWZs3qLi95Cd0HYNVgokSjxMqbMAACooKiClp1SeXHRW9hRKbYhED1RF1NmAADUsfSU0jmYhbrbxTQZE90FIRE9VU/47rRSijW4AQBszh4WF72FfVVjG6HuQkx1Yc15NIUAADa1K5tXKNQ5yI7aQdJnEBLRmCj2Nc6OAgDYlumqCfuKQd0G4cBwlnyFnynElBkAABvJKqEtGcoTdrC46C3sriDbcGL0zwj2LdbgBgCwlXnHlcfrMC+j2nXcRqdBSERj67PFJ7mCnhAAwPokhRbYzeKit7DHmmyjqa/g60zbMpGEAABW99N5pa4XNfG1t/FBIj0HIWENbgAAW7GrxUVvYadl2cbwumzTBeXqdbXrAADQtNR8nlZA/WvZaeLYaVm24etMvWpiDW4AAOv67KgyvgEz2mvg2GtdtvIkzo4CAFjTtQpacUYZW89+48Z+K7ONbsHClTJKvoIpMwAAVrHslNItmAW5qV3H3ek9CJlAoyIFrDIDAGAl848r4xvYddbYdXG2MSaKLT+tXJfVrgMAQHP25/KCcupiZ4uL3gJBSLU9hWa+ws9YgxsAwNLmHVfGN2B2t7ro3yEIibAGNwCAFRSU00/nldH2t7joLey9Ptt4LJwdvMTTizBlBgDAYpaeUuJCmL+r2nXcD4KQiMhFpCER7Js0BCEAgMUsOKGMt8vFRW/hACXaxpP12NcnFazBDQBgEX/k8sIK6hJs38ODRIQgrBRTXfAy0s5sJCEAgAV8dVwZX9/OZ8ncgCD8y+go9vUJTJkBAHhYBeX083lllN1PkzFxjCpt44lIti5dyS9Xuw4AAAe35JTSM9QBpsmYIAj/4udM3UPY91iDGwDg4Sw8oYxzhGkyJg5TqG08iQsKAQAezu85vLCCOtv3ajI3QxD+Tc9QIauEDuVhygwAQBXNO678q4FjTJMxMZi/qaIohw4dYow1adJEEG59j6WlpWVlZTc/U61aNUEQiouLy8tvDLsJglCtWrWHrNiqmEAjI4XFJ5UP24hq1wIA4Hjyy2ltujKrlVHtQh6AuUFYUFDQvXv38vJyWZarVav2yy+/eHh43LzBvHnzPvnkE9PjwsLCkpKSvLw8Jyenp59+esuWLV5eXkTk7e2dmJho2TdgcU/VY61/lqY/IjojCgEAHtC3aUovx5kmY2LuqdFPP/3Uz88vKSkpJSXFYDDMmzfvlg1eeuml0//z2GOPDRo0yMnJyfS/3n77bdPz9p+CRBTuKTTyEdanY6QQAOCBzT/uSNNkTMwtd+XKlaNGjWKMiaI4atSolStX3m3L0tLS77///qmnnqp8pqSk5Ny5c5UnSO0f1uAGAKiCvTm8QqFOjjNNxsTcIExPTw8PDzc9rl279oULF+625apVq2rUqBEbG1v5zOzZs7t37+7j4zN9+vR7vIQkSTt37tzyP8eOHTOzNosbHM725fILxZgyAwDwAOYdV8Y5yGoyNzN3jLC0tLTyVKeLi0txcfHdtly0aNGTTz5ZOZtmzpw5/v7+RJScnNypU6eYmJi4uLg7fuP169c//PBDo/HGEGtsbOzEiRPvUY/RaDQYHmCyzwPpH2pYeFR+paFkpZ/v6IqLi2+fMAU2g/2vIlmWTbMl1C7E7hRUCD+fM77duKLImnfyKSkpqaioEEVzJ3G4uLjcNynMDZLAwMC8vDzT4ytXrgQFBd1xs7Nnz+7du3fZsmWVz5hSkIiaN2/eq1evXbt23S0I3d3df/75Z19fX3PqEUXRqkE4vhEftl2e0soFB5s74pzfMlsKbAn7X0WmIHR1dajZIDax8IjSJ4zX9nOy6qswxpydnc0PQrN+ppnbPfLII3v27DE93r17d6tWre642cKFC3v16hUcHHzH/3vhwgU/P78qVGl7rf0FDyPtxhrcAADmWXBCGd/AwabJmJjbUb300kt9+/atU6eOJElffvnl1q1bTc8HBQX9+OOP7dq1IyJFUb799tvKiyiIqKKiYuzYsd27d/fw8Fi9evXp06eHDh1q8fdgJSMj2dcnlY6BuIoCAOA+9mTzCoU6BDrkSTRzgzA2NnblypWLFy9mjK1duzYmJsb0/OjRowMDA02Ps7KyRowY0adPn8rvEkWxQYMGmzZtqqioqFevXkpKSkBAgGXfgPWMimRRKyuuVYhejnRhKACACuYdV8Y71GoyNxM4t5ezf35+fmlpaWaOEVp7sozJwC1y71BhrKNdE2MDhYWFnp6ealehX9j/KsIY4e3yyyliRcWJwcYaLlZ/rZKSEtXGCPUJa3ADANzX4pNKn5rMBiloJQjCe+kVKpwvotR8e2maAQDs0AKHuunS7Ry4dBswMBoZKeC29QAAd7M7m8ucYh1zmowJgvA+xkSxJaeUCkQhAMCdfHVcGe+Aq8ncDEF4H1HeQqS3sOECkhAA4FZXrtOGdGVkpGNHiWNXbxtPRbFFJzBMCABwq2/TlL5hzNdZ7ToeDoLw/gZHsD05SmYJshAA4C8VCs05orzQyOFzxOHfgA24G2hEXfbpUZwdBQD4y7dpSj1valXDoccHiRCEZprQlM0/rhQ4zB0VAQCsS+Y085DyZrQWFqFEEJqlprvQM5TNx3UUAABERLT8tBLi5qiLi94CQWiuV5uxj48o5YhCANA9hdPMFOUtTbSDhCA0X1NfoYkPLT2FJAQAvVt5VvE0UtdgLbSDhCB8IBObibNSFAWzRwFAxzjR+8nKlBYaaQcJQfhAugQJPs60Lh1NIQDo15pzioFRz1CNtIOEIHxQrzRh7ycjCAFAv95PVqZEO/aaardAED6YAbXZ1XLanY3TowCgRxsu8AqF4mtpKjs09WZsgAn0ShM265CsdiEAACqYniy/qa12kBCEVTAqkiVepiNX0RQCgL5szuB512lgba0Fh9bejw04i/RCI/bfQxgpBAB9mZYkvxnNtNYPIgir5tmGbOMFJb0ITSEA6MXvOTyjhIaEazA1NPiWbMDLSKMj2cdH0BQCgF5MSZTfbM4MWgwNLb4nm/i/xmxxmnLlutp1AABY3/5cfrKAhtXVZmRo813ZQIi7MKAW+yIVTSEAaN87SfIbzZmTRhNDo2/LJiY2Y3NT5VJJ7ToAAKwp6Qo/nEejIjWbF5p9YzZQz1to7c8Wp6EpBAAteydRmdiMOWtnbdFbIQgfyuvN2X8PKRKiEAA06uhVvv+S8lSUlsNCy+/NBlrVEELd6cdzSEIA0KZ3kpSXm4iuBrXrsCYE4cOa2FScnoxbMwGABh3P5zuylPH1NZ4UGn97NtAnTJA5bc1AFAKA1ryXrPxfY9HDqHYdVoYgfFgC0YSmbCaW4QYAbTl9jW+6oDzTQPsxof13aAND67C0Akq4jKYQALTj/WTlhUZiNSe167A+BKEFGBm91BjLcAOAdqQX8bXpyouNdJERuniTNjCuPtuepZy6hqYQALRgeooyrj7zcVa7DptAEFqGu4HG1WcfHkZTCAAOL6uEVp5R/q+xdi+h/zsEocW80FD8/oySXap2HQAAD2dGijwmitVwUbsOW0EQWoy/Kz0eweamYvooADiwnFJaekr5dxMdpYOO3qoNTGjKvjqmFFaoXQcAQFXNPiSPqMuC3TR3H/q7QxBaUrin0DWYLTiBkUIAcEhXrtOik8rLemoHCUFocZOasw8PK+WIQgBwQB8elodEsDAPHbWDhCC0uGa+Qv1q9P1pJCEAOJiCcpp/XJnYVHe5oLs3bAOvNhVnpChYhxsAHMvHR5T4MBbuqa92kBCE1tA9RHAz0MYLSEIAcBhFFfTFMfnVZnoMBT2+ZxuY0JTNwjLcAOA4PktV4kJYlLfu2kFCEFrJoHCWVUK/56ApBAAHUCLRx0d02g4SgtBKRIH+04TNwjLcAOAIvjymdApijX302A4SgtB6xkSxg5f40atoCgHArpXJ9OER5Y3m+o0D/b5za3MR6ZkGWIYbAOzdghPKI9WFpr46bQcJQWhVzzVka84rF4rRFAKAnapQaPYh5XUdt4OEILQqH2caFck+OYKmEADs1NcnlUY+9EgN/baDhCC0tn83YV+fVPLL1a4DAOA2kkIzUpQ3muvlvoN3gyC0rpruwj9qsw8O45pCALA7S08pEZ7ULkDX7SAhCG3grWj2RaqSixv2AoA9kTnNSFHeitZ7O0gIQhuo5SE8Xof9FwvNAIA9WXFG8XOhTkF6bwcJQWgbbzQXF51UMjB9FADsAyeanqxMbYF2kAhBaBtBbjQmis1IwfRRALALP55V3I0UF4J2kAhBaDOvNRO/O62cLURTCAAq44TRwb9BENpIdRf6VwP2fjKaQgBQ2brziszp0ZpoB29AENrOK03Fn88rJwrQFAKAmqYlK5OjGWKwEoLQdqo50YuNxHeT0BQCgGp+vchLJfpHbRz8/4J9YVMvNWZbMhTckgIAVMGJ3vxTntIC7eDfIAhtytNIrzQVpyaiKQQAFXx3WmECPRaOI//fYHfY2vMN2R+5/OAlNIUAYFPlCk1OUGa0EtEO3gJBaGsuIr3ajL2diIVmAMCm5qYqjX2ELlhK5jYIQhWMq89S82l3NppCALCR/HKamSK/F4Nj/h1gp6jAidHrzdEUAoDtzEiR+9dijXzQDt4BglAdY6LYxWLanoWmEACsLqOYLziuvBWNA/6dYb+oQxTozWj25p9oCgHA6t5MUJ5ryELd0Q7eGYJQNcPqsKIK2nQBTSEAWNHhPP7LBeXlplhZ9K4QhKphAk2OZm8lyEhCALCeiQfkN6NFL6PaddgxBKGaBoYzJtCac7i+HgCsYkcWP1lAY+vjUH8v2DtqEoimtBDfSlAUdIUAYGmc6JX98qxWzAlH+nvC7lFZn5qCrzN9fwZNIQBY2PJTiijQQCyodj/YQeqb0kKcmqhIiEIAsJxyhaYkKh+0xoJq92duEObm5vbu3dvDwyMkJGT58uW3b7Bo0aI6Nzl37pzp+ePHj7du3drV1bVevXo7d+60VN1a0i1YCHWjb08hCQHAYj47qjTxEWIDkYP3ZzBzu1deeaV69ep5eXkJCQk9evTo0KFDzZo1b94gPz8/Ojp61qxZpi9DQkJMD0aNGvXoo4/u27fvhx9+GDx4cHp6uouLiwXfgDZMixGHbZeH12HOmOEMAA8tv5xmHpK39zH3CK9zZnWExcXFK1eufOONN5ycnNq2bdutW7elS5fevpmnp2fE/xiNRiJKTU09fPjwhAkTGGOPP/64n5/fhg0bLPwONKFdgNDQhxaeQFMIABYwPVkeUIs1rIZ20CxmBWF6erokSfXq1TN92ahRo7S0tNs3W7t2bWBgYIsWLb766ivTMydPnoyIiHBzc6v8xpMnT97tVTjn+fn5V/9HkqQHeysO7t2W4nvJSom+3jQAWF5GMf/6pDKlBc4vmcusxvnq1avu7u6CcOOPCy8vryNHjtyyTVxcXLdu3UJCQvbv3z9q1Ch3d/cRI0bk5+e7u7tXbuPl5ZWXl3e3VyksLGzRokXlq/Ts2XP+/Pl327i0tNRoNBoM2mn8o5wpxtdpTnLF8/UcIAyLiorULkHXsP9VJMtyeXm5Pf+lPmG/8em63EMuKyxUuxQrKC0tLS8vF0VzY97FxcV0hvIezAqS6tWrFxUVKYrCGCOi/Px8f3//W7Zp0qSJ6UGfPn1efPHFVatWjRgxws/P79q1a5Xb5Ofn169f/26v4uXllZaW5uvra05JBoNBY0FIRO+35l03Ss83c/V0hDUgPD091S5B17D/1WIKQldXV7ULubNDeXx7jnSik9EhDiNVIIqis7Oz+UFoDrNOjdasWdPFxaWyC0xJSak8TXpHlV1d/fr1z549W5mFKSkp9whCaOQjdA9mnxzFSCEAVNHEA/JbWFDtAZkVhK6ursOHD58yZUpeXt769ev37NkzYsQIIjp+/Hj//v1N2yxduvTYsWOXL1/euHHjJ598MmjQICKKjIxs06bNlClTrl27Nnfu3OvXr/fu3dt6b0YDprZgHx+Rr15Xuw4AcEDbs/jZQiyo9sDMPbU4a9asF154oWHDhkFBQStWrAgMDCQiSZIuX75s2iAlJeXdd9+9evVq7dq1p0+fbkpKIlqyZMkzzzwTGRkZFRW1du3a+56r1blIb6FfGPvoiPxOSwx0A8AD4EQT9svTH2FG5OADEji3l2Uu/fz8zB8j1N5kmUrni3iLn6Rjg4z+djoGQURUWFiIMSoVYf+ryG7HCJeeUj5LVfb1M2j7momSkhJ1xgjBlmp5CI/XYbMP4569AGCucoWmJiqzW2FBtapAENqjN5uLC08oGcX20qwDgJ379KjS1BcLqlURgtAeBbnR6Cg28xCmjwLA/eWX06xD8rQYHM+rCDvOTk1qJi4/pZwtRFMIAPfxfrI8sDYWVKs6BKGdqu5C/2rA3k9GUwgA93KxmC8+qUyOxjzzqkMQ2q9Xmoo/n1dOFKApBIC7ev2g8mxDFuSmdh2ODEFov6o50YuNxHeT0BQCwJ0dzuNbMpVXmqAdfCgIQrv2f43Z1gzlUB6aQgC4gymJysSmogfWKXk4CEK75mGk/zRBUwgAd5B0he/P5eOxoNpDwx60dy80Yvty+cFLaAoB4G+mJCiTmjNXDa6vZWsIQnvnItJrzdg7SVhoBgD+knCZJ17hT0XhGG4B2IkOYFx9dvQq7ctFUwgAN7yVIL+JdtBCEIQOwInR683ZW3+iKQQAIqI/L/PUq/RkPRzALQP70TGMjmTpxbQtE00hANAbB+U3mjMnHL8tBDvSMRgYTY9h//eHLGECKYC+7cnmp67RaIwOWg52pcN4LJyFutNnqUhCAF2bkii/GY2771oS9qUjmdNGfD9ZzizBCVIAndqTzdOL6Im6OHRbEvamI4n0Fp6ux149gKYQQKfeTJAnt2AGHLktCrvTwbwZLe7J4duz0BQC6M6WDJ5ZQkMjcNy2MOxQB+NmoP+2Yi/8LlegLQTQmXeS5LfRDloB9qjjGRTOwjwwawZAX365yK+U0T/RDloB9qlD+qStOB2zZgD0ZGqiPLUlY7gLvRUgCB1SXS/h6XpsImbNAOjD+nReXEGP1cYR2yqwWx3Vm9HiXsyaAdCHd5Lkd9AOWg2C0FG5GWg2Zs0A6MCa84qk0D/QDloN9qwDeyyc1fKgT48iCQE0ixO9nai83RLdoBUhCB3bnLbi9BQ5oxgnSAG06ceziihQ3zAcq60IO9ex1fUSxtXHrBkAbVI4vZukvNtSRDtoVQhCh/dmc3FfLmbNAGjQD2cUdwP1rokctC4EocNzNdDs1uz5vZg1A6ApMqd3kpS3W4pqF6J9CEItGFib1fakTzBrBkBDvjut+DpTXAjaQatDEGrEnLbiDMyaAdAKmdO0JOXdGLSDtoAg1Ii6XsJ4zJoB0IolaUoNV+oShHbQFhCE2vFGc3FfLt+WiaYQwLHJnKanKNMwOmgrCELtcDXQB62x1gyAw1t8UqnlQZ3QDtoKglBTBmDWDICDq1Do/WTlrWi0g7aDINSaOW3FmZg1A+CwFp1UorypQyDaQdtBEGpNXS9hfAM2AbNmABxQuUIzU5SpLdAO2hSCUINebyb+gVkzAA5o/nGlkQ+19kc7aFMIQg3CrBkAR1Qm04wUZTJGB20OQahNA2qzcE+ag1kzAI7jq2NKTHXhkRpoB20NQahZc9qKszBrBsBBlMk0+7AypQWOySrATtesOl7C+AbsFcyaAXAEc1OVNv5Ccz+0gypAEGoZZs0AOITLZTT7kIx2UC3Y71rmaqCP2mDWDIBd40RP7ZbHRLHGPmgH1YEg1Lh/1GLhnvTxESQhgJ2akaLklnLcd1BFCELtm9NWnHUIs2YA7NEfuXzOEXlFV9GIg7F6sO+1r46X8EwD9vJ+NIUA9uVSGQ3ZKi/uZAjzwElRNSEIdWFSM/HAJf7rRTSFAPZC4ZxBYCwAACAASURBVDRyhzQyUugVihRUGYJQF0yzZl7cJ1+X1S4FAIiIaHqKUiIRlhW1BwhCvehfi0V6Ya0ZALuwK5vPTZWXdxENOAbbAfwSdMR0h6bzRThBCqCmS2U0fLv8dUdDiDtOitoFBKGO1PESnm/IXsVaMwDqUTg9sUMaHSX0xNCg3UAQ6strzcSDl/gvmDUDoJL3kpUyGUOD9gVBqC+YNQOgop1Z/Itj8vIuoohu0J4gCHWnXy1WzxuzZgBsLbeURuyQF3cyBLshBu0LglCPPm6DWTMANmUaGnwySugRghS0OwhCParjJbzQiE3ErBkAW5mWrFxXaDKGBu0SglCnXm0q/olZMwA2sTOLf4mhQTuGINQpzJoBsA3T0OA3GBq0YwhC/TLNmsEdmgCsR+E0Yof0VD0hDkODdgxBqGumOzRh1gyAlbyTJFco9FY0hgbtGoJQ1yI8hRcasQm4QxOAFezI4vOP8+VdDBgatHMIQr2b1ExMzsOsGQALy7lx1aAY5KZ2KXA/CEK9cxbpk7YiZs0AWJDpqsFx9RmGBh0CghCoV6hQ31v4CLNmACzk7URZUuiN5jjAOgb8noCI6OO27IPDcjpmzQA8tC0ZfOFJ/l1XDA06DAQhEBFFeAoTmopDt8sVaAsBHkJWCY3aKS/tLAa4ql0KmA1BCDdMaMoCXYWX92OoEKCKFE4jd0rPNGCdg9AMOhIEIdwgEC3uJG7O4N+moSsEqIopibKs0CQMDToa/MLgL55G+qGr+PJ+OekKBgsBHsz2LL7oBF+OoUEHhCCEv2niK3zSVvznNrmgXO1SABxHTik9sUP+trMYiKFBB4QghFsNrcPiQoSRO2V0hQDmUDgN3y4924B1C0Yz6JAM5m/6/fffL1q0iDE2fvz4AQMG3PJ/jx49umjRopSUFBcXl/j4+LFjxzLGiGjBggUHDx40bePm5vbRRx9ZqnSwno/biF03SrNSlFeb4U8lgPt4K0HmRPjH4rjMDcLNmzc///zzS5YskSRp1KhRNWrUiI2NvXmDDRs2eHp6Tpo0qaio6KWXXsrLy5s0aRIRbd261cPDo0ePHkTk5ORk8TcA1mBk9ENXwyM/S9HVcUNtgHvZlskXn+QJAzA06MDMDcJPP/305Zdf7t27NxE9//zzc+fOvSUIJ06cWPk4MzNzyZIlpiAkoujo6MGDB1uoYLCRIDda0lkcvl060N8Q6o5/4gB3kF1KT+yQl2Bo0MGZ28snJye3bt3a9LhNmzZJSUn32Dg1NTUiIqLyy+XLlw8ePHjSpEmZmZlVLhRsr0uQ8GIjcdBWLEMKcAeSQkO2Ss83Yl0xNOjgzO0Ic3JyfHx8TI99fX2zs7PvtuXOnTu//fbbhIQE05fdu3c3GAxeXl6rV6+Ojo4+fPiwv7//Hb+xqKioc+fOBsONktq1azdjxoy7vUppaanRaKzcGKzkuTr0R7bxxT3SBy2lm58vLi4WBPzjVw32v4pkWS4vL5dleWqK6MrYcxFlRUVq16QnJSUlFRUVomjuLR5dXFzumxTmBomnp2dpaanpcXFxsbe39x03+/PPP4cMGfLDDz/UrVvX9MxTTz1lejBgwIC2bdsuW7bs3//+9x2/183Nbc6cOV5eXqYva9as6eHhcbd6RFFEENrGkq7U+mfpxyynUZF/nT/gnN/jtwPWhv2vIlMQ7rjs8kO6nDjA4OXirHZF+sIYc3Z2Nj8IzWFukNSqVev06dPt2rUjotOnT4eFhd2+TXJycnx8/Pz583v27Hm3H5KXl3e3l2CMNWvWzNfX18ySwDY8jfRDN7HLBqmprxDthy4EgDJK6Knd0oquhuouapcClmDuGOHQoUMXLFggSVJ5efmiRYuGDh1qen727NkXLlwgouPHj/ft2/ejjz7q169f5XcpipKammp6nJKSsmnTpo4dO1q0frCFxj7Cp23FIVvlfFxlD7onKTR6r/hSI7FDIP4u1Ahzg/DZZ591dXUNDw8PDw8PDAysPOH5+uuvnzlzhog++OCDjIyMoUOHCoIgCELt2rWJSJbljh07hoSEREVFdezYcdKkSXFxcdZ5I2Bdj9dhvUKFkTtwlT3o3eQk7m7gE5riqkHtEDh/gCNbRkYGYywoKMj8b+GcZ2RkSJIUGhp67yE9Pz+/tLQ0M0+NYrKM7VUo1G2j1Lsmm9SMFRYWenp6ql2RfmH/q2XTBf6vvfLeXlJoNZwVVUdJSYlqY4QmISEhD/oCgiCEhoY+6HeBHTIy+qGb4ZE1Ugs/od2dJ0sBaNnFYv7kLmlFF+bnjDMjmoLuHh5AoCst6SyO3CmlF2N0BPRFUmjodvk/TcT2AWqXApaGIIQH0zlIeLmJOOp3I66yB115/U/Zy0ivYGhQi/BLhQc2oSmr6U7//gNJCHqx8QJfcYZ/08mAMyGahCCEByYQfdGqYkcW//ok7mUP2nehmD+1S1reRcRVg1qFIISqcDfwn+LE1w7KiZcxawC0TFJo6Db55aZi+wB0g5qFIIQqquctfNJWfGyrfOW62qUAWM1rB+VqTvRyExwqtQy/Xai6f0aw/rWE0TslBW0haNGGC3zlWf5NZwwNahyCEB7K7FZiQTlNT8FgIWjNhWL+9C5peRfRD6tqax2CEB6KgdEP3QxfHlN+uYiuELSjQqHHt8kTMDSoDwhCeFiBrrS0szhmp5RehCwELVA4Pb1b9ncR/o2hQX3ArxksoFOQ8EpTsf9muVS6/8YAdm7CAfnUNb60i4hmUCcQhGAZ/2nCIr0EXGUPju6NP+VtmXxDT4M7lvTXDQQhWIZAtKijuDubL8JV9uCwPj6irDrLf+llqOakdilgQwhCsBgPI62OEycdlBNwlT04oK9PKp+lKtv7iAGuapcCtoUgBEuq5y18FSsOwlX24GiWnVKmJCi/9RaD3TAyqDsIQrCwf9RiA2oJo3bgKntwGGvPKxMOyL/0FiM8kYJ6hCAEy5vVSiysoPeSMVgIDmBbJh+7R17bw9CwGlJQpxCEYHmmq+znHVc2XUBXCHZtfy4ful1a2c0QUx0pqF8IQrCKAFf6oZs4Zpd0thBZCHbqcB7vv1n6uqOhYyBSUNcQhGAtbf2FV5uJA7fgKnuwR6eu8d6/ynPaio/WRArqHYIQrOjfjVmUt/ASrrIHO3OxmPfYJE9twf4ZgWMgIAjByhZ2EH/P4QtPYOIM2ItLZRS3SX6uIXu6Hg6AQIQgBGvzMNLq7uLrf+Iqe7ALBeXU6xdpeB2Ge+1CJXwUwOqivIV5seKgrfLlMrVLAX0rkajvb1JsgPBmNA598Bd8GsAW+tdij9UWhm2XZLSFoJJyhQZukep6CR+3FdWuBewLghBsZMYjYrlC05IwWAgqkDkN3y67G4QFHXBzJbgVghBsxMBoRVfDwhO4yh5sjRON3S1fK+fLu4iIQbgdghBsJ8CVVnQTx+ySzuAqe7AVTvTsXvlcIV8TZ3DGOVG4EwQh2FRbf2FSM3Eg7mUPtjLpoJx4mf/cw+CKG+3CXSAIwdZeasya+grj9+Aqe7C695KVDel8Yy+Dp1HtUsCOIQhBBV/EiolX+AJcZQ/W9Hmqsvik8ltvg5+z2qWAfUMQggrcDfRTd/GNP+U/cZU9WMfSU8qMFOW33mKQm9qlgN1DEII6Ir2Fz9uJg3Eve7CCL44prx1UNj8qhuNGu2AGBCGo5rFwNjhc+OdWXGUPFsOJpibKHxxWtj8q1vNGCoJZEISgpumPiEygdxIxcQYsoFyhJ3bIv17k+/oZIpGCYDYEIahJFGhpZ8PXJ/ma85g4Aw+lsIL6/SaVSLTtUUMNF7WrAYeCIASV+bvSD93Ef+2RT1/DGVKooswS3nG9VM9bWNVNxPWC8KAQhKC+Nv7CG83FgVvkElxlDw/uyFXedq3cv5Ywp63IcEIUHhyCEOzCC41YtB+usocHtjWTd9sozXyETW2B9dOgihCEYC++aC8evcrnHcdgIZjr2zRl+HZpZTfD43VwKIOqw9l0sBeuBlrRVYxdL0X7CY/UwBkuuI+ZKcpXx5UdfQz1q+HTAg8Ff0aBHYn0FubHioO3ypdwL3u4O5nTM3vl5aeV3X1FpCA8PAQh2Jd+tdjjdYSh23CVPdxZsUT9f5POXON74g0h7khBsAAEIdid92NEUaCpuMoebpNdSp3WSwGuwvqeuKEEWAyCEOwOE2hJZ8M3J/lP5zBxBv5yLJ+3XSv1DRMWdhSNOHSB5eDTBPboxlX2e3GVPdywK5t32SC90xKXSYDlIQjBTrXxFyZHi49twb3sgXZl88FbpWVdDE/UxSELLA+fKrBfzzVk0dWFsbjKXt+Sr/AhW6VvOxm6BWNqDFgFghDs2uftxNSr/MtjGCzUqSNXee9fpPkdxJ6hSEGwFgQh2DVXA/3QTZycIO/NwWCh7py6xnv/In/URowPw5EKrAgfL7B3db2EhR3FYdtxlb2+XCzmPTbJk6MZlk8Da8MnDBxAfBgbXkd4HFfZ68alMorbJD/bkI2tj2MUWB0+ZOAYpsWIRkaTEzBxRvvyy6nnJml4HfZKExygwBbwOQPHwARa3sXw3Wm+GlfZa1qxRH1/lToFCW9G4+gENoKPGjgMX2f6vqs4fo98PB9nSLWpVKK+v0r1vIUP2+CqebAd3IYJHEmrGsI7LcUh2+Q/+hnc8OHVlgqFBm+VQt2F+R1EXCphKR999NGyZcvUrsIyhg0b9p///McaPxnHEnAwzzRgf+Ty8XvkBR1EZ7QNWiFzGr5ddhKFrzuKDDFoOcnJyf369evTp4/ahTysjRs3JicnW+mHIwjB8XzRXhyyVQpYVtE9hMWHCX1qsuouatcED4ETPb1bLijna3sYDBiusbTatWu3bNlS7SoeVmpqalpampV+OIIQHI+bgdb3NORdp62Zyrrz/N9/VER4Cn3DhPgw1rI6ugnH88p++UQ+/623AS0+qAJBCI7K15kGh7PB4SQp4h+5fOVZZeAW2SCQKRE7BQm4U49DeP2gvC2Tb3vU4IH7C4JKEITg8AyMYgOF2EBxTls6epWvT+dTE+Xj+bxrMOsbJvSvxbyd1C4R7uLjI8rqc3xnX4OPs9qlgI4hCEFTGvkIjXyEV5uxS2W06YKyPp2/uK+isY8QH8YG1BaivHHi1I58nqrMTVV29hUDXNUuBfQNQQjaVMOFRkaykZFUKolbMpX16bzLBqWaE8XXEvrWZO0CBExNVNeSU8qMFGVnXzHYDb8JUBmCEDTO1UDxYSw+jBROSVf4unTl//6Q04t4r1AWX0voHcowNGV7a84rrx6Qtz5qCPdECoL6EISgF0ygltWFltXFqS3obCHfnMG/TVPG7pYfqSH0rckGRwhoTWxjcwYfv0fe1NPQoBp2ONygKMr333+fkJBw4cKF6dOn16lTx5avjnl1oEfhnsK4+mxdD8PZfxrH1WcJl3mTH6WYNdLURDnhMtZvs6Lfc/iIHdKP3QwtcKEL3ESSpKVLl7q5ua1bty4vL8/Gr44gBF3zcabB4ezbzmL2cOPMVuLV6zRoq9zqZ2l9OuLQ8g5e4gO2SN93NcQGIgX16/333z9//nzll++99156erqTk9PGjRvfffddo1GFsQoEIQARkZFRt2BhTlvxzD8Nb0WzqYlys9XSyrMK8tBSjlzl/X6TFnYwdAlCCupaZmbmF198YXq8f//+uXPnBgUFqVsSxggB/kYgig9jfcPY+nTl7URlWpLyZjQbFI5Jpg/l1DXe+xf5ozZi3zDsSJXNOaJ8ctRG9zITBJr5CHss/G8d13PPPdepU6e3337b2dl5/vz5Tz/9tCpd4M0QhAB3cHMcvpOovJukvIU4rKqLxbzHJnlyNHu8Dk5Bqe/Jeiy+lu0+yLfPQWvQoEGDBg1+/vnn3r17r1q1KiUlxWbF3A2CEOCuTHEYH8a2ZPBJB2XEYRXkllLcJvnZhmxsfaSgXfA0kqdR5Y/wM888M2/evCtXrsTGxtaqVUvdYghjhADm6B4iHPiHYVpLNiNFafGT9NM5jB2aJbOEd98kDa/DXmmCQw38ZeDAgUePHp05c+a4cePUroXogTrCbdu2bd261d/ff8yYMV5eXrdvcPbs2WXLlsmyPGTIkAYNGpie5JyvXr364MGDdevWHTVqlOrnggGqRiDqV4vF17oxdvh2ojK5BRtQG93hrU4U8H05fE8O35vDM4v5v5uwN6ORgvA3Tk5Oo0ePXrp06c03SoyMjDx16hQRtWrViojOnz8fFhZmm3rM/YAuXrx4+PDhPj4+u3fv7tChgyRJt2xw9uzZli1b5ufny7Lcpk2bQ4cOmZ5/4403Jk+eHBAQsGTJkiFDhliydgCbM50s/fMfhtmtxZkpSpMfpW/TFFnf7aGkUMJlPueIMmSrHLCsossGaeMF3sRHmB8rXn7COLUFbq0Ed5Cenj527FhR/OvjkZaWxm9isxQkMztCzvn777//+eefDxgwQFGUxo0br127duDAgTdv89lnn/Xr12/27NlEVFZW9uGHHy5evLigoODTTz/dv39/w4YNx44dGxQUdOTIkcaNG1vlrQDYUPcQoXuIYcMF/naiPC1ZGVRbGBjOWlYXdNIg5l2n33P43hxlbw5PusIjvYTYQGFgbeHDNoZQd53sA6ii5OTkJUuWbN68ec6cOWrXcoNZQXjx4sW0tLSePXsSEWOse/fuO3bsuCUIt2/fPnHiRNPjnj17Pvnkk0T0559/+vj4NGzYkIg8PDzatWu3fft2BCFoRp+aQp+ahoOX+E/nlCd2yCUS/aOWMKA26xAoiJqLg7QC/nsu35vD92bzi8W8tb/QPoBNjmat/QVPjHjAgwgLC9u7d2/16tXVLuQGs4IwKyvLw8PDzc3N9GVAQEBSUtIt22RnZ/v7+1dukJ2dzTnPysqqfNL0fFZW1t1epbS09KWXXnJ2vnFfspiYmNGjR99t47KyMlmWDQbMelVHWVkZhnsrNfGkJk1ochM6W0QbLgivHxBOFFCvEOpTk/cM5u5W+JDaZv9LCp28RvsuCb/nCrtzhQqFt/CjdjXo8VY8pjp3qhxXkalMtnYtdkSW5fLycsFBmn9ZtrvfTfPmzZs3b16Fb5RluaysrKysjHN+8znVezMajffd2Kx/owaDQVH+ugBTkqTb/xGKoli5xyVJEkVREIRbvlGW5Xv86xVFsVmzZu7u7qYvw8PD71G9+D/m1A8Wh51/R3W96SVveqkxXSimXzNo+VnhmX3UIZAeq0X9wsjLcsllvf1fWEEHLtHvl+j3XNp/iWq6UfsA6h5CE5tSw7/WyHaMDLAeB/r8M6admUqMMfEmZn6XOX+ymBWEwcHBJSUlV69e9fHxIaLMzMzbV8QJDg7OzMw0Pc7MzAwODiaioKCgzMxMzrmplIyMjA4dOtztVZycnJ588klfX19zSjKFMTpCtRiNRnSE9xBRjZ6pRs80oivXaUO6svKs8n/7eSt/oW9N9s86LPCh70Nr2f2fWcL35vA92XxvDj9ZwJv6CrGBwkuNhdgAhhvH344xxjl3lM+/o3Su5hAEwfg/lv1DxKw/FgIDA2NiYn788UciKikp2bRpU9++fYmosLBw7969pm369OmzatUq0+Mff/zRtEGbNm1kWd6zZw8RZWZmHjhwoHfv3hasHsDO+TnTyEi2rocha7jxxUYs4TJvuKoidp00M0U5dU21yaaSQkev8nnHlZE75NrfSzFrpG/TlGA34eM24uUnjHviDTMeEePDkIKgF+Z2VNOmTRs2bNj+/fuTkpKaNm3apUsXIjp8+HBsbCznnIieffbZNm3axMfHu7m57dmzZ9++fUTk7Oz87rvvDhkypH///lu3bh0/frw9LCIAYHtu/7s/cJksbs5QfjrH266Vwz2FuBAh2E0IdiN/VyHAlYLcBGuMKRJRQTn9nsN/z1X2ZPOEyzzcU4gNFHqGCu/GsFoe2mkaAKpAMMWYOc6dO7dz587g4OCuXbua2tLCwsJDhw61b9/etEFRUdGvv/4qSVLPnj2rVatW+Y2HDx9OSEiIiopq167dPX6+n59fWlqamadGS0tLcWpURYWFhZ6enmpX4dhkTjuz+N4cnlPKM0sot5TnlFJWCedEQW5CoCvVcBFC3KmGixDoRoGu5O8qBLlSgKvgajB3/58t5Htzbvx3rpDHVBdiA4V2AaxdgGDBAUu9MU2WcXV96BPcNjFu3Liff/7Zw8ND7UIeVlFRUb9+/ebPn19SUuLs7GzZU6MPEITWhiB0IAhC6ymWKLuEZ5fSpTKeUUyXynh2CWWV0qVSnlVKOaXcIFCgCw90Z4GuQqAb+bsIQW4U4Cr4u1KwG2WX0t7sG+HHibcPYLEBQrsAIdpPMGhn2oSaHCsIS0pKsrOz1a7CMkJCQpydna0RhAgSAPvibqA6XkIdL7rb5MxrFXTqUlExc88u5dkllFvGf8+h3DIlp5SySqiaE8UGCvG1hJmtWLgnznnqnZubW0REhNpV2DsEIYCD8TJSpCf39BRwGQOAReBcCQAA6BqCEAAAdA1BCAAAuuaoQbhx48bDhw+rXYV+zZ07t7i4WO0qdKq0tPTTTz9Vuwr9Sk1NXbdundpV6NeaNWuOHz9u2Z/pwEG4f/9+tavQr3nz5mlmTrbDyc3N/fLLL9WuQr8OHDiwYcMGtavQr3Xr1iUkJFj2ZzpqEAIAAFgEghAAAHQNQQgAALpmR0usubq6BgYGmnn3rMuXLzs7O2OVL7VcvHgxMDAQS9ypQpblzMzMmjVrql2IThUVFZWWltaoUUPtQnTq0qVLbm5ulXeuva9hw4a9++67997Gjg5kp06dun79upkbV1RUiKKopXtOOpbr1687O+MmParB/leRoij3vsc4WNWDHvxvv3vu7eyoIwQAALA9dFQAAKBrCEIAANA1BCEAAOgaghAAAHTNjmaNmqOsrOzQoUNHjhzx9/fv27fvHbe5evXqggULsrKy4uLievfubeMKNW/Pnj1r1qzx8fEZM2ZMcHDwLf/39OnTW7durfwyPj7enClbcA+bNm3avHlzUFDQ2LFjq1WrdvsGJ06cWLJkiSzLw4cPb9y4se0r1DDO+fLlyxMSEiIiIp5++mkXF5dbNtizZ09qamrll+PGjbNtgVpWVlaWnJycmpoaFBR0tyP5lStXFixYkJOT06tXrx49elT5tRysI/zvf/87YsSIjz/++KOPPrrjBpIkdezYMTExMSIiYvz48fPmzbNxhdq2YcOG/v37h4SEZGRktG7dOj8//5YNDh48OGPGjDP/U1ZWpkqdmjFv3rzx48dHREQkJiZ26NBBkqRbNkhLS2vdurUgCB4eHu3bt09JSVGlTq167bXXZs6cGRkZuXbt2kGDBt2+wfLly5ctW1b5gbd9hRr23nvvjRo16sMPP7zbEvPXr19v37794cOHw8PDx4wZ880331T9xbhDkWWZc/7ZZ5917dr1jhusWrWqfv36ps3Wr18fHh5uegwW0b59+y+++ML0uFu3bh9//PEtG3z33Xc9evSweV3aJMtyeHj4unXrTI8bNGjw448/3rLNCy+8MHbsWNPjiRMnjhw50tZVald+fr67u3tqairnvLi42MvLKykp6ZZtnnnmmWnTpqlRnfaZDt0ffvhh796977jB8uXLmzRpoigK53z16tX16tUzPa4CB+sI73sR5a5du7p162barHv37ufPn09PT7dJadpXUVGxb9++uLg405dxcXE7d+68fbPMzMzZs2cvXLgwJyfHtgVqTXp6+rlz57p3705EjLFu3brdvsN37dp1398IVE1CQoKPj0+DBg2IyM3NrX379rt27brjZrNmzVqxYoX564GAOe57tN+5c2dcXJwgCEQUFxd34sSJKt8Sx8GC8L6ysrIqlz5ydnb29vbOyspStyTNyMnJURTF39/f9GVAQMDt+9bT07NZs2b5+fnr1q1r0KBBYmKizcvUjqysLC8vr8pxqYCAgMzMzNu3qfzA+/v7Z2dncyyRYSHZ2dk3r6N2x/0fGhoaGBiYn5//wQcftGjR4tq1a7atUddu/vB7eHi4ublV+Whvd0E4a9Ysw218fHzM/HaDwSDLcuWXFRUVTk5O1qlUm/71r3/dvv9jYmKIyLSmVOUw1R33bZ8+fZYuXTpt2rQ1a9aMHDly8uTJNq5fS4xG482DghUVFbcvq2YwGCq3kSTJYDCY/kCGh3f7weT2/f/6669//vnn77///r59+1xdXb/66ivb1qhrt/wDkSSpykd7uwvCiRMnSre5evWqmd9umsdhelxQUFBUVHT7zEa4hy+//PL2/f/nn38SUY0aNYxGY+XuzcjIuPeM0Hbt2mH6wMMIDg4uLi6unJF0xx0eEhJS2aZkZGSEhITYtERNCw4OzszMrOyw7/2BF0WxTZs2+MDb0s0f/tzc3PLy8iof7e0uCKtm+/btBQUFRBQfH//LL78UFRUR0apVq2JiYjB931IYY3369Fm5ciURSZK0Zs2afv36EdH169e3bdtWXl5ORJXTRDnn69evx2z+hxEcHBwTE7Nq1SoiKioq2rRpk2mHFxQUbN++3bRNfHy86TdCRCtXroyPj1erWu1p1aqVKIqmXZ2RkbF///5HH32UiLKzs//44w/TNqWlpaYHJSUlW7duxQfe2jjn27ZtKywsJKL4+PgNGzaUlJQQ0apVq9q3b+/r61v1n+tAtm7d2rJly7CwME9Pz5YtW77++uum5xlju3fvNj0eOHBg06ZNR44cWb169c2bN6tXrAYlJSVVr1592LBhbdu2jY2NLSsr45yfO3eOiEx/O/fv379Lly4jRoxo3rx5RETEqVOn1C7Zsf32229+fn4jR45s2rTpwIEDTU/u3r2bMWZ6fOnSpaioqJ49e/bv379WrVoXL15Ur1gNWrhwob+//5gxYyIiIiZMmGB6cvHixZGRkabHQUFBffv2HT58eGhoaFxcnOlfBFjEpk2bvHv3jgAAAWZJREFUWrZsGRoa6u3t3bJlyylTpnDOKyoqiOjAgQOcc0VR+vbt27x585EjR/r5+e3YsaPKr+Vgd5+4evXqzScffH19w8PDiejgwYMNGjTw8PAgIs75zp07s7OzY2NjQ0NDVatVoy5durR9+/Zq1ap16dLFNGpYXl6enJwcHR1tNBqvXr164MCBvLy84ODgtm3bYoD24V28eHHPnj2BgYGdOnUyjf8VFRUdO3bskUceMW1QUlKyZcsWWZa7d++OO3Ra3IkTJxITE+vUqdOqVSvTM5cvX87KymrSpAkRpaenJyUllZWVRUZGtmjRQtVKtSYvL+/s2bOVX/r5+dWuXZuIDhw40KhRI9P9CBVF2bFjR25ubseOHR9mFMzBghAAAMCyNDJGCAAAUDUIQgAA0DUEIQAA6BqCEAAAdA1BCAAAuoYgBAAAXUMQAgCAriEIAQBA1xCEAACgawhCAADQNQQhAADo2v8DJhMMqV8JuGEAAAAASUVORK5CYII=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "([0.9999999959286234, 0.9999999907475938], \"optimal\")" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "NWTN(TF[6], printing=true, Plotf=1)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.4", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}