[![Build Status](https://travis-ci.com/zanellia/feasible_sqp.svg?branch=testing)](https://travis-ci.com/zanellia/feasible_sqp) # A feasible sequential quadratic programming strategy with iterated second-order corrections This package provides a solver for parametric nonconvex programs of the form <img src="https://github.com/zanellia/feasible_sqp/blob/master/figures/nlp_description.png" width="296" height="160"> ## dependencies `feasible_sqp` uses the sparse implementation of the QP solver `qpOASES` which depends on MA57. Unfortunately, this complicates installation a bit. You need to obtain a valid license for HSL and its source code (see [this page](https://www.hsl.rl.ac.uk/download/MA57/3.11.0/)). After obtaining the source code for HSL, you'll need to download the METIS package (version 4.3 is required) [here](http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD/metis-4.0.3.tar.gz), extract the code and place it inside the root folder of coinhsl. Proceed then with the installation instructions of HSL, i.e., run `./configure`, `make` and `make install`. ## installation - clone the repo: ```bash git clone https://github.com/zanellia/feasible_sqp.git ``` - init submodules (qpOASES, CasADi): ``` git submodule update --init ``` - install the Python package: ```bash cd feasible_sqp pip install -e . ``` - build and install the dependencies: ```python import feasible_sqp feasible_sqp.install_dependencies(hsl_lib_path=<...>) ``` ## usage ```python from feasible_sqp import * hsl_lib_path = <...> # e.g., '/usr/local/lib/libcoinhsl.so' install_dependencies(hsl_lib_path=hsl_lib_path) # number of primal variables nv = 2 # create solver solver = feasible_sqp(nv) # get primal variables y = solver.y # define cost f = 1.0/2.0*ca.dot(y-10,y-10) # define constraints g = ca.vertcat(ca.sin(y[1]) - y[0]) # define bounds lby = -np.ones((nv,1)) uby = np.ones((nv,1)) # generate solver solver.generate_solver(f, f, g, lby = lby, uby = uby) # solve NLP solver.solve() ``` notice: a call to `solver.generate_solver()` generates a script called `set_LD_LIBRARY_PATH.sh` which can be sourced in order to update the `LD_LIBRARY_PATH` environment variable such that the shared libraries needed by the solver can be located.