Skip to content
jgillis edited this page Mar 30, 2016 · 258 revisions
<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-19006862-1']); _gaq.push(['_setDomainName', 'casadi.org']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>

CasADi

Welcome to CasADi!

CasADi is a symbolic framework for algorithmic (a.k.a. automatic) differentiation and numeric optimization. Using the syntax of computer algebra systems, it allows users to construct symbolic expressions consisting of either scalar- or (sparse) matrix-valued operations. These expressions can then be efficiently differentiated using state-of-the-art algorithms for algorithmic differentiation in forward and reverse modes and graph coloring techniques for generating complete, large and sparse Jacobians and Hessians.

The main purpose of the tool is to be a low-level tool for quick, yet highly efficient implementation of algorithms for nonlinear numerical optimization. Of particular interest is dynamic optimization, using either a collocation approach, or a shooting-based approach using embedded ODE/DAE-integrators. In either case, CasADi relieves the user from the work of efficiently calculating the relevant derivative or ODE/DAE sensitivity information to an arbitrary degree, as needed by the NLP solver. This together with a full-featured Python front end, as well as back ends to state-of-the-art codes such as Sundials (CVODES, IDAS and KINSOL), IPOPT, WORHP, SNOPT and KNITRO, drastically reduces the effort of implementing the methods compared to a pure C/C++/Fortran approach.

Every feature of CasADi (with very few exceptions) is available in C++ and Python with little to no difference in performance, so the user has the possibility of working completely in C++, Python or mixing the languages. We recommend new users to try out the Python version first, since it allows interactivity and is better documented than the C++ front-end.

CasADi is an open-source tool, written in self-contained C++ code, depending only on the C++ Standard Library. It is developed by Joel Andersson and Joris Gillis at the Optimization in Engineering Center, OPTEC of the K.U. Leuven under supervision of Moritz Diehl. CasADi is distributed under the LGPL license, meaning the code can be used royalty-free even in commercial applications.

Pointers

In the following pages, you will find instructions on how to install and use CasADi, as well as pointers to how to get more help.

Help and support:


Core ingredients Demo with code
Core ingredients of CasADi Code demo of CasADi
(These videos use the older 2.4 syntax, but the core ideas remain valid). ***

Getting Started:

References:

Admin howto | Repo structure

News

23 March 2016:
CasADi 3.0.0 has been released. See the list of changes for a list of changes from the previous release. Also see the changes from the release to the current trunk version. Check the documentation for this release.

24 January 2016:
Release candidate 1 for version 3.0 is now available.

December 2015:
Version 2.4.2 brings binaries for OSX for the first time (Python and Matlab)

22 September 2015:
Version 2.4.0 has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

3 August 2015:
Release candidate 1 for version 2.4.0 is now available.

19 March 2015:
Release candidate 1 for version 2.3.0 is now available. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

23 January 2015:
Version 2.2.0 has now been released. For this release we put a major effort towards a Matlab interface. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

11 October 2014:
Version 2.1.0 has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

25 July 2014:
Version 2.0.0 has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

2 April 2014:
Version 1.9.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

16 February 2014:
Version 1.8.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

19 July 2013:
Version 1.7.1beta has now been released. This is a maintenance release with various bugfixes. Check the documentation for this release.

28 June 2013:
Version 1.7.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

New or improved features include:

  • Extensive bug fixes.
  • Nightly builds and binary distribution of the code for Windows and Linux.
  • AD with matrix-valued atomic operations (MX) has reached a stable state. Vast improvements in speed over older previous versions of the code.
  • C-code generation has now been extended to expressions with matrix-valued atomic operations (MX).
  • Major, non-backwards compatible update to the NLP solver syntax. See the list of changes for details on conversion from previous versions

7 March 2013:
Version 1.6.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

7 October 2012:
Version 1.5.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

New or improved features include:

  • Extensive bug fixes.
  • Major improvements to the build system. In addition to compiling on Linux and Windows, CasADi has now compiles well on Mac OS X.
  • A major update of the support for embedding ODE/DAE integrators into symbolic expressions. Forward and adjoint sensitivities to an arbitrary degree is now supported. The integrator formulation has been extended to contain a DAE with initial conditions coupled to another DAE with terminal constraints.
  • Sundials (version 2.5.0) and qpOASES (version 3.0) are now distributed with CasADi.
  • An interface to the NLP-solver WORHP has been added.
  • The IPOPT interface has been extended to support calculations of parametric sensitivities using sIPOPT.
  • Vast improvements to the CasADi::SQPMethod class, CasADi's in-house NLP solver based on sequential quadratic programming. Thanks to Attila Kozma for these improvements!

6 July 2012:
Version 1.4.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

New or improved features include:

  • Extensive bug fixes
  • Major performance improvements, in particular related to the matrix-valued expression type (CasAD::MX)
  • Added (still experimental) support for just-in-time compilation using the LLVM framework.
  • Major changes to the CasAD::Integrator. The new DAE syntax is based on a semi-explicit form, although the ODE part of the DAE is allowed to be implicit.

10 October 2011:
Version 1.3.0beta has now been released. See the list of changes for a list of changes from the previous release. Check the documentation for this release.

New or improved features include:

  • Extensive bug fixes
  • Interfaces to several new tools, including the OOQP, qpOASES and the ACADO integrators
  • A feature complete Octave front-end (though not as stable as the Python front-end)
  • Faster, more economical symbolic and numeric Jacobians through graph coloring
  • Symbolic Jacobian generation for the MX class, using both forward and adjoint mode (still beta)
  • An automated test robot compiles the trunk and runs the test suit after every commit with GCC as well as Visual C++, making the trunk notably more stable than before. Thanks Joris for this great feature!
  • Automatic transformation of certain MX graphs to the (less economical but more efficient) SX graph.

1 June 2011:
Version 1.2.0beta has now been released. See the list of changes for a list of changes from the previous release.

New or improved features include:

  • Extensive bug fixes
  • A major documentation effort (thanks Joris and Attila!)
  • A Python-based test suite
  • A first version of a symbolic Jacobian generation for the MX class
  • An Octave front-end (working but not yet completed)

8 February 2011:
Version 1.1.0beta has now been released, the first completely public release. You will find it in the Sourceforge SVN, where the code is now located. Enjoy!

Clone this wiki locally