@jgillis jgillis released this Aug 8, 2018

Assets 43

Install

Grab a binary from the table (for MATLAB, use the newest compatible version below):

WindowsLinuxMac
Matlab R2016a or later,
R2014b,
R2014a,
R2013a or R2013b
R2014b or later,
R2014a
R2015a or later,
R2014b,
R2014a
Octave 4.2.2 (32bit / 64bit),
4.4.0 (32bit / 64bit)
4.2.2 4.4.0
Python Py27 (32bit* / 64bit*),
Py35 (32bit* / 64bit*),
Py36 (32bit* / 64bit*),
Py37 (32bit* / 64bit*)
Py27,
Py35,
Py36,
Py37
Py27,
Py35,
Py36,
Py37
or just pip install casadi (needs pip -V>=8.1)

(*) Check your Python console if you need 32bit or 64bit - bitness should be printed at startup.

Unzip in your home directory and adapt the path:

Matlab/OctavePython

addpath('<yourpath>/casadi-matlabR2014a-v3.4.5')
import casadi.*
x = MX.sym('x')
disp(jacobian(sin(x),x))


from sys import path
path.append(r"<yourpath>/casadi-py27-v3.4.5")
from casadi import *
x = MX.sym("x")
print(jacobian(sin(x),x))

Get started with the example pack.

Troubleshooting

Getting error "CasADi is not running from its package context." in Python? Check that you have casadi-py27-v3.4.5/casadi/casadi.py. If you have casadi-py27-v3.4.5/casadi.py instead, that's not good; add an extra casadi folder.

Got stuck while installing? You may also try out CasADi without installing, right in your browser (pick Python or Octave/Matlab).

Release notes

Credit where credit is due: Proper attribution of linear solver routines, reimplementation of code generation for linear solvers #2158, #2134

CasADi 3.3 introduced support for two sparse direct linear solvers relying based on sparse direct QR factorization and sparse direct LDL factorization, respectively. In the release notes and in the code, it was not made clear enough that part of these routines could be considered derivative works of CSparse and LDL, respectively, both under copyright of Tim Davis. In the current release, routines derived from CSparse and LDL are clearly marked as such and to be considered derivative work under LGPL. All these routines reside inside the casadi::Sparsity class.
Since CasADi, CSparse and LDL all have the same open-source license (LGPL), this will not introduce any additional restrictions for users.

Since C code generated from CasADi is not LGPL (allowing CasADi users to use the generated code freely), all CSparse and LDL derived routines have been removed or replaced in CasADi's C runtime. This means that code generation for CasADi's 'qr' and 'ldl' is now possible without any additional license restrictions. A number of bugs have also been resolved.

Parametric sensitivity for NLP solvers #724

CasADi 3.4 introduces differentiability for NLP solver instances in CasADi. Derivatives can be calculated efficiently with either forward or reverse mode algorithmic differentiation. We will detail this functionality in future publications, but in the meantime, feel free to reach out to Joel if you have questions about the functionality. The implementation is based on using derivative propagation rules to the implicit function theorem, applied to the nonlinear KKT system. It is part of the NLP solver base class and should in principle work with any NLP solver, although the factorization and solution of the KKT system (based on the sparse QR above) is likely to be a speed bottle neck in applications. The derivative calculations also depend on accurate Lagrange multipliers to be available, in particular with the correct signs for all multipliers. Functions for calculating parametric sensitivities for a particular system can be C code generated.

A primal-dual active set method for quadratic programming

The parametric sensitivity analysis for NLP solvers, detailed above, is only as good as the multipliers you provide to it. Multipliers from an interior point method such as IPOPT are usually not accurate enough to be used for the parametric sensitivity analysis, which in particular relies on knowledge of the active set. For this reason, we have started work on a primal-dual active set method for quadratic programming. The method relies on the same factorization of the linearized KKT system as the parametric sensitivity analysis and will support C code generation. The solver is available as the "activeset" plugin in CasADi. The method is still work-in-progress and in particular performs poorly if the Hessian matrix is not strictly positive definite.

Changes in Opti

  • describe methods in Matlab now follows index-1 based convention.
  • Added show_infeasibilities to help debugging infeasible problems.
  • Added opti.lbg,opti.ubg

Changes in existing functionality

  • Some CasADi operations failed when the product of rows and columns of a matrix was larger then 2^31-1.
    This limit has been raised to 2^63-1 by changing CasADi integer types to casadi_int (long long).
    The change is hidden for Python/Octave/Matlab users, but C++ users may be affected.
  • Fixed various bottlenecks in large scale MX Function initialization
  • Non-zero location reports for NaN/Inf now follow index-1 based convention in Matlab interface.

Added functionality

  • SX Functions can be serialized/pickled/saved now.
  • Added for-loop equivalents to the users guide
  • New backend for parallel maps: "thread" target, shipped in the binaries.
  • Uniform 'success' flag in solver.stats() for nlpsol/conic
  • Added evalf function to numerically evaluate an SX/MX matrix that does not depend on any symbols
  • Added diff and cumsum (follows the Matlab convention)
  • Added a rootfinder plugin ('fast_newton') that can code-generate
  • Added binary search for Linear/BSpline Interpolant. Used by default for grid dimensions (>=100)

Binaries

  • Binaries now come with a large set of plugins enabled
  • Binaries ship with "thread" parallelization
  • Binaries are hosted on Github instead of Sourceforge

Misc

  • Default build mode is Release mode once again (as was always intended)
  • CasADi passes with -Werror for gcc-6 and gcc-7

@jgillis jgillis released this May 20, 2018

Assets 37

Install

Grab a binary from the table (for MATLAB, use the newest compatible version below):

WindowsLinuxMac
Matlab R2014b or later,
R2014a,
R2013a or R2013b
R2014b or later,
R2014a
R2015a or later,
R2014b,
R2014a
Octave 4.2.2 (32bit / 64bit) 4.2.2 4.4.0
Python Py27 (32bit* / 64bit*),
Py35 (32bit* / 64bit*),
Py36 (32bit* / 64bit*)
Py27,
Py35,
Py36
Py27,
Py35,
Py36
or just pip install casadi (needs pip -V>=8.1)

(*) Check your Python console if you need 32bit or 64bit - bitness should be printed at startup.

Unzip in your home directory and adapt the path:

Matlab/OctavePython

addpath('<yourpath>/casadi-matlabR2014a-v3.4.4')
import casadi.*
x = MX.sym('x')
disp(jacobian(sin(x),x))


from sys import path
path.append(r"<yourpath>/casadi-py27-v3.4.4")
from casadi import *
x = MX.sym("x")
print(jacobian(sin(x),x))

Get started with the example pack.

Troubleshooting

Getting error "CasADi is not running from its package context." in Python? Check that you have casadi-py27-v3.4.4/casadi/casadi.py. If you have casadi-py27-v3.4.4/casadi.py instead, that's not good; add an extra casadi folder.

Got stuck while installing? You may also try out CasADi without installing, right in your browser (pick Python or Octave/Matlab).

Release notes

Credit where credit is due: Proper attribution of linear solver routines, reimplementation of code generation for linear solvers #2158, #2134

CasADi 3.3 introduced support for two sparse direct linear solvers relying based on sparse direct QR factorization and sparse direct LDL factorization, respectively. In the release notes and in the code, it was not made clear enough that part of these routines could be considered derivative works of CSparse and LDL, respectively, both under copyright of Tim Davis. In the current release, routines derived from CSparse and LDL are clearly marked as such and to be considered derivative work under LGPL. All these routines reside inside the casadi::Sparsity class.
Since CasADi, CSparse and LDL all have the same open-source license (LGPL), this will not introduce any additional restrictions for users.

Since C code generated from CasADi is not LGPL (allowing CasADi users to use the generated code freely), all CSparse and LDL derived routines have been removed or replaced in CasADi's C runtime. This means that code generation for CasADi's 'qr' and 'ldl' is now possible without any additional license restrictions. A number of bugs have also been resolved.

Parametric sensitivity for NLP solvers #724

CasADi 3.4 introduces differentiability for NLP solver instances in CasADi. Derivatives can be calculated efficiently with either forward or reverse mode algorithmic differentiation. We will detail this functionality in future publications, but in the meantime, feel free to reach out to Joel if you have questions about the functionality. The implementation is based on using derivative propagation rules to the implicit function theorem, applied to the nonlinear KKT system. It is part of the NLP solver base class and should in principle work with any NLP solver, although the factorization and solution of the KKT system (based on the sparse QR above) is likely to be a speed bottle neck in applications. The derivative calculations also depend on accurate Lagrange multipliers to be available, in particular with the correct signs for all multipliers. Functions for calculating parametric sensitivities for a particular system can be C code generated.

A primal-dual active set method for quadratic programming

The parametric sensitivity analysis for NLP solvers, detailed above, is only as good as the multipliers you provide to it. Multipliers from an interior point method such as IPOPT are usually not accurate enough to be used for the parametric sensitivity analysis, which in particular relies on knowledge of the active set. For this reason, we have started work on a primal-dual active set method for quadratic programming. The method relies on the same factorization of the linearized KKT system as the parametric sensitivity analysis and will support C code generation. The solver is available as the "activeset" plugin in CasADi. The method is still work-in-progress and in particular performs poorly if the Hessian matrix is not strictly positive definite.

Changes in Opti

  • describe methods in Matlab now follows index-1 based convention.
  • Added show_infeasibilities to help debugging infeasible problems.
  • Added opti.lbg,opti.ubg

Changes in existing functionality

  • Some CasADi operations failed when the product of rows and columns of a matrix was larger then 2^31-1.
    This limit has been raised to 2^63-1 by changing CasADi integer types to casadi_int (long long).
    The change is hidden for Python/Octave/Matlab users, but C++ users may be affected.
  • Fixed various bottlenecks in large scale MX Function initialization
  • Non-zero location reports for NaN/Inf now follow index-1 based convention in Matlab interface.

Added functionality

  • SX Functions can be serialized/pickled/saved now.
  • Added for-loop equivalents to the users guide
  • New backend for parallel maps: "thread" target, shipped in the binaries.
  • Uniform 'success' flag in solver.stats() for nlpsol/conic
  • Added evalf function to numerically evaluate an SX/MX matrix that does not depend on any symbols
  • Added diff and cumsum (follows the Matlab convention)
  • Added a rootfinder plugin ('fast_newton') that can code-generate
  • Added binary search for Linear/BSpline Interpolant. Used by default for grid dimensions (>=100)

Binaries

  • Binaries now come with a large set of plugins enabled
  • Binaries ship with "thread" parallelization
  • Binaries are hosted on Github instead of Sourceforge

Misc

  • Default build mode is Release mode once again (as was always intended)
  • CasADi passes with -Werror for gcc-6 and gcc-7

@jgillis jgillis released this May 3, 2018

Assets 37
Merge branch 'develop' of github.com:casadi/casadi into release-3.4.3

@jgillis jgillis released this Apr 24, 2018

Assets 37

Octave bumped to 4.2.2.
Worhp solver fixed.
Docstrings are back for all casadi methods.

@jgillis jgillis released this Apr 11, 2018

Assets 37
Merge branch 'master' of github.com:casadi/casadi into release-3.4.1

@jgillis jgillis released this Mar 6, 2018

Assets 37
release 3.4.0

@jgillis jgillis released this Mar 6, 2018 · 611 commits to master since this release

Assets 37
version 3.4.0-rc1

@jgillis jgillis released this Jan 3, 2018 · 813 commits to master since this release

Assets 37

Install

Grab a binary from the table (for MATLAB, use the newest compatible version below):

Windows Linux Mac
Matlab R2014b or later,
R2014a,
R2013a or R2013b
R2014b or later,
R2014a
R2015a or later,
R2014b,
R2014a
Octave 4.2.1 (32bit / 64bit) 4.2.1 4.2.1
Python Py27 (32bit1,2 / 64bit2),
Py35 (32bit2 / 64bit2),
Py36 (32bit2 / 64bit2)
Py27,
Py35,
Py36
Py27,
Py35,
Py36

1 Use this when you have Python(x,y).
2 Check your Python console if you need 32bit or 64bit - bitness should be printed at startup.

Or see the download page for more options.

Unzip in your home directory and adapt the path:

Matlab/OctavePython
addpath('.../casadi-matlabR2014a-v3.3.0')
import casadi.*
x = MX.sym('x')
disp(jacobian(sin(x),x))
from sys import path
path.append(r".../casadi-py27-v3.3.0")
from casadi import *
x = MX.sym("x")
print(jacobian(sin(x),x))

New: install with pip install casadi

Get started with the example pack.

Troubleshooting

Getting error "CasADi is not running from its package context." in Python? Check that you have casadi-py27-v3.3.0/casadi/casadi.py. If you have casadi-py27-v3.3.0/casadi.py instead, that's not good; add an extra casadi folder.

Release notes

New and improved features

Support for finite differences

CasADi is now able to calculate derivatives using finite differences approximations. To enable this feature, set the "enable_fd" option to true for a function object. If the function object has built-in derivative support, you can disable it by setting the options enable_forward, enable_reverse and enable_jacobian to false.

The default algorithm is a central difference scheme with automatic step-size selection based on estimates of truncation errors and roundoff errors. You can change this to a (cheaper, but less accurate) one-sided scheme by setting fd_method to forward or backward. There is also an experimental discontinuity avoiding scheme (suitable if the function is differentiated near nonsmooth points that can be enable by setting fd_method to smoothing.

New linear solvers with support for C code generation

Two sparse direct linear solvers have been added to CasADi's runtime core: One based on an up-looking QR factorization, calculated using Householder reflections, and one sparse direct LDL method (square-root free variant of Cholesky). These solvers are available for both SX and MX, for MX as the linear solver plugins "qr" and "ldl", for MX as the methods "SX::qr_sparse" and "SX::ldl". They also support for C code generation (with the exception of LDL in MX).

Faster symbolic processing of MX graphs

A speed bottleneck, related to the topological sorting of large MX graphs has been identified and resolved. The complexity of the sorting algorithms is now linear in all cases.

Other improvements

  • A\y and y'/A now work in Matlab/Octave
  • Matrix power works
  • First major release with Opti
  • shell compiler now works on Windows, allowing to do jit using Visual Studio
  • Added introspection methods instruction_* that work for SX/MX Functions. See accessing_mx_algorithm example to see how you can walk an MX graph.
  • Experimental feature to export SX/MX functions to pure-Matlab code.
  • DM::rand creates a matrix with random numbers. DM::rng controls the seeding of the random number generator.

Distribution/build system

  • Python interface no longer searches for/links to Python libraries (on Linux, OSX)
  • Python interface no longer depends on Numpy at compile-time; CasADi works for any numpy version now
  • Python binaries and wheels have come a step closer to true manylinux.
    CasADi should now run on CentOS 5.

API changes

Refactored printing of function objects

The default printout of Function instances is now shorter and consistent across different Function derived classes (SX/MX functions, NLP solvers, integrators, etc.). The new syntax is:

from casadi import *
x = SX.sym('x')
y = SX.sym('x',2)
f = Function('f', [x,y],[sin(x)+y], ['x', 'y'], ['r'])
print(f) # f:(x,y[2])->(r[2]) SXFunction
f.disp() # Equivalent syntax (MATLAB style)
f.disp(True) # Print algorithm

I.e. you get a list of inputs, with dimension if non-scalar, and a name of the internal class (here SXFunction).
You can also get the name as a string: str(f) or f.str(). If you want to print the algorithm, pass an optional argument "True", i.e. f.str(True) or f.disp(True).

Changes to the codegen C API

The C API has seen continued improvements, in particular regarding the handling of external functions with memory allocation. See the user guide for the latest API.

Other changes

  • inv() is now more efficient for large SX/DM matrices, and is evaluatable for MX (cparse by default).
    The old variant is still available for SX/MX as inv_minor, and for MX as inv_node.
  • Linear solver-related defaults are now set to csparse as opposed to symbolicqr
  • In Matlab, when the CasADi result is a vector<bool>, this gets mapped to a logical matrix. E.g. which_depends is affected by this change.
  • The sum-of-squares operator is now called sumsqr instead of sum_square.
  • The API of the Linsol class has changed.

@jgillis jgillis released this Mar 6, 2018 · 848 commits to master since this release

Assets 37
version 3.3.0-rc2

@jgillis jgillis released this Mar 6, 2018 · 1046 commits to master since this release

Assets 36
version 3.3.0-rc1