Giter Site home page Giter Site logo

pseudo MX optimizations about casadi HOT 1 OPEN

jgillis avatar jgillis commented on July 19, 2024
pseudo MX optimizations

from casadi.

Comments (1)

jgillis avatar jgillis commented on July 19, 2024

Proof of concept for option 4:

from casadi import *

h = MX.sym("h")
v = MX.sym("v")
m = MX.sym("m")


f = Function('f',[h],[h**2])
cg = CodeGenerator('f')
cg.add(f)
cg.add(f.forward(1))
cg.generate()

f = external('f',Importer('f.c','shell'))


g = Function('g',[h],[cos(h)])
cg = CodeGenerator('g')
cg.add(g)
cg.add(g.forward(1))
cg.generate()

g = external('g',Importer('g.c','shell'))

a = MX.sym("a")
b = MX.sym("b")

u = 9

p = [a,b]

y = [v, (u-a*v**2)/m-9.81, -b*u**2+g(f(h)*m+sqrt(v))]

x = [h,v,m]


def my_jacobian(y,x,p):


	[y_lifted,w,wdef] = extract(y,{"lift_shared":False,"lift_calls":True})

	sp = jacobian_sparsity(vcat(wdef),vcat(w))
	nnz = [jacobian(wdef[r],w[c]) for r,c in zip(sp.row(),sp.get_col())]

	J = Function("J",[vcat(x),vcat(w),vcat(p)],[vcat(nnz)],{"always_inline":True})
	
	jac = MX.sym("jac",sp)
	
	jacnnz = MX.sym("jacnnz",len(nnz))
	jac = sparsity_cast(jacnnz,sp)
	
	f = Function('f',[vcat(x),vcat(w),vcat(p),jacnnz],[jacobian(vcat(y_lifted),vcat(w)) @ solve(DM.eye(jac.shape[0])- jac,jacobian(vcat(wdef),vcat(x))) +jacobian(vcat(y_lifted),vcat(x))])
	f = f.expand('f',{"cse":True,"always_inline":True})
	
	[w_expr,_] = substitute_inplace(w,wdef,y_lifted)
	
	return f(vcat(x),vcat(w_expr),vcat(p),J(vcat(x),vcat(w_expr),vcat(p)))


ref = Function('ref',[vcat(x),vcat(p)],[jacobian(vcat(y),vcat(x))])
f = Function('f',[vcat(x),vcat(p)],[my_jacobian(y,x,p)])

DM.rng(1)

x_ = DM.rand(3)
p_ = DM.rand(2)

print(ref(x_,p_))
print(f(x_,p_))

from casadi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.