Setting up the problem
In Julia we define the problem as
# Define the problem
H = [1.0 0; 0 1];
f = [1.0 ;1];
A = [1.0 2; 1 -1];
bupper = [1.0 ; 2; 3; 4];
blower = [-1.0; -2; -3; -4];
sense = zeros(Cint,4);
sense determines the type of the constraints (more details are given here).
Note: When \(b_u\) and \(b_l\) has more elements than the number of rows in \(A\), the first elements in \(b_u\) and \(b_l\) are interpreted as simple bounds.
Calling DAQP
There are two ways of calling DAQP in Julia. The first way is through a quadprog call:
x,fval,exitflag,info = DAQP.quadprog(H,f,A,bupper,blower,sense);
This will solve the problem with default settings. A more flexible interface is also offered, where we first setup the problem and then solve it
d = DAQP.Model();
DAQP.setup(d,H,f,A,bupper,blower,sense);
x,fval,exitflag,info = DAQP.solve(d);
Using DAQP.Model is the recommended approach for embedded or real-time applications because it allocates memory only once during setup and reuses it across all subsequent solve calls — no heap allocations occur during solving.
If the problem data changes between solves (e.g., updated cost vector or bounds in an MPC loop), use update to push the new data into the existing workspace without re-running the full setup:
# Update bounds and cost vector, then re-solve
DAQP.update(d, nothing, f_new, nothing, bupper_new, blower_new, nothing)
x, fval, exitflag, info = DAQP.solve(d)
Changing settings
If we, for example, want to change the maximum number of iterations to 2000 we can do so by
DAQP.settings(d, Dict(:iter_limit =>2000))
A full list of available settings is provided here
Using DAQP in JuMP
DAQP can also be interfaced to JuMP. The following code sets up and solves the problem considered above
using DAQP
using JuMP
## Setup problem
model = Model(DAQP.Optimizer)
@variable(model, -1<= x1 <=1)
@variable(model, -2<= x2 <=2)
@objective(model, Min, 0.5*(x1^2+x2^2)+x1+x2)
@constraint(model, c1, -3 <= x1 + 2*x2 <= 3)
@constraint(model, c2, -4 <= x1 - x2 <= 4)
## Solve problem
optimize!(model)