overview of functions provided#

// namespaces

namespace conf;

// typedefs

typedef float spc_;
typedef double rpc_;
typedef int ipc_;

// structs

struct rpd_control_type;
struct rpd_inform_type;

// global functions

void rpd_initialize(void **data, struct rpd_control_type* control, ipc_ *status);

void rpd_get_stats(
    char qplib_file[],
    ipc_ qplib_file_len,
    struct rpd_control_type* control,
    void **data,
    ipc_ *status,
    char p_type[4],
    ipc_ *n,
    ipc_ *m,
    ipc_ *h_ne,
    ipc_ *a_ne,
    ipc_ *h_c_ne
);

void rpd_get_g(void **data, ipc_ *status, ipc_ n, rpc_ g[]);
void rpd_get_f(void **data, ipc_ *status, rpc_* f);

void rpd_get_xlu(
    void **data,
    ipc_ *status,
    ipc_ n,
    rpc_ x_l[],
    rpc_ x_u[]
);

void rpd_get_clu(
    void **data,
    ipc_ *status,
    ipc_ m,
    rpc_ c_l[],
    rpc_ c_u[]
);

void rpd_get_h(
    void **data,
    ipc_ *status,
    ipc_ h_ne,
    ipc_ h_row[],
    ipc_ h_col[],
    rpc_ h_val[]
);

void rpd_get_a(
    void **data,
    ipc_ *status,
    ipc_ a_ne,
    ipc_ a_row[],
    ipc_ a_col[],
    rpc_ a_val[]
);

void rpd_get_h_c(
    void **data,
    ipc_ *status,
    ipc_ h_c_ne,
    ipc_ h_c_ptr[],
    ipc_ h_c_row[],
    ipc_ h_c_col[],
    rpc_ h_c_val[]
);

void rpd_get_x_type(void **data, ipc_ *status, ipc_ n, ipc_ x_type[]);
void rpd_get_x(void **data, ipc_ *status, ipc_ n, rpc_ x[]);
void rpd_get_y(void **data, ipc_ *status, ipc_ m, rpc_ y[]);
void rpd_get_z(void **data, ipc_ *status, ipc_ n, rpc_ z[]);
void rpd_information(void **data, struct rpd_inform_type* inform, ipc_ *status);

void rpd_terminate(
    void **data,
    struct rpd_control_type* control,
    struct rpd_inform_type* inform
);

typedefs#

typedef float spc_

spc_ is real single precision

typedef double rpc_

rpc_ is the real working precision used, but may be changed to float by defining the preprocessor variable REAL_32 or (if supported) to __real128 using the variable REAL_128.

typedef int ipc_

ipc_ is the default integer word length used, but may be changed to int64_t by defining the preprocessor variable INTEGER_64.

function calls#

void rpd_initialize(void **data, struct rpd_control_type* control, ipc_ *status)

Set default control values and initialize private data

Parameters:

data

holds private internal data

control

is a struct containing control information (see rpd_control_type)

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are (currently):

  • 0

    The initialization was successful.

void rpd_get_stats(
    char qplib_file[],
    ipc_ qplib_file_len,
    struct rpd_control_type* control,
    void **data,
    ipc_ *status,
    char p_type[4],
    ipc_ *n,
    ipc_ *m,
    ipc_ *h_ne,
    ipc_ *a_ne,
    ipc_ *h_c_ne
)

Read the data from a specified QPLIB file into internal storage, and report the type of problem encoded, along with problem-specific dimensions.

Parameters:

qplib_file

is a one-dimensional array of type char that specifies the name of the QPLIB file that is to be read.

qplib_file_len

is a scalar variable of type ipc_, that gives the number of characters in the name encoded in qplib_file.

control

is a struct whose members provide control paramters for the remaining prcedures (see rpd_control_type)

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -1

    An allocation error occurred. A message indicating the offending array is written on unit control.error, and the returned allocation status and a string containing the name of the offending array are held in inform.alloc_status and inform.bad_alloc respectively.

  • -2

    A deallocation error occurred. A message indicating the offending array is written on unit control.error and the returned allocation status and a string containing the name of the offending array are held in inform.alloc_status and inform.bad_alloc respectively.

p_type

is a one-dimensional array of size 4 and type char that specifies the type of quadratic programming problem encoded in the QPLIB file.

The first character indicates the type of objective function used. It will be one of the following:

  • L a linear objective function.

  • D a convex quadratic objective function whose Hessian is a diagonal matrix.

  • C a convex quadratic objective function.

  • Q a quadratic objective function whose Hessian may be indefinite.

The second character indicates the types of variables that are present. It will be one of the following:

  • C all the variables are continuous.

  • B all the variables are binary (0-1).

  • M the variables are a mix of continuous and binary.

  • I all the variables are integer.

  • G the variables are a mix of continuous, binary and integer.

The third character indicates the type of the (most extreme) constraint function used; other constraints may be of a lesser type. It will be one of the following:

  • N there are no constraints.

  • B some of the variables lie between lower and upper bounds (box constraint).

  • L the constraint functions are linear.

  • D the constraint functions are convex quadratics with diagonal Hessians.

  • C the constraint functions are convex quadratics.

  • Q the constraint functions are quadratics whose Hessians may be indefinite.

Thus for continuous problems, we would have

  • LCL a linear program.

  • LCC or LCQ a linear program with quadratic constraints.

  • CCB or QCB a bound-constrained quadratic program.

  • CCL or QCL a quadratic program.

  • CCC or CCQ or QCC or QCQ a quadratic program with quadratic constraints.

For integer problems, the second character would be I rather than C, and for mixed integer problems, the second character would by M or G.

n

is a scalar variable of type ipc_, that holds the number of variables.

m

is a scalar variable of type ipc_, that holds the number of general constraints.

h_ne

is a scalar variable of type ipc_, that holds the number of entries in the lower triangular part of \(H\) stored in the sparse symmetric co-ordinate storage scheme.

a_ne

is a scalar variable of type ipc_, that holds the number of entries in \(A\) stored in the sparse co-ordinate storage scheme.

h_c_ne

is a scalar variable of type ipc_, that holds the number of entries in the lower triangular part of \(H_c\) stored in the joint sparse co-ordinate storage scheme.

void rpd_get_g(void **data, ipc_ *status, ipc_ n, rpc_ g[])

Recover the linear term \(g\) from in objective function

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

n

is a scalar variable of type ipc_, that holds the number of variables.

g

is a one-dimensional array of size n and type rpc_, that gives the linear term \(g\) of the objective function. The j-th component of g, j = 0, … , n-1, contains \(g_j\).

void rpd_get_f(void **data, ipc_ *status, rpc_* f)

Recover the constant term \(f\) in the objective function.

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

f

is a scalar of type rpc_, that gives the constant term \(f\) from the objective function.

void rpd_get_xlu(
    void **data,
    ipc_ *status,
    ipc_ n,
    rpc_ x_l[],
    rpc_ x_u[]
)

Recover the variable lower and upper bounds \(x_l\) and \(x_u\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

n

is a scalar variable of type ipc_, that holds the number of variables.

x_l

is a one-dimensional array of size n and type rpc_, that gives the lower bounds \(x_l\) on the variables \(x\). The j-th component of x_l, j = 0, … , n-1, contains \((x_l)_j\).

x_u

is a one-dimensional array of size n and type rpc_, that gives the upper bounds \(x_u\) on the variables \(x\). The j-th component of x_u, j = 0, … , n-1, contains \((x_u)_j\).

void rpd_get_clu(
    void **data,
    ipc_ *status,
    ipc_ m,
    rpc_ c_l[],
    rpc_ c_u[]
)

Recover the constraint lower and upper bounds \(c_l\) and \(c_u\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

m

is a scalar variable of type ipc_, that holds the number of general constraints.

c_l

is a one-dimensional array of size m and type rpc_, that gives the lower bounds \(c_l\) on the constraints \(A x\). The i-th component of c_l, i = 0, … , m-1, contains \((c_l)_i\).

c_u

is a one-dimensional array of size m and type rpc_, that gives the upper bounds \(c_u\) on the constraints \(A x\). The i-th component of c_u, i = 0, … , m-1, contains \((c_u)_i\).

void rpd_get_h(
    void **data,
    ipc_ *status,
    ipc_ h_ne,
    ipc_ h_row[],
    ipc_ h_col[],
    rpc_ h_val[]
)

Recover the Hessian term \(H\) in the objective function.

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

h_ne

is a scalar variable of type ipc_, that holds the number of entries in the lower triangular part of the Hessian matrix \(H\).

h_row

is a one-dimensional array of size h_ne and type ipc_, that gives the row indices of the lower triangular part of \(H\) in the sparse co-ordinate storage scheme.

h_col

is a one-dimensional array of size h_ne and type ipc_, that gives the column indices of the lower triangular part of \(H\) in the sparse co-ordinate storage scheme.

h_val

is a one-dimensional array of size h_ne and type rpc_, that holds the values of the entries of the lower triangular part of the Hessian matrix \(H\) in the sparse co-ordinate storage scheme.

void rpd_get_a(
    void **data,
    ipc_ *status,
    ipc_ a_ne,
    ipc_ a_row[],
    ipc_ a_col[],
    rpc_ a_val[]
)

Recover the Jacobian term \(A\) in the constraints.

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

a_ne

is a scalar variable of type ipc_, that holds the number of entries in the constraint Jacobian matrix \(A\).

a_row

is a one-dimensional array of size a_ne and type ipc_, that gives the row indices of \(A\) in the sparse co-ordinate storage scheme.

a_col

is a one-dimensional array of size a_ne and type ipc_, that gives the column indices of \(A\) in the sparse co-ordinate, storage scheme.

a_val

is a one-dimensional array of size a_ne and type rpc_, that gives the values of the entries of the constraint Jacobian matrix \(A\) in the sparse co-ordinate scheme.

void rpd_get_h_c(
    void **data,
    ipc_ *status,
    ipc_ h_c_ne,
    ipc_ h_c_ptr[],
    ipc_ h_c_row[],
    ipc_ h_c_col[],
    rpc_ h_c_val[]
)

Recover the Hessian terms \(H_c\) in the constraints.

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

h_c_ne

is a scalar variable of type ipc_, that holds the number of entries in the lower triangular part of the Hessian matrix \(H\).

h_c_ptr

is a one-dimensional array of size h_c_ne and type ipc_, that gives the constraint indices of the lower triangular part of \(H_c\) in the joint sparse co-ordinate storage scheme.

h_c_row

is a one-dimensional array of size h_c_ne and type ipc_, that gives the row indices of the lower triangular part of \(H_c\) in the joint sparse co-ordinate storage scheme.

h_c_col

is a one-dimensional array of size h_c_ne and type ipc_, that gives the column indices of the lower triangular part of \(H_c\) in the sparse co-ordinate storage scheme.

h_c_val

is a one-dimensional array of size h_c_ne and type rpc_, that holds the values of the entries of the lower triangular part of the Hessian matrix \(H_c\) in the sparse co-ordinate storage scheme.

void rpd_get_x_type(void **data, ipc_ *status, ipc_ n, ipc_ x_type[])

Recover the types of the variables \(x\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

n

is a scalar variable of type ipc_, that holds the number of variables.

x_type

is a one-dimensional array of size n and type ipc_, that specifies the type of each variable \(x\). Specifically, for j = 0, … , n-1, x(j) =

  • 0 variable \(x_j\) is continuous,

  • 1 variable \(x_j\) is integer, and

  • 2 variable \(x_j\) is binary (0,1)

void rpd_get_x(void **data, ipc_ *status, ipc_ n, rpc_ x[])

Recover the initial values of the variables \(x\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

n

is a scalar variable of type ipc_, that holds the number of variables.

x

is a one-dimensional array of size n and type rpc_, that gives the initial values \(x\) of the optimization variables. The j-th component of x, j = 0, … , n-1, contains \(x_j\).

void rpd_get_y(void **data, ipc_ *status, ipc_ m, rpc_ y[])

Recover the initial values of the Lagrange multipliers \(y\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

m

is a scalar variable of type ipc_, that holds the number of general constraints.

y

is a one-dimensional array of size n and type rpc_, that gives the initial values \(y\) of the Lagrange multipliers for the general constraints. The j-th component of y, j = 0, … , n-1, contains \(y_j\).

void rpd_get_z(void **data, ipc_ *status, ipc_ n, rpc_ z[])

Recover the initial values of the dual variables \(z\).

Parameters:

data

holds private internal data

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are:

  • 0

    The statistics have been recovered successfully.

  • -93

    The QPLIB file did not contain the required data.

n

is a scalar variable of type ipc_, that holds the number of variables.

z

is a one-dimensional array of size n and type rpc_, that gives the initial values \(z\) of the dual variables. The j-th component of z, j = 0, … , n-1, contains \(z_j\).

void rpd_information(void **data, struct rpd_inform_type* inform, ipc_ *status)

Provides output information

Parameters:

data

holds private internal data

inform

is a struct containing output information (see rpd_inform_type)

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are (currently):

  • 0

    The values were recorded successfully

void rpd_terminate(
    void **data,
    struct rpd_control_type* control,
    struct rpd_inform_type* inform
)

Deallocate all internal private storage

Parameters:

data

holds private internal data

control

is a struct containing control information (see rpd_control_type)

inform

is a struct containing output information (see rpd_inform_type)