Skip to content

Commit 3378ffd

Browse files
authored
Added precompilation for nonlinear least squares
Please refer to discourse post: https://discourse.julialang.org/t/excessively-long-ttfx-with-optimization-and-optimizationoptimjl/118457/7
1 parent 4d4c78a commit 3378ffd

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

lib/OptimizationOptimJL/src/OptimizationOptimJL.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,4 +453,34 @@ function SciMLBase.__solve(cache::OptimizationCache{
453453
stats = stats)
454454
end
455455

456+
457+
PrecompileTools.@compile_workload begin
458+
459+
function obj_f(x, p)
460+
A = p[1]
461+
b = p[2]
462+
return sum((A * x - b) .^ 2)
463+
end
464+
465+
function solve_nonnegative_least_squares(A, b, solver)
466+
467+
optf = Optimization.OptimizationFunction(obj_f, Optimization.AutoForwardDiff())
468+
prob = Optimization.OptimizationProblem(optf, ones(size(A, 2)), (A, b), lb=zeros(size(A, 2)), ub=Inf * ones(size(A, 2)))
469+
x = OptimizationOptimJL.solve(prob, solver, maxiters=5000, maxtime=100)
470+
471+
return x
472+
end
473+
474+
solver_list = [OptimizationOptimJL.LBFGS(),
475+
OptimizationOptimJL.ConjugateGradient(),
476+
OptimizationOptimJL.GradientDescent(),
477+
OptimizationOptimJL.BFGS()]
478+
479+
for solver in solver_list
480+
x = solve_nonnegative_least_squares(rand(4, 4), rand(4), solver)
481+
x = solve_nonnegative_least_squares(rand(35, 35), rand(35), solver)
482+
x = solve_nonnegative_least_squares(rand(35, 10), rand(35), solver)
483+
end
484+
end
485+
456486
end

0 commit comments

Comments
 (0)