QPC - Quadratic Programming in C

Usage

Using the quadratic programming routines (taken from README file):



!!! IMPORTANT !!!: ALL ROUTINES ASSUME THAT THE INPUT DATA IS IN DENSE FORMAT


qpas:

  This dual active-set algorithm attempts to solve
  quadratic programming problems in the following form:

   x* = arg min   0.5x'Hx + f'x
             x

            s.t.  Ax  = b,        linear equality constraints,
                  Lx <= k,        general linear inequality constraints,
                  l  <= x <= u,   bound constraints.

  In Matlab a call to this function would look like:

    [x,err,lm] = qpas(H,f,L,k,A,b,l,u,display);

  where the inputs are:

        H: An (n x n) positive semi-definite symmetric matrix

	     f: A n element column vector
	
    (L,k): General linear inequality constraints

    (A,b): General linear equality constraints

        l: Element-wise lower bound constraints

        u: Element-wise upper bound constraints

  display: If display>0 then iteration information is displayed


  and the outputs are:

              x: the optimal solution (if obtained)

            err: error number, if err=0, then x is optimal

             lm: structure of Lagrange multipliers 
 
    lm.equality: Lagrange multipliers for equality constraints

  lm.inequality: Lagrange multipliers for general inequality constraints

  lm.lowerbound: Lagrange multipliers for lower bound constraints

  lm.upperbound: Lagrange multipliers for upper bound constraints

  If (A,b) and/or (L,k) and/or l and/or u, are not being used, then
  set the respective entry to [] (i.e. the empty matrix).

  E.g.1 suppose that only L and k are being used then a call would look
  like

    x = qpas(H,f,L,k);

  E.g.2 suppose that (A,b) and l are required, then a call would look
  like

    x = qpas(H,f,[],[],A,b,l);


qpip:

  This primal-dual predictor-corrector algorithm attempts to solve
  quadratic programming problems in the following form:

   x* = arg min   0.5x'Hx + f'x
             x

            s.t.  Ax  = b,        linear equality constraints,
                  Lx <= k,        general linear inequality constraints,
                  l  <= x <= u,   bound constraints.

  In Matlab a call to this function would look like:

    [x,err,lm] = qpip(H,f,L,k,A,b,l,u,display,mu,method);

  where the inputs are:

        H: An (n x n) positive semi-definite symmetric matrix

	     f: A n element column vector
	
    (L,k): General linear inequality constraints

    (A,b): General linear equality constraints

        l: Element-wise lower bound constraints

        u: Element-wise upper bound constraints

  display: If display>0 then iteration information is displayed

       mu: Desired complementarity gap target (point on central-path)
           [Default is mu=0.0]

   method: If method=1 (default), then a faster but less accurate linear 
           solve step is used. Conversely, if method=0 then a slower but
           more accurate linear solve step is used.


  and the outputs are:

              x: the optimal solution (if obtained)

            err: error number, if err=0, then x is optimal

             lm: structure of Lagrange multipliers 
 
    lm.equality: Lagrange multipliers for equality constraints

  lm.inequality: Lagrange multipliers for general inequality constraints

  lm.lowerbound: Lagrange multipliers for lower bound constraints

  lm.upperbound: Lagrange multipliers for upper bound constraints

  If (A,b) and/or (L,k) and/or l and/or u, are not being used, then
  set the respective entry to [] (i.e. the empty matrix).

  E.g.1 suppose that only L and k are being used then a call would look
  like

    x = qpip(H,f,L,k);

  E.g.2 suppose that (A,b) and l are required, then a call would look
  like

    x = qpip(H,f,[],[],A,b,l);



qps_as:

  This dual active-set algorithm attempts to solve
  quadratic programming problems in the following form:

   x* = arg min   0.5x'Hx + f'x
             x

            s.t.  l  <= x <= u,   bound constraints.

  In Matlab a call to this function would look like:

    [x,err,lm] = qps_as(H,f,l,u,display);

  where the inputs are:

        H: An (n x n) positive semi-definite symmetric matrix

	     f: A n element column vector
	
        l: Element-wise lower bound constraints

        u: Element-wise upper bound constraints

  display: If display>0 then iteration information is displayed


  and the outputs are:

              x: the optimal solution (if obtained)

            err: error number, if err=0, then x is optimal

             lm: structure of Lagrange multipliers 
 
  lm.lowerbound: Lagrange multipliers for lower bound constraints

  lm.upperbound: Lagrange multipliers for upper bound constraints

 NOTE: Both l and u must be provided, however, +/-inf entries are
       acceptable so that "free" variables are catered for.


qps_ip:

  This primal-dual predictor-corrector algorithm attempts to solve
  quadratic programming problems in the following form:

   x* = arg min   0.5x'Hx + f'x
             x

            s.t.  l  <= x <= u,   bound constraints.

  In Matlab a call to this function would look like:

    [x,err,lm] = qps_ip(H,f,l,u,display);

  where the inputs are:

        H: An (n x n) positive semi-definite symmetric matrix

	     f: A n element column vector
	
        l: Element-wise lower bound constraints

        u: Element-wise upper bound constraints

  display: If display>0 then iteration information is displayed


  and the outputs are:

              x: the optimal solution (if obtained)

            err: error number, if err=0, then x is optimal

             lm: structure of Lagrange multipliers 
 
  lm.lowerbound: Lagrange multipliers for lower bound constraints

  lm.upperbound: Lagrange multipliers for upper bound constraints

 NOTE: Both l and u must be provided, however, +/-inf entries are
       acceptable so that "free" variables are catered for.


qps_mq:

  This branch-and-bound type algorithm attempts to solve
  quadratic programming problems in the following form:

   x* = arg min   0.5x'Hx + f'x
             x

            s.t.  l  <= x <= u,   bound constraints.

  In Matlab a call to this function would look like:

    [x,err,lm] = qps_mq(H,f,l,u);

  where the inputs are:

        H: An (n x n) positive semi-definite symmetric matrix

	     f: A n element column vector
	
        l: Element-wise lower bound constraints

        u: Element-wise upper bound constraints

  and the outputs are:

              x: the optimal solution (if obtained)

            err: error number, if err=0, then x is optimal

             lm: structure of Lagrange multipliers 
 
  lm.lowerbound: Lagrange multipliers for lower bound constraints

  lm.upperbound: Lagrange multipliers for upper bound constraints

 NOTE: Both l and u must be provided, however, +/-inf entries are
       acceptable so that "free" variables are catered for.


Maintained by Dr. Adrian Wills
University of Newcastle
29 May 2007, © Copyright