AutoOptimize.jl
Automatic optimization and parallelization for Scientific Machine Learning (SciML)
Install / Use
/learn @SciML/AutoOptimize.jlREADME
AutoOptimize
Note: This repo is still experimental!
Do you want your calculation to go faster but are also too lazy to
optimize your code? Well I have a solution for you! Introducing the
AutoOptimize system. With a simple ]add AutoOptimize, we'll send
it straight to your home and SHIPPING IS FREE! In seconds your
calculations will be taking seconds. So what do you have to lose?
Here, come on in and I'll show you how to use it.
Making Code Fast, the Lazy Way
Define an ODEProblem, prob. Alright, I'll wait for you to catch
up. Now call:
_prob = auto_optimize(prob)
Now _prob is better, so go use that one.
Example: Faster PDEs
using AutoOptimize, OrdinaryDiffEq, LinearAlgebra, SparseArrays
# Define the constants for the PDE
const α₂ = 1.0
const α₃ = 1.0
const β₁ = 1.0
const β₂ = 1.0
const β₃ = 1.0
const r₁ = 1.0
const r₂ = 1.0
const _DD = 100.0
const γ₁ = 0.1
const γ₂ = 0.1
const γ₃ = 0.1
const N = 32
const X = reshape([i for i in 1:N for j in 1:N],N,N)
const Y = reshape([j for i in 1:N for j in 1:N],N,N)
const α₁ = 1.0.*(X.>=4*N/5)
const Mx = Tridiagonal([1.0 for i in 1:N-1],[-2.0 for i in 1:N],[1.0 for i in 1:N-1])
const My = copy(Mx)
Mx[2,1] = 2.0
Mx[end-1,end] = 2.0
My[1,2] = 2.0
My[end,end-1] = 2.0
# Define the discretized PDE as an ODE function
function f(u,p,t)
A = @view u[:,:,1]
B = @view u[:,:,2]
C = @view u[:,:,3]
MyA = My*A
AMx = A*Mx
DA = @. _DD*(MyA + AMx)
dA = @. DA + α₁ - β₁*A - r₁*A*B + r₂*C
dB = @. α₂ - β₂*B - r₁*A*B + r₂*C
dC = @. α₃ - β₃*C + r₁*A*B - r₂*C
cat(dA,dB,dC,dims=3)
end
u0 = zeros(N,N,3)
MyA = zeros(N,N);
AMx = zeros(N,N);
DA = zeros(N,N);
prob = ODEProblem(f,u0,(0.0,10.0))
But then you're like "but diz code is beautiful!" and I'm just proper chuffed: how do I make my benchmarks look good if you don't want to write good code?
Well, I guess this calls for Doctor Auto Optimize!
_prob,_alg = auto_optimize(prob)
After this churns away for a bit, you go boom:
@btime solve(_prob, TRBDF2()) # 168.558 ms (4925 allocations: 101.41 MiB)
and there you go, now you're solving 4 PDEs a second. What was it like before the optimization?
@btime solve(prob, TRBDF2(autodiff=false)) # 249.993 s (18560715 allocations: 1281.93 GiB)
That's a lean 1483x temporal speedup!
Related Skills
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
best-practices-researcher
The most comprehensive Claude Code skills registry | Web Search: https://skills-registry-web.vercel.app
groundhog
398Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
isf-agent
a repo for an agent that helps researchers apply for isf funding
