CasADi - A software framework for nonlinear optimization and optimal control
Authors/Creators
Description
Install
Grab a binary from the table:
<table> <tr><th></th><th>Windows</th><th>Linux</th><th>Mac classic (High Sierra or above)</th><th>Mac M1</th></tr> <tr> <th>Matlab</th> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-windows64-matlab2018b.zip">R2018b</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-linux64-matlab2018b.zip">R2018b</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-osx64-matlab2018b.zip">R2018b</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-osx_arm64-matlab2018b.zip">R2023b</a> or later (Apple Silicon)<br/><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-osx64-matlab2018b.zip">R2018b</a> or later (Rosetta)</td> </tr> <tr> <th>Octave (<10)</th> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-windows64-octave7.3.0.zip">6.2.0</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-linux64-octave7.3.0.zip">6.2.0</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-osx64-octave7.3.0.zip">6.2.0</a> or later</td> <td><a href="https://github.com/casadi/casadi/releases/download/3.8.0/casadi-3.8.0-osx_arm64-octave7.3.0.zip">6.2.0</a> or later</td> </tr> <tr> <th>Python</th> <td colspan="4"><code>pip install casadi</code> (needs <code>pip -V</code>>=8.1)</td> </tr> <tr> <th>Javascript</th> <td colspan="4"><code>npm install @casadi/casadi-wasm</code></td> </tr> </table>
For Matlab/Octave, unzip in your home directory and adapt the path:
<pre> <code> addpath('<yourpath>/casadi-3.8.0-windows64-matlab2018b') </code> </pre>
Check your installation:
<table> <tr><th>Matlab/Octave</th><th>Python</th><tr> <tr><td> <pre> <code> import casadi.* x = MX.sym('x') disp(jacobian(sin(x),x)) </code> </pre> </td><td>
<pre> <code> from casadi import * x = MX.sym("x") print(jacobian(sin(x),x)) </code> </pre>
</td></tr> </table>
Get started with the example pack. Onboarding pointers have been gathered by the community at our wiki.
Troubleshooting
Release notes
New frontends
CasADi gains two new language front-ends, each with a set
of examples under docs/examples shipped in the example pack.
This is experimental work. Users are encouraged to try it out and post any bugs.
Julia
CasADi can now be driven from Julia without Python intermediary, thanks to an extension of SWIG.
The example docs/examples/julia/simple_nlp.jl should look fairly familiar to seasoned CasADi Python users:
import CasADi as ca
x = ca.SX.sym("x", 2)
f = x[1]^2 + x[2]^2 # objective
g = x[1] + x[2] - 10 # constraint: x0 + x1 - 10 >= 0
nlp = Dict("x" => x, "f" => f, "g" => g)
solver = ca.nlpsol("solver", "ipopt", nlp)
sol = solver(lbg = 0)
println("primal solution = ", sol["x"])
JavaScript / WebAssembly
CasADi now runs in the browser and in Node.js as a WebAssembly module
(#4355), distributed on npm. As
JavaScript has no operator overloading, expressions are built with functional
forms such as ca.plus/ca.times (from
docs/examples/javascript/simple_nlp.js):
const ca = await require("@casadi/casadi-wasm")(); // load the WebAssembly module
const x = ca.SX.sym("x", 2);
const [x0, x1] = ca.vertsplit(x);
const nlp = { x: x,
f: ca.plus(ca.times(x0, x0), ca.times(x1, x1)), // objective
g: ca.minus(ca.plus(x0, x1), ca.SX(10)) }; // x0 + x1 - 10 >= 0
const solver = ca.nlpsol("solver", "ipopt", nlp);
const sol = solver.call({ lbg: ca.DM(0) });
console.log("primal solution = " + sol["x"]);
The same module loads straight from a CDN (e.g. unpkg.com/@casadi/casadi-wasm),
so if you are into vibecoding self-contained HTML pages, you can now drop a full
CasADi optimization - IPOPT and all - into a single static .html file with no
build step (see docs/examples/javascript/unpkg_demo.html).
ONNX interoperability
CasADi can now bridge to the ONNX ecosystem in two complementary ways, so that trained neural networks and other ONNX graphs can participate directly in CasADi computations:
- Black-box evaluation (#4209): an ONNX model can be loaded and evaluated as a CasADi Function, backed by ONNX Runtime. The model is treated as an opaque, dtype-aware box; derivatives are provided through finite differences, or by AD if the ONNX writer augmented the graph with appropriately-named output nodes.
- Symbolic translation (#4246): an ONNX graph can instead be imported into native CasADi expressions, and CasADi expressions can be exported back to ONNX. Imported this way, a model is differentiated analytically by CasADi like any other expression and takes part in code generation.
Both modes are driven through a new GraphBuilder class:
# Black-box: load an ONNX model and evaluate it as a CasADi Function
f = ca.GraphBuilder("model.onnx").create("f")
print(f(ca.vertcat(0.5, 1.0, -2.0)))
# Symbolic: import the model into native, differentiable CasADi expressions ...
g = GraphBuilder("model.onnx").create("g", {"symbolic": True})
# ... or export a CasADi Function back to ONNX
GraphBuilder(f).export_onnx("roundtrip.onnx")
This is a new capability and still evolving. The symbolic translation is
available when CasADi is built with WITH_ONNX; the ONNX Runtime black-box
backend additionally requires WITH_ONNX_RUNTIME (which forces WITH_ONNX).
More efficient matrix multiplication
CasADi was historically targeted at small/medium heterogeneous dynamic systems, where dense-dense multiplication is typically rare and not a computational bottleneck (though large sparse-sparse products do play an important role). This release closes the remaining gaps so that dense-heavy workloads are no longer penalized:
- The CasADi runtime now has a specialization for dense-dense multiplication (previously only the code generator had one) (#4292).
- The CasADi runtime and code generator now have a specialization for dense-sparse multiplication.
mtimes, in both the runtime and the generated code, now takes an extra "BLAS argument" that selects which multiplication kernel is used. For dense problems you can choose between the built-in reference kernel, whatever BLAS CasADi was built against, and blasfeo:
mtimes(A, B) # default: built-in reference kernel (triple loop)
mtimes(A, B, "reference") # same -- explicit
mtimes(A, B, "classic") # whatever was built into CasADi via WITH_LAPACK (typically OpenBLAS)
mtimes(A, B, "blasfeo") # uses blasfeo
The blas argument is ignored when either operand is sparse.
Symbolic expressions
det(A, lsolver)computes a determinant through a linear-solver factorization (e.g. CSparse LU,symbolic_qr) instead of cofactor expansion, making determinants of large, sparse matrices practical (#2821). Thanks @nielsvd (Niels van Duijkeren).- B-splines now accept symbolic knots: the
bsplineconstructor takes its knots (and coefficients) asMX, so knot positions can be supplied or differentiated at evaluation time rather than baked in at construction. - The specialized
blazing_splinenow supports up to five input dimensions and a parametric-knots variant whose knots are a symbolic input. - A new dump node provides an alternative to
monitorfor inspecting intermediate values during evaluation (#4306). kron(Kronecker product) is now backed by a dedicated MX node (#939).- breaking: comparing an
SXand anMXwith==now raises an error instead of silently returningFalse(#2817). - Reverse-mode derivatives of Functions with structurally-sparse (e.g. upper-triangular) inputs now behave consistently between SX and MX (#4345).
- Using
linspacewith MX symbols as start/end points no longer causes the number of nodes to blow up (#3531). - Computing the Jacobian of a subset of constraints no longer produces more nodes than the Jacobian of all constraints in certain cases (#4354).
- Multiplying with a complex matrix now raises a
TypeErrorinstead of segfaulting (#4216). - Fixed a zero-by-N inconsistency
(#3977) and a non-identity
transform issue in
eval_mx(#2934). SX::set_precisionis now respected when printing SX (#4326), andprint_instructionsis harmonized across SX and MX (#4170).
Graph optimization with transform
Expression and Function graphs can now be optimized through a single, ordered
pipeline of passes, exposed as Function.transform (and as a free function
transform on expressions). This is the new,
consistent entry point for graph simplification, replacing the older per-type
simplify methods (#4227); the
simplification engine underneath has itself been substantially reworked and
extended (#2069,
#4219).
The syntax takes the form of a list of verbs such as combine_terms prefixed with "simplify".
# on an expression (or list of expressions):
transform(8*y - 3*y, [["simplify", "combine_terms"]]) # -> 5*y
# on a Function — an explicit pipeline, or the default flow with no arguments:
f.transform([["simplify", "combine_terms"]])
f.transform() # default: cse + ref_count + const_folding + empty_inputs
The currently available verbs are:
- combine_terms: (old
simplify) like terms are collected into a single weighted term:transform(8*y - 3*y, [["simplify", "combine_terms"]]) # -> 5*y transform(8*(5*x) - 3*(x + 3 + (12*x - x) - 17*x), [["simplify", "combine_terms"]]) # -> 55*x - 9 - const_folding: constant subgraphs are evaluated once, at build time. A
product of constant matrices collapses to a single constant matrix, leaving
only the symbol-dependent work (see the worked example below), and call nodes
that invariably evaluated to zero are dropped
(#172,
#2574,
#3019):
A = MX(DM([[2, 0], [1, 3]])) transform(A @ A @ x, [["simplify", "const_folding"]]) # A@A precomputed to [[4,0],[5,9]] - ref_count: a long-awaited class of simplifications that can make use of reference counting.
There have been a great deal of on-the-fly simplifications such
a+b-a->bsince a long while in CasADi. These are restricted to situations where the resultant nodes set is unconditionally beneficial. As an example, a transformation-(a-b)->b-ais only beneficial ifa-bis not used somewhere else in the graph. The list of reference-counting aware simplifications is fairly limited for now, but is expected to grow in the future.transform(-(a - b), [["simplify", "ref_count"]]) # -> b - a - cse: common subexpression elimination: a repeated subexpression is
computed once and shared rather than recomputed per use (also available as
cse):transform(sin(x)+1/sin(x), [["simplify", "cse"]]) # sin(x) evaluated once, shared - empty_inputs: a Function argument that never reaches an output is
replaced by a structurally-empty matrix, flagging it as unused
(#4214):
f = Function("f", [x, p], [x**2]) # p never reaches the output g = f.transform([["simplify", "empty_inputs"]]) g.nnz_in(1) # 3 -> 0: input p is now empty
Two further pipeline verbs compose with these: expand lowers an MX Function to
an SXFunction, and external applies a transform supplied by an external
shared library (for plugin-defined optimizations).
Passes run in the order given; an integer before a task sets how many times it
runs - a positive count runs it that many times, and 0 runs it until a fixed
point - so a pipeline can be iterated to convergence.
For example, the following commands runs an unlimited amount "ref_count" passes, followed by 2 "constant_folding" passes.
f.transform("g", [["simplify",0,"ref_count",2,"const_folding"]])
Function
- A new
Function.activity(mask)propagates an input "activity" mask (which input nonzeros may be nonzero) to the outputs, exploiting annihilation - an inactive operand of a multiplication kills the product - so it is strictly sharper than ordinary sparsity propagation (#3019). get_function()now raises a clear error instead of crashing when given an unknown name (#4238), andfind_functionsnow descends into the oracle (#4033).expandnow honours theexpandoption/generate_options(#4236), and thedetect_simple_boundshelper now observes theexpandoption (#4235). For example, a Function constructed with 'print_instructions' now still prints the instructions after an.expand()pass.
Code generation
It is now thread-safe to evaluate code-generated non-trivial Functions (i.e. those carrying memory objects, such as NLP/QP solvers) from multiple threads at once (#2463). To make a generated Function thread-safe:
- Make sure the consumer of the generated code calls
incref/decreffrom the main thread. - Pass the
thread_safeoption as true in the code-generation step. This injects generic mutex facilities into the generated code. - When compiling, choose one of these compiler definitions to select the
threading primitive:
-DCASADI_THREAD_TYPE=CASADI_THREAD_TYPE_POSIX,-DCASADI_THREAD_TYPE=CASADI_THREAD_TYPE_C11,-DCASADI_THREAD_TYPE=CASADI_THREAD_TYPE_OMP, or-DCASADI_THREAD_TYPE=CASADI_THREAD_TYPE_WINDOWS. - When compiling, specify the maximum number of threads, e.g.
-DCASADI_MAX_NUM_THREADS=2.
Related thread-safety fixes: a memory leak in JIT-compiled Functions that mixed
incref/decref (#4331), and a
crash of the Windows binaries when thread-mapping a Function with memory objects
(#4274).
Other code-generation changes:
- Code-generated memory handling has been refactored
(#4250). breaking: the
generated C API no longer exposes the legacy
alloc_mem/init_mem/free_mementry points. They were always ignored byexternalso it is unlikely that any code relied on theire presence. Memory was always managed throughcheckout/release(#4249, #3764). - Code-generated subroutines that were missing the
CASADI_PREFIXare now correctly prefixed (#4245). - Sliced get/set/assign of nonzeros now generates efficient code rather than a nested loop (#4264).
dump_inis now implemented in code generation (#3971).
Integrators and events
- The integrator class now supports events (zero-crossings), making it possible to simulate hybrid systems. A zero-crossing field can be added to the DAE oracle, and an option bounds the maximum number of events for which memory is allocated (#3682).
- Finite differences now respect
is_diff_in(#4278). - Fixed a regression in collocation derivatives (#3371), sparsity issues in the integrator (#3353), and a multipoint-collocation Jacobian error (#3190).
DaeBuilder / FMI interoperability
- The DaeBuilder public API has been streamlined for consistency
(#4319): consistent category
names (e.g.
yfor outputs,algfor residual variables), a generalizedall, and a single genericoutputs(cat)replacing the per-category shorthands (ydef(),wdef(), ...). DaeBuilder.export_fmuhas been streamlined (#4165) and now returns a dictionary giving the relative path of each generated file, instead of just a list of generated files. Two companion methods close the loop entirely within CasADi:compile_fmucompiles the exported sources into a binary, andpack_fmupacks the file map into a single distributable.fmuarchive.- FMUs exported from CasADi now contain the serialized CasADi expressions that define them, following a so-called FMI Layered Standard (#4023). When such an FMU is imported back into CasADi, a symbolic DaeBuilder instance is created instead of a standard (black-box C API) instance.
- DAEs are now supported in FMUs
(#4307), quadrature states are
detected in standard FMUs (splitting states into
xandq, #4100), and a time transformation can redesignate the independent variable (#4103). - FMU options are now mutable (#4310), and resources can be unzipped to a custom temporary directory (#4175).
- Continued work on Base Modelica import (#4024).
- Fixes: incorrect sparsity in generated FMUs (#4367), an FMI model structure regression (#4210), and an incorrect FMU resource path under FMI 3 (#4309).
Solvers / plugins
New solver interfaces:
- FICO Xpress, a new
conicinterface for LP/MIP/QP (#2797, #4360; contribution by @brunoficoxpress, Bruno Vieira). It can extract an irreducible infeasible set (IIS) - a minimal subset of constraints and bounds that together make a model infeasible - to help diagnose infeasible problems. - Mosek, a new
conicinterface. - PIQP, a new
conicinterface wrapping the PIQP proximal interior-point QP solver. ccopt, a newnlpsolplugin for mathematical programs with complementarity constraints (MPCC), built on the madNLP backend. Complementarity pairs (0 <= x ⊥ y >= 0) are declared through theind_ccoption; seedocs/examples/cplusplus/basic_mpcc.cpp.- UNO, a new
nlpsolinterface (#3908; contribution by @david0oo, David Kiessling).
New capabilities on existing solvers:
- Major upgrade of the madNLP interface (by @apozharski, Anton Edvinovich Pozharskiy).
- The Gurobi interface accepts a user-supplied CasADi Function via a new
lazy_constraints_callbackoption. Gurobi calls it at each new integer-feasible solution (a MIPSOL event) with the current solution, and the function returns lazy constraints that are injected into the branch-and-bound on the fly — enabling cutting-plane workflows such as subtour elimination (contribution by @aghezz1, Andrea Ghezzi). - The DAQP interface now supports binary variables (MIQP) (#4258; contribution by @aghezz1, Andrea Ghezzi).
- Fixed SLEQP memory issues (#3312), a bonmin malloc error on macOS (#4198), and improved diagnostics when IPOPT cannot be found (#3090).
Opti
- breaking Fix in
opti.dualreturn values (#4020).
Python
NumPy interoperability
CasADi now works much more naturally alongside NumPy, through two new facilities.
A numpy-style array view, casadi.array (a.k.a. casadi.ArrayInterface).
This wraps a DM, SX or MX and gives it NumPy semantics: a logical
ndim, NumPy-style indexing (so A[0] is the first row, where a plain CasADi
M[0] is the first element), axis-aware reductions, and the usual operators.
Call .to_casadi() to get the native CasADi value back. This settles the
long-standing confusion that CasADi indexing did not match NumPy
(#2959):
import casadi as ca
A = ca.array([[1, 2, 3], [4, 5, 6]]) # ca.array is ca.ArrayInterface
A.ndim # 2
A[0] # first row [1, 2, 3] (NumPy-style)
A.to_casadi() # back to a native DM / SX / MX
Opt-in NumPy dispatch via GlobalOptions.setNumpyMode(1).
With this enabled, calling a NumPy function on a CasADi value follows NumPy's shape/axis contract
and returns a casadi.array, instead of the old behaviour of silently
densifying. A large set of NumPy ufuncs (__array_ufunc__, NEP 13) and
array-functions (__array_function__, NEP 18) now dispatch natively on CasADi
types — np.concatenate, np.where, np.reshape, np.dot/np.matmul/np.kron,
the reductions (np.sum, np.cumsum, np.max, ...), and np.linalg.*
(solve, det, inv, cholesky, norm) - including symbolic SX/MX
inputs (#2626, partly inspired by
aerosandbox, #2762):
import numpy as np
from casadi import SX, DM, GlobalOptions
GlobalOptions.setNumpyMode(1) # opt in (temporary - becomes the default later)
x = SX.sym("x", 3)
np.concatenate([x, x]) # dispatches on a symbolic (NEP 18)
np.sum(DM([[1, 2], [3, 4]]), axis=0) # [4, 6] — true NumPy axis semantics
np.linalg.solve(DM([[2, 0], [0, 4]]), DM([2, 8])) # np.linalg.* handled natively -> [1, 2]
The mode is a transitional feature: 0 (default) keeps the old behaviour but warns, -1 keeps
it silently, 1 opts into the new NumPy-aware behaviour. As the mode may disappear in the future, it is best to probe availability with hasattr(casadi.GlobalOptions, "setNumpyMode").
NumPy bug
breaking The behavior of np.remainder/np.mod/% applied on CasADi types was fixed to be in align with numpy expectations.
All of the below return 1 in Python.
print(np.remainder(3,2))
print(np.mod(3,2))
print(3 % 2)
Now consider the CasADi variants:
print(np.remainder(ca.DM(3),ca.DM(2)))
print(np.mod(ca.DM(3),ca.DM(2)))
print(ca.DM(3) % np.array(2))
These returned -1 in prior CasADi versions, and now return 1.
Other Python changes
- Python wheels now ship with type stubs, and the SWIG bindings are checked with pyright in CI (#4315). Thanks to @ghorn (Greg Horn) for suggesting this.
- Fixed a crash under Python 3.10 (#3878) and dimension-mismatch errors that were swallowed under SWIG 4 (#2628).
MATLAB / Octave
- Custom
Callbackobjects work in MATLAB again: a long-standing regression that made MATLAB callbacks segfault has been fixed (#1720). - Added
vcat/hcatand friends for MATLAB (#4338). - Error messages are no longer clipped in MATLAB (#3806) or Octave (#3044).
- Fixed a missing string typemap for MATLAB (#4205) and issues with the Octave 10.2 binary package (#4193).
Building and distribution
- Plugins can now be located via a new
CASADI_PLUGIN_SEARCH_PATHenvironment variable (#4339), and the Windows DLL search has been refined (#4340). - The directory CasADi uses for temporary/scratch files (JIT and shell
compilation, code generation, FMU unzipping) can now be redirected with
GlobalOptions.setTempWorkDir()(#4175). - The source-build instructions have been updated (#3061).
- Fixed an
RTLD_DEEPBIND/environworkaround that corrupted the environment for loaded libraries (#4317), a build bug with-DWITH_BUILD_MUMPSand a missingMETIS_DIR(#4328), and a SWIG issue on Apple Silicon (#2992).
Binaries
- breaking: Support for Python 2.7 and 3.6 is dropped.
- Python binaries for 3.11 and upwards now use the Python stable ABI (#4289), so a single wheel keeps working across future Python versions. Thanks to @jackvreeken (Tjerk Vreeken) for suggesting this.
- Python, MATLAB and Octave binaries targeting Linux are now compiled with
manylinux_2_28(previouslymanylinux2014).manylinux2014Python wheels are still supplied in parallel for backwards compatibility. - breaking: As a consequence, we no longer build with
CXX_USE_CXX11_ABI=0(#4222). C++ code that links against the binaries must now be built with the new libstdc++ ABI to match. - breaking: Python binaries are no longer distributed as zip files; wheels are now the sole mode of distribution.
- macOS builds switched to macos-14 (#4184), fixing broken wheels on macOS 15.4+ (#4189).
Contributors
Thanks to everyone who contributed pull requests to this release. Beyond the
items credited inline above, this release includes community contributions from
@sixpearls (Ben Margolis — Python mtimes dispatch,
#4268), @barracuda156 (Sergey
Fedorov — PowerPC/Darwin build fixes,
#4112,
#4113), @qbisi
(FindMUMPS.cmake fix, #3899),
@nim65s (Guilhem Saurel — a missing include,
#4192), @jarsarasty (HiGHS v1.13.1
upgrade, #4299), @billtubbs (Bill Tubbs —
Python semicolons and asserts, #3968),
@adrian-nilsson-fcc (Adrian Nilsson — FMU demo notebook,
#3900), and @josipkh (Josip Kir
Hromatko — typo fixes, #3848).
The full list of closed issues for this release is available on the 3.8 milestone.
Plugin versions used in binaries
3.8.0
- uno-sourcebuild, Build UNO (BUILD_UNO_VERSION=f311df65f2acd1745175d3b49db4a5bdca15ce16) from downloaded source (BUILD_UNO_GIT_REPO=https://github.com/jgillis/Uno.git).
- piqp-sourcebuild, Build PIQP (BUILD_PIQP_VERSION=v0.6.3) from downloaded source (BUILD_PIQP_GIT_REPO=https://github.com/PREDICT-EPFL/piqp.git).
- highs-sourcebuild, Build HiGHS (BUILD_HIGHS_VERSION=v1.13.1) from downloaded source (BUILD_HIGHS_GIT_REPO=https://github.com/ERGO-Code/HiGHS).
- daqp-sourcebuild, Build DAQP (BUILD_DAQP_VERSION=master) from downloaded source (BUILD_DAQP_GIT_REPO=https://github.com/jgillis/daqp.git).
- proxqp-sourcebuild, Build PROXQP (BUILD_PROXQP_VERSION=v0.7.2) from downloaded source (BUILD_PROXQP_GIT_REPO=https://github.com/Simple-Robotics/proxsuite.git).
- osqp-sourcebuild, Build OSQP (BUILD_OSQP_VERSION=v1.0.0) from downloaded source (BUILD_OSQP_GIT_REPO=https://github.com/osqp/osqp.git).
- superscs-sourcebuild, Build SuperSCS (BUILD_SUPERSCS_VERSION=4d2d1bd03ed4cf93e684a880b233760ce34ca69c) from downloaded source (BUILD_SUPERSCS_GIT_REPO=https://github.com/jgillis/scs.git).
- sleqp-sourcebuild, Build SLEQP (BUILD_SLEQP_VERSION=patch-1) from downloaded source (BUILD_SLEQP_GIT_REPO=https://github.com/jgillis/sleqp.git).
- bonmin-sourcebuild, Build BONMIN (BUILD_BONMIN_VERSION=releases/1.8.9) from downloaded source (BUILD_BONMIN_GIT_REPO=https://github.com/coin-or/Bonmin.git).
- ipopt-sourcebuild, Build IPOPT (BUILD_IPOPT_VERSION=3.14.19.mod) from downloaded source (BUILD_IPOPT_GIT_REPO=https://github.com/jgillis/Ipopt-1.git).
- cbc-sourcebuild, Build CBC (BUILD_CBC_VERSION=releases/2.10.12) from downloaded source.
- clp-sourcebuild, Build CLP (BUILD_CLP_VERSION=releases/1.17.10) from downloaded source (BUILD_CLP_GIT_REPO=https://github.com/coin-or/Clp.git).
- mumps-sourcebuild, Build MUMPS (BUILD_MUMPS_TP_VERSION=gate-unconditional-use-omp-lib) from downloaded source (BUILD_MUMPS_TP_GIT_REPO=https://github.com/jgillis/ThirdParty-Mumps.git).
- spral-sourcebuild, Build SPRAL (BUILD_SPRAL_VERSION=d385d2c9e858366d257cafaaf05760ffa6543e26) from downloaded source (BUILD_SPRAL_GIT_REPO=https://github.com/ralna/spral.git).
- metis-sourcebuild, Build METIS (BUILD_METIS_TP_VERSION=bugfix2) from downloaded source.
- fatrop-sourcebuild, Build FATROP (BUILD_FATROP_VERSION=v1.1.8.mod) from downloaded source (BUILD_FATROP_GIT_REPO=https://github.com/jgillis/fatrop.git).
- hpipm-sourcebuild, Build HPIPM (BUILD_HPIPM_VERSION=5aac723660da0e1c9c47a9b98a0a80c5789aaed4) from downloaded source (BUILD_HPIPM_GIT_REPO=https://github.com/jgillis/hpipm.git).
- trlib-sourcebuild, Build TRLIB (BUILD_TRLIB_VERSION=1599192a02aee4e0cbe47ad1dbb81c7b06ff4f17) from downloaded source (BUILD_TRLIB_GIT_REPO=https://github.com/jgillis/trlib.git).
- blasfeo-sourcebuild, Build BLASFEO (BUILD_BLASFEO_VERSION=fb39d77a8c2d87805d38d41635a1402b5bcb9e18) from downloaded source (BUILD_BLASFEO_GIT_REPO=https://github.com/giaf/blasfeo.git).
- lapack-sourcebuild, Download and install OpenBLAS for LAPACK+BLAS
- eigen3-sourcebuild, Build Eigen (BUILD_EIGEN3_VERSION=3.4.0) from downloaded source (BUILD_EIGEN3_GIT_REPO=https://gitlab.com/libeigen/eigen.git).
- simde-sourcebuild, Build Simde (BUILD_SIMDE_VERSION=v0.7.2) from downloaded source.
- lacemodelica-sourcebuild, Build LaceModelica (BUILD_LACEMODELICA_VERSION=main) from downloaded source (BUILD_LACEMODELICA_GIT_REPO=https://github.com/yacoda/lacemodelica.git).
- onnx-sourcebuild, Build ONNX (BUILD_ONNX_VERSION=v1.18.0) from downloaded source (BUILD_ONNX_GIT_REPO=https://github.com/onnx/onnx).
- protobuf-sourcebuild, Build Protobuf from source
- libzip-sourcebuild, Build LIBZIP (BUILD_LIBZIP_VERSION=v1.11.3) from downloaded source (BUILD_LIBZIP_GIT_REPO=https://github.com/nih-at/libzip).
- zlib-sourcebuild, Build ZLIB (BUILD_ZLIB_VERSION=v1.3.1) from downloaded source (BUILD_ZLIB_GIT_REPO=https://github.com/madler/zlib).
- coinutils-sourcebuild, Build COINUTILS (BUILD_COINUTILS_VERSION=releases/2.11.12) from downloaded source.
- osi-sourcebuild, Build OSI (BUILD_OSI_VERSION=releases/0.108.11) from downloaded source.
- cgl-sourcebuild, Build CGL (BUILD_CGL_VERSION=releases/0.60.9) from downloaded source.
Notes
Files
casadi/casadi-3.8.0.zip
Files
(5.9 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:0512c0f05dbfd64a7ffae47585c811ef
|
5.9 MB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/casadi/casadi/tree/3.8.0 (URL)
Software
- Repository URL
- https://github.com/casadi/casadi