# cuOpt LP/QP/MILP C API Reference [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#cuopt-lp-qp-milp-c-api-reference "Link to this heading")

This section contains the cuOpt LP/QP/MILP C API reference.

## Integer and Floating-Point Types [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#integer-and-floating-point-types "Link to this heading")

cuOpt may be built with 32 or 64 bit integer and floating-point types. The C API uses a typedef for floating point and integer types to abstract the size of these types.

typedefint32\_tcuopt\_int\_t [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "Link to this definition")

The type of the integer number used by the solver. Use `cuOptGetIntSize` to get the size of the integer type.

typedeffloatcuopt\_float\_t [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "Link to this definition")

The type of the floating point number used by the solver. Use `cuOptGetFloatSize` to get the number of bytes in the floating point type.

You may use the following functions to determine the number of bytes used to represent these types in your build

int8\_tcuOptGetIntSize() [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetIntSize "Link to this definition")

Get the size of the integer type used by the library.

Returns:

The size of the integer type in bytes.

int8\_tcuOptGetFloatSize() [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetFloatSize "Link to this definition")

Get the size of the float type.

Returns:

The size in bytes of the float type.

## Version Information [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#version-information "Link to this heading")

You may use the following function to get the version of the cuOpt library

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetVersion(_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*version\_major_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*version\_minor_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*version\_patch_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetVersion "Link to this definition")

Get the version of the library.

Parameters:

- **version\_major** – **\[out\]** \- A pointer to a cuopt\_int\_t that will contain the major version number.

- **version\_minor** – **\[out\]** \- A pointer to a cuopt\_int\_t that will contain the minor version number.

- **version\_patch** – **\[out\]** \- A pointer to a cuopt\_int\_t that will contain the patch version number.


Returns:

A status code indicating success or failure.

## Status Codes [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#status-codes "Link to this heading")

Every function in the C API returns a status code that indicates success or failure. The following status codes are defined

CUOPT\_SUCCESS [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_SUCCESS "Link to this definition")

CUOPT\_INVALID\_ARGUMENT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_INVALID_ARGUMENT "Link to this definition")

CUOPT\_MPS\_FILE\_ERROR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MPS_FILE_ERROR "Link to this definition")

CUOPT\_MPS\_PARSE\_ERROR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MPS_PARSE_ERROR "Link to this definition")

CUOPT\_VALIDATION\_ERROR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_VALIDATION_ERROR "Link to this definition")

CUOPT\_OUT\_OF\_MEMORY [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_OUT_OF_MEMORY "Link to this definition")

CUOPT\_RUNTIME\_ERROR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_RUNTIME_ERROR "Link to this definition")

## Optimization Problem [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#optimization-problem "Link to this heading")

An optimization problem is represented via a cuOptOptimizationProblem

typedefvoid\*cuOptOptimizationProblem [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "Link to this definition")

A `cuOptOptimizationProblem` object contains a representation of an LP or MIP. It is created by `cuOptCreateProblem` or `cuOptCreateRangedProblem`. It is passed to `cuOptSolve`. It should be destroyed using `cuOptDestroyProblem`.

Optimization problems can be created via five different functions

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptReadProblem(_constchar\*filename_,_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptReadProblem "Link to this definition")

Read an optimization problem from an MPS file.

Parameters:

- **filename** – **\[in\]** \- The path to the MPS file.

- **problem\_ptr** – **\[out\]** \- A pointer to a cuOptOptimizationProblem. On output the problem will be created and initialized with the data from the MPS file


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptCreateProblem(_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_constraints_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_variables_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") objective\_sense_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t") objective\_offset_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_coefficients_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_matrix\_coefficent\_values_,_constchar\*constraint\_sense_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*rhs_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*upper\_bounds_,_constchar\*variable\_types_,_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateProblem "Link to this definition")

Create an optimization problem of the form.

```
*                minimize/maximize  c^T x + offset
*                  subject to       A x {=, <=, >=} b
*                                   l <= x <= u
*                                   x_i integer for some i
*
```

Copy to clipboard

Parameters:

- **num\_constraints** – **\[in\]** The number of constraints

- **num\_variables** – **\[in\]** The number of variables

- **objective\_sense** – **\[in\]** The objective sense (CUOPT\_MINIMIZE for minimization or CUOPT\_MAXIMIZE for maximization)

- **objective\_offset** – **\[in\]** An offset to add to the linear objective

- **objective\_coefficients** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the coefficients of the linear objective

- **constraint\_matrix\_row\_offsets** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size num\_constraints + 1. constraint\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th constraint in constraint\_matrix\_column\_indices and constraint\_matrix\_coefficent\_values. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_matrix\_column\_indices** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the column indices of the non-zero elements of the constraint matrix. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_matrix\_coefficent\_values** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the values of the non-zero elements of the constraint matrix. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_sense** – **\[in\]** A pointer to an array of type char of size num\_constraints containing the sense of the constraints (CUOPT\_LESS\_THAN, CUOPT\_GREATER\_THAN, or CUOPT\_EQUAL)

- **rhs** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the right-hand side of the constraints

- **lower\_bounds** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the lower bounds of the variables

- **upper\_bounds** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the upper bounds of the variables

- **variable\_types** – **\[in\]** A pointer to an array of type char of size num\_variables containing the types of the variables (CUOPT\_CONTINUOUS or CUOPT\_INTEGER)

- **problem\_ptr** – **\[out\]** Pointer to store the created optimization problem


Returns:

CUOPT\_SUCCESS if successful, CUOPT\_ERROR otherwise

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptCreateRangedProblem(_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_constraints_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_variables_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") objective\_sense_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t") objective\_offset_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_coefficients_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_matrix\_coefficients_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_upper\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*variable\_lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*variable\_upper\_bounds_,_constchar\*variable\_types_,_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateRangedProblem "Link to this definition")

Create an optimization problem of the form \*.

```
*                minimize/maximize  c^T x + offset
*                  subject to       bl <= A*x <= bu
*                                   l <= x <= u
*                                   x_i integer for some i
*
```

Copy to clipboard

Parameters:

- **num\_constraints** – **\[in\]** \- The number of constraints.

- **num\_variables** – **\[in\]** \- The number of variables.

- **objective\_sense** – **\[in\]** \- The objective sense (CUOPT\_MINIMIZE for minimization or CUOPT\_MAXIMIZE for maximization)

- **objective\_offset** – **\[in\]** \- An offset to add to the linear objective.

- **objective\_coefficients** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the coefficients of the linear objective.

- **constraint\_matrix\_row\_offsets** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size num\_constraints + 1. constraint\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th constraint in constraint\_matrix\_column\_indices and constraint\_matrix\_coefficients.

- **constraint\_matrix\_column\_indices** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the column indices of the non-zero elements of the constraint matrix.

- **constraint\_matrix\_coefficients** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the values of the non-zero elements of the constraint matrix.

- **constraint\_lower\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the lower bounds of the constraints.

- **constraint\_upper\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the upper bounds of the constraints.

- **variable\_lower\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the lower bounds of the variables.

- **variable\_upper\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the upper bounds of the variables.

- **variable\_types** – **\[in\]** \- A pointer to an array of type char of size num\_variables containing the types of the variables (CUOPT\_CONTINUOUS or CUOPT\_INTEGER).

- **problem\_ptr** – **\[out\]** \- A pointer to a cuOptOptimizationProblem. On output the problem will be created and initialized with the provided data.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptCreateQuadraticProblem(_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_constraints_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_variables_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") objective\_sense_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t") objective\_offset_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_coefficients_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*quadratic\_objective\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*quadratic\_objective\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*quadratic\_objective\_matrix\_coefficent\_values_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_matrix\_coefficent\_values_,_constchar\*constraint\_sense_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*rhs_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*upper\_bounds_,_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateQuadraticProblem "Link to this definition")

Create an optimization problem of the form.

```
*                minimize/maximize  c^T x + x^T Q x + offset
*                  subject to       A x {=, <=, >=} b
*                                   l ≤ x ≤ u
*
```

Copy to clipboard

Parameters:

- **num\_constraints** – **\[in\]** The number of constraints

- **num\_variables** – **\[in\]** The number of variables

- **objective\_sense** – **\[in\]** The objective sense (CUOPT\_MINIMIZE for minimization or CUOPT\_MAXIMIZE for maximization)

- **objective\_offset** – **\[in\]** An offset to add to the linear objective

- **objective\_coefficients** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the coefficients of the linear objective

- **quadratic\_objective\_matrix\_row\_offsets** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size num\_variables + 1. quadratic\_objective\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th row of the quadratic objective matrix in quadratic\_objective\_matrix\_column\_indices and quadratic\_objective\_matrix\_coefficent\_values. This is part of the compressed sparse row representation of the quadratic objective matrix.

- **quadratic\_objective\_matrix\_column\_indices** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size quadratic\_objective\_matrix\_row\_offsets\[num\_variables\] containing the column indices of the non-zero elements of the quadratic objective matrix. This is part of the compressed sparse row representation of the quadratic objective matrix.

- **quadratic\_objective\_matrix\_coefficent\_values** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size quadratic\_objective\_matrix\_row\_offsets\[num\_variables\] containing the values of the non-zero elements of the quadratic objective matrix.

- **constraint\_matrix\_row\_offsets** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size num\_constraints + 1. constraint\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th constraint in constraint\_matrix\_column\_indices and constraint\_matrix\_coefficent\_values. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_matrix\_column\_indices** – **\[in\]** A pointer to an array of type cuopt\_int\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the column indices of the non-zero elements of the constraint matrix. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_matrix\_coefficent\_values** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the values of the non-zero elements of the constraint matrix. This is part of the compressed sparse row representation of the constraint matrix

- **constraint\_sense** – **\[in\]** A pointer to an array of type char of size num\_constraints containing the sense of the constraints (CUOPT\_LESS\_THAN, CUOPT\_GREATER\_THAN, or CUOPT\_EQUAL)

- **rhs** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the right-hand side of the constraints

- **lower\_bounds** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the lower bounds of the variables

- **upper\_bounds** – **\[in\]** A pointer to an array of type cuopt\_float\_t of size num\_variables containing the upper bounds of the variables

- **problem\_ptr** – **\[out\]** Pointer to store the created optimization problem


Returns:

CUOPT\_SUCCESS if successful, CUOPT\_ERROR otherwise

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptCreateQuadraticRangedProblem(_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_constraints_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") num\_variables_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") objective\_sense_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t") objective\_offset_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_coefficients_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*quadratic\_objective\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*quadratic\_objective\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*quadratic\_objective\_matrix\_coefficent\_values_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_row\_offsets_,_const [cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_column\_indices_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_matrix\_coefficients_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_upper\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*variable\_lower\_bounds_,_const [cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*variable\_upper\_bounds_,_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateQuadraticRangedProblem "Link to this definition")

Create an optimization problem of the form \*.

```
*                minimize/maximize  c^T x + x^T Q x + offset
*                  subject to       bl <= A*x <= bu
*                                   l <= x <= u
*
```

Copy to clipboard

Parameters:

- **num\_constraints** – **\[in\]** \- The number of constraints.

- **num\_variables** – **\[in\]** \- The number of variables.

- **objective\_sense** – **\[in\]** \- The objective sense (CUOPT\_MINIMIZE for minimization or CUOPT\_MAXIMIZE for maximization)

- **objective\_offset** – **\[in\]** \- An offset to add to the linear objective.

- **objective\_coefficients** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the coefficients of the linear objective.

- **quadratic\_objective\_matrix\_row\_offsets** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size num\_variables + 1. quadratic\_objective\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th row of the quadratic objective matrix in quadratic\_objective\_matrix\_column\_indices and quadratic\_objective\_matrix\_coefficent\_values. This is part of the compressed sparse row representation of the quadratic objective matrix.

- **quadratic\_objective\_matrix\_column\_indices** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size quadratic\_objective\_matrix\_row\_offsets\[num\_variables\] containing the column indices of the non-zero elements of the quadratic objective matrix. This is part of the compressed sparse row representation of the quadratic objective matrix.

- **quadratic\_objective\_matrix\_coefficent\_values** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size quadratic\_objective\_matrix\_row\_offsets\[num\_variables\] containing the values of the non-zero elements of the quadratic objective matrix.

- **constraint\_matrix\_row\_offsets** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size num\_constraints + 1. constraint\_matrix\_row\_offsets\[i\] is the index of the first non-zero element of the i-th constraint in constraint\_matrix\_column\_indices and constraint\_matrix\_coefficients.

- **constraint\_matrix\_column\_indices** – **\[in\]** \- A pointer to an array of type cuopt\_int\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the column indices of the non-zero elements of the constraint matrix.

- **constraint\_matrix\_coefficients** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size constraint\_matrix\_row\_offsets\[num\_constraints\] containing the values of the non-zero elements of the constraint matrix.

- **constraint\_lower\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the lower bounds of the constraints.

- **constraint\_upper\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints containing the upper bounds of the constraints.

- **variable\_lower\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the lower bounds of the variables.

- **variable\_upper\_bounds** – **\[in\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables containing the upper bounds of the variables.

- **problem\_ptr** – **\[out\]** \- A pointer to a cuOptOptimizationProblem. On output the problem will be created and initialized with the provided data.


Returns:

A status code indicating success or failure.

A optimization problem must be destroyed with the following function

voidcuOptDestroyProblem( _[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem")\*problem\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptDestroyProblem "Link to this definition")

Destroy an optimization problem.

Parameters:

- **problem\_ptr** – **\[inout\]** \- A pointer to a cuOptOptimizationProblem. On output the problem will be destroyed, and the pointer will be set to NULL.


Certain constants are needed to define an optimization problem. These constants are described below.

## Objective Sense Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#objective-sense-constants "Link to this heading")

These constants are used to define the objective sense in the [`cuOptCreateProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateProblem "cuOptCreateProblem") and [`cuOptCreateRangedProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateRangedProblem "cuOptCreateRangedProblem") functions.

CUOPT\_MINIMIZE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MINIMIZE "Link to this definition")

CUOPT\_MAXIMIZE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MAXIMIZE "Link to this definition")

## Constraint Sense Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#constraint-sense-constants "Link to this heading")

These constants are used to define the constraint sense in the [`cuOptCreateProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateProblem "cuOptCreateProblem") and [`cuOptCreateRangedProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateRangedProblem "cuOptCreateRangedProblem") functions.

CUOPT\_LESS\_THAN [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_LESS_THAN "Link to this definition")

CUOPT\_GREATER\_THAN [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_GREATER_THAN "Link to this definition")

CUOPT\_EQUAL [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_EQUAL "Link to this definition")

## Variable Type Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#variable-type-constants "Link to this heading")

These constants are used to define the the variable type in the [`cuOptCreateProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateProblem "cuOptCreateProblem") and [`cuOptCreateRangedProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateRangedProblem "cuOptCreateRangedProblem") functions.

CUOPT\_CONTINUOUS [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_CONTINUOUS "Link to this definition")

CUOPT\_INTEGER [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_INTEGER "Link to this definition")

## Infinity Constant [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#infinity-constant "Link to this heading")

This constant may be used to represent infinity in the [`cuOptCreateProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateProblem "cuOptCreateProblem") and [`cuOptCreateRangedProblem()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateRangedProblem "cuOptCreateRangedProblem") functions.

CUOPT\_INFINITY [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_INFINITY "Link to this definition")

## Querying an optimization problem [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#querying-an-optimization-problem "Link to this heading")

The following functions may be used to get information about an cuOptimizationProblem

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetNumConstraints(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*num\_constraints\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetNumConstraints "Link to this definition")

Get the number of constraints of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **num\_constraints\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that will contain the number of constraints on output.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetNumVariables(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*num\_variables\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetNumVariables "Link to this definition")

Get the number of variables of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **num\_variables\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that will contain the number of variables on output.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetObjectiveSense(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*objective\_sense\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetObjectiveSense "Link to this definition")

Get the objective sense of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **objective\_sense\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that on output will contain the objective sense.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetObjectiveOffset(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_offset\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetObjectiveOffset "Link to this definition")

Get the objective offset of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **objective\_offset\_ptr** – **\[out\]** \- A pointer to a cuopt\_float\_t that on output will contain the objective offset.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetObjectiveCoefficients(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_coefficients\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetObjectiveCoefficients "Link to this definition")

Get the objective coefficients of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **objective\_coefficients\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables that on output will contain the objective coefficients.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetNumNonZeros(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*num\_non\_zeros\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetNumNonZeros "Link to this definition")

Get the number of non-zero elements in the constraint matrix of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **num\_non\_zeros\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that on output will contain the number of non-zeros in the constraint matrix.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetConstraintMatrix(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_row\_offsets\_ptr_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*constraint\_matrix\_column\_indices\_ptr_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*constraint\_matrix\_coefficients\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetConstraintMatrix "Link to this definition")

Get the constraint matrix of an optimization problem in compressed sparse row format.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **constraint\_matrix\_row\_offsets\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_int\_t of size num\_constraints + 1 that on output will contain the row offsets of the constraint matrix.

- **constraint\_matrix\_column\_indices\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_int\_t of size equal to the number of nonzeros that on output will contain the column indices of the non-zero entries of the constraint matrix.

- **constraint\_matrix\_coefficients\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size equal to the number of nonzeros that on output will contain the coefficients of the non-zero entries of the constraint matrix.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetConstraintSense(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_char\*constraint\_sense\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetConstraintSense "Link to this definition")

Get the constraint sense of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **constraint\_sense\_ptr** – **\[out\]** \- A pointer to an array of type char of size num\_constraints that on output will contain the sense of the constraints.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetConstraintRightHandSide(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*rhs\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetConstraintRightHandSide "Link to this definition")

Get the right-hand side of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **rhs\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints that on output will contain the right-hand side of the constraints.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetConstraintLowerBounds(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*lower\_bounds\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetConstraintLowerBounds "Link to this definition")

Get the lower bounds of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **lower\_bounds\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints that on output will contain the lower bounds of the constraints.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetConstraintUpperBounds(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*upper\_bounds\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetConstraintUpperBounds "Link to this definition")

Get the upper bounds of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **upper\_bounds\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints that on output will contain the upper bounds of the constraints.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetVariableLowerBounds(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*lower\_bounds\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetVariableLowerBounds "Link to this definition")

Get the lower bounds of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **lower\_bounds\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables that on output will contain the lower bounds of the variables.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetVariableUpperBounds(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*upper\_bounds\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetVariableUpperBounds "Link to this definition")

Get the upper bounds of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **upper\_bounds\_ptr** – **\[out\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables that on output will contain the upper bounds of the variables.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetVariableTypes(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_char\*variable\_types\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetVariableTypes "Link to this definition")

Get the variable types of an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **variable\_types\_ptr** – **\[out\]** \- A pointer to an array of type char of size num\_variables that on output will contain the types of the variables (CUOPT\_CONTINUOUS or CUOPT\_INTEGER).


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptIsMIP(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*is\_mip\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptIsMIP "Link to this definition")

Check if an optimization problem is a mixed integer programming problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **is\_mip\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that on output will be 0 if the problem contains only continuous variables, or 1 if the problem contains integer variables.


Returns:

A status code indicating success or failure.

## Solver Settings [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#solver-settings "Link to this heading")

Settings are used to configure the LP/MIP solvers. All settings are stored in a cuOptSolverSettings object.

typedefvoid\*cuOptSolverSettings [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "Link to this definition")

A `cuOptSolverSettings` object contains parameter settings and other information for an LP or MIP solve. It is created by `cuOptCreateSolverSettings`. It is passed to `cuOptSolve`. It should be destroyed using `cuOptDestroySolverSettings`.

A cuOptSolverSettings object is created with cuOptCreateSolverSettings

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptCreateSolverSettings(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings")\*settings\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptCreateSolverSettings "Link to this definition")

Create a solver settings object.

Parameters:

- **settings\_ptr** – **\[out\]** \- A pointer to a cuOptSolverSettings object. On output the solver settings will be created and initialized.


Returns:

A status code indicating success or failure.

When you are done with a solve you should destroy a cuOptSolverSettings object with

voidcuOptDestroySolverSettings( _[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings")\*settings\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptDestroySolverSettings "Link to this definition")

Destroy a solver settings object.

Parameters:

- **settings\_ptr** – **\[inout\]** \- A pointer to a cuOptSolverSettings object. On output the solver settings will be destroyed and the pointer will be set to NULL.


## Setting Parameters [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#setting-parameters "Link to this heading")

The following functions are used to set and get parameters. You can find more details on the available parameters in the [LP/MILP settings](https://docs.nvidia.com/cuopt/user-guide/latest/lp-qp-milp-settings.html) section.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptSetParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_constchar\*parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetParameter "Link to this definition")

Set a parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to set.

- **parameter\_value** – **\[in\]** \- The value of the parameter to set.


[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") parameter\_value\_size_,_char\*parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetParameter "Link to this definition")

Get a parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to get.

- **parameter\_value\_size** – **\[in\]** \- The size of the parameter value buffer.

- **parameter\_value** – **\[out\]** \- A pointer to an array of characters that on output will contain the value of the parameter.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptSetIntegerParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetIntegerParameter "Link to this definition")

Set an integer parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to set.

- **parameter\_value** – **\[in\]** \- The value of the parameter to set.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetIntegerParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetIntegerParameter "Link to this definition")

Get an integer parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to get.

- **parameter\_value** – **\[out\]** \- A pointer to a cuopt\_int\_t that on output will contain the value of the parameter.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptSetFloatParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t") parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetFloatParameter "Link to this definition")

Set a float parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to set.

- **parameter\_value** – **\[in\]** \- The value of the parameter to set.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetFloatParameter(_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_constchar\*parameter\_name_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*parameter\_value_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetFloatParameter "Link to this definition")

Get a float parameter of a solver settings object.

Parameters:

- **settings** – **\[in\]** \- The solver settings object.

- **parameter\_name** – **\[in\]** \- The name of the parameter to get.

- **parameter\_value** – **\[out\]** \- A pointer to a cuopt\_float\_t that on output will contain the value of the parameter.


Returns:

A status code indicating success or failure.

## Parameter Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#parameter-constants "Link to this heading")

These constants are used as parameter names in the [`cuOptSetParameter()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetParameter "cuOptSetParameter"), [`cuOptGetParameter()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetParameter "cuOptGetParameter"), and similar functions. For more details on the available parameters, see the [LP/MILP settings](https://docs.nvidia.com/cuopt/user-guide/latest/lp-qp-milp-settings.html) section.

CUOPT\_ABSOLUTE\_DUAL\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ABSOLUTE_DUAL_TOLERANCE "Link to this definition")

CUOPT\_RELATIVE\_DUAL\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_RELATIVE_DUAL_TOLERANCE "Link to this definition")

CUOPT\_ABSOLUTE\_PRIMAL\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ABSOLUTE_PRIMAL_TOLERANCE "Link to this definition")

CUOPT\_RELATIVE\_PRIMAL\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_RELATIVE_PRIMAL_TOLERANCE "Link to this definition")

CUOPT\_ABSOLUTE\_GAP\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ABSOLUTE_GAP_TOLERANCE "Link to this definition")

CUOPT\_RELATIVE\_GAP\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_RELATIVE_GAP_TOLERANCE "Link to this definition")

CUOPT\_INFEASIBILITY\_DETECTION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_INFEASIBILITY_DETECTION "Link to this definition")

CUOPT\_STRICT\_INFEASIBILITY [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_STRICT_INFEASIBILITY "Link to this definition")

CUOPT\_PRIMAL\_INFEASIBLE\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PRIMAL_INFEASIBLE_TOLERANCE "Link to this definition")

CUOPT\_DUAL\_INFEASIBLE\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_DUAL_INFEASIBLE_TOLERANCE "Link to this definition")

CUOPT\_ITERATION\_LIMIT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ITERATION_LIMIT "Link to this definition")

CUOPT\_TIME\_LIMIT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TIME_LIMIT "Link to this definition")

CUOPT\_PDLP\_SOLVER\_MODE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE "Link to this definition")

CUOPT\_METHOD [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_METHOD "Link to this definition")

CUOPT\_PER\_CONSTRAINT\_RESIDUAL [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PER_CONSTRAINT_RESIDUAL "Link to this definition")

CUOPT\_SAVE\_BEST\_PRIMAL\_SO\_FAR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_SAVE_BEST_PRIMAL_SO_FAR "Link to this definition")

CUOPT\_FIRST\_PRIMAL\_FEASIBLE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_FIRST_PRIMAL_FEASIBLE "Link to this definition")

CUOPT\_LOG\_FILE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_LOG_FILE "Link to this definition")

CUOPT\_MIP\_ABSOLUTE\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_ABSOLUTE_TOLERANCE "Link to this definition")

CUOPT\_MIP\_RELATIVE\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_RELATIVE_TOLERANCE "Link to this definition")

CUOPT\_MIP\_INTEGRALITY\_TOLERANCE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_INTEGRALITY_TOLERANCE "Link to this definition")

CUOPT\_MIP\_ABSOLUTE\_GAP [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_ABSOLUTE_GAP "Link to this definition")

CUOPT\_MIP\_RELATIVE\_GAP [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_RELATIVE_GAP "Link to this definition")

CUOPT\_MIP\_SCALING [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_SCALING "Link to this definition")

CUOPT\_MIP\_HEURISTICS\_ONLY [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_HEURISTICS_ONLY "Link to this definition")

CUOPT\_MIP\_PRESOLVE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_MIP_PRESOLVE "Link to this definition")

CUOPT\_PRESOLVE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PRESOLVE "Link to this definition")

CUOPT\_LOG\_TO\_CONSOLE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_LOG_TO_CONSOLE "Link to this definition")

CUOPT\_CROSSOVER [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_CROSSOVER "Link to this definition")

CUOPT\_FOLDING [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_FOLDING "Link to this definition")

CUOPT\_AUGMENTED [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_AUGMENTED "Link to this definition")

CUOPT\_DUALIZE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_DUALIZE "Link to this definition")

CUOPT\_ORDERING [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ORDERING "Link to this definition")

CUOPT\_ELIMINATE\_DENSE\_COLUMNS [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_ELIMINATE_DENSE_COLUMNS "Link to this definition")

CUOPT\_CUDSS\_DETERMINISTIC [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_CUDSS_DETERMINISTIC "Link to this definition")

CUOPT\_BARRIER\_DUAL\_INITIAL\_POINT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_BARRIER_DUAL_INITIAL_POINT "Link to this definition")

CUOPT\_DUAL\_POSTSOLVE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_DUAL_POSTSOLVE "Link to this definition")

CUOPT\_SOLUTION\_FILE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_SOLUTION_FILE "Link to this definition")

CUOPT\_NUM\_CPU\_THREADS [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_NUM_CPU_THREADS "Link to this definition")

CUOPT\_USER\_PROBLEM\_FILE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_USER_PROBLEM_FILE "Link to this definition")

CUOPT\_PDLP\_PRECISION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_PRECISION "Link to this definition")

## PDLP Solver Mode Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#pdlp-solver-mode-constants "Link to this heading")

These constants are used to configure CUOPT\_PDLP\_SOLVER\_MODE via [`cuOptSetIntegerParameter()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetIntegerParameter "cuOptSetIntegerParameter").

CUOPT\_PDLP\_SOLVER\_MODE\_STABLE1 [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE_STABLE1 "Link to this definition")

CUOPT\_PDLP\_SOLVER\_MODE\_STABLE2 [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE_STABLE2 "Link to this definition")

CUOPT\_PDLP\_SOLVER\_MODE\_STABLE3 [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE_STABLE3 "Link to this definition")

CUOPT\_PDLP\_SOLVER\_MODE\_METHODICAL1 [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE_METHODICAL1 "Link to this definition")

CUOPT\_PDLP\_SOLVER\_MODE\_FAST1 [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SOLVER_MODE_FAST1 "Link to this definition")

## PDLP Precision Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#pdlp-precision-constants "Link to this heading")

These constants are used to configure CUOPT\_PDLP\_PRECISION via [`cuOptSetIntegerParameter()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetIntegerParameter "cuOptSetIntegerParameter").

CUOPT\_PDLP\_DEFAULT\_PRECISION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_DEFAULT_PRECISION "Link to this definition")

CUOPT\_PDLP\_SINGLE\_PRECISION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_SINGLE_PRECISION "Link to this definition")

CUOPT\_PDLP\_DOUBLE\_PRECISION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_DOUBLE_PRECISION "Link to this definition")

CUOPT\_PDLP\_MIXED\_PRECISION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_PDLP_MIXED_PRECISION "Link to this definition")

## Method Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#method-constants "Link to this heading")

These constants are used to configure CUOPT\_METHOD via [`cuOptSetIntegerParameter()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSetIntegerParameter "cuOptSetIntegerParameter").

CUOPT\_METHOD\_CONCURRENT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_METHOD_CONCURRENT "Link to this definition")

CUOPT\_METHOD\_PDLP [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_METHOD_PDLP "Link to this definition")

CUOPT\_METHOD\_DUAL\_SIMPLEX [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_METHOD_DUAL_SIMPLEX "Link to this definition")

CUOPT\_METHOD\_BARRIER [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_METHOD_BARRIER "Link to this definition")

## Solving an LP or MIP [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#solving-an-lp-or-mip "Link to this heading")

LP and MIP solves are performed by calling the cuOptSolve function

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptSolve(_[cuOptOptimizationProblem](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptOptimizationProblem "cuOptOptimizationProblem") problem_,_[cuOptSolverSettings](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolverSettings "cuOptSolverSettings") settings_,_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution")\*solution\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolve "Link to this definition")

Solve an optimization problem.

Parameters:

- **problem** – **\[in\]** \- The optimization problem.

- **settings** – **\[in\]** \- The solver settings.

- **solution\_ptr** – **\[out\]** \- A pointer to a cuOptSolution object. On output the solution will be created.


Returns:

A status code indicating success or failure.

## Solution [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#solution "Link to this heading")

The output of a solve is a cuOptSolution object.

typedefvoid\*cuOptSolution [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "Link to this definition")

A `cuOptSolution` object contains the solution to an LP or MIP. It is created by `cuOptSolve`. It should be destroyed using `cuOptDestroySolution`.

The following functions may be used to access information from a cuOptSolution

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetTerminationStatus(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*termination\_status\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetTerminationStatus "Link to this definition")

Get the termination reason of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **termination\_reason\_ptr** – **\[out\]** \- A pointer to a cuopt\_int\_t that on output will contain the termination reason.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetErrorStatus(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t")\*error\_status\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetErrorStatus "Link to this definition")

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetErrorString(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_char\*error\_string\_ptr_,_[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") error\_string\_size_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetErrorString "Link to this definition")

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetPrimalSolution(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*solution\_values_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetPrimalSolution "Link to this definition")

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetObjectiveValue(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*objective\_value\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetObjectiveValue "Link to this definition")

Get the objective value of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **objective\_value\_ptr** – **\[inout\]** \- A pointer to a cuopt\_float\_t that will contain the objective value.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetSolveTime(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*solve\_time\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetSolveTime "Link to this definition")

Get the solve time of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **solve\_time\_ptr** – **\[inout\]** \- A pointer to a cuopt\_float\_t that will contain the solve time.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetMIPGap(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*mip\_gap\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetMIPGap "Link to this definition")

Get the relative MIP gap of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **mip\_gap\_ptr** – **\[inout\]** \- A pointer to a cuopt\_float\_t that will contain the relative MIP gap.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetSolutionBound(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*solution\_bound\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetSolutionBound "Link to this definition")

Get the solution bound of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **solution\_bound\_ptr** – **\[inout\]** \- A pointer to a cuopt\_float\_t that will contain the solution bound.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetDualSolution(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*dual\_solution\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetDualSolution "Link to this definition")

Get the dual solution of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **dual\_solution\_ptr** – **\[inout\]** \- A pointer to an array of type cuopt\_float\_t of size num\_constraints that will contain the dual solution.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetDualObjectiveValue(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*dual\_objective\_value\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetDualObjectiveValue "Link to this definition")

Get the dual objective value of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **dual\_objective\_value\_ptr** – **\[inout\]** \- A pointer to a cuopt\_float\_t that will contain the dual objective value.


Returns:

A status code indicating success or failure.

[cuopt\_int\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_int_t "cuopt_int_t") cuOptGetReducedCosts(_[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution") solution_,_[cuopt\_float\_t](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuopt_float_t "cuopt_float_t")\*reduced\_cost\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetReducedCosts "Link to this definition")

Get the reduced costs of an optimization problem.

Parameters:

- **solution** – **\[in\]** \- The solution object.

- **reduced\_cost\_ptr** – **\[inout\]** \- A pointer to an array of type cuopt\_float\_t of size num\_variables that will contain the reduced cost.


Returns:

A status code indicating success or failure.

When you are finished with a cuOptSolution object you should destory it with

voidcuOptDestroySolution( _[cuOptSolution](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptSolution "cuOptSolution")\*solution\_ptr_) [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptDestroySolution "Link to this definition")

Destroy a solution object.

Parameters:

- **solution\_ptr** – **\[inout\]** \- A pointer to a cuOptSolution object. On output the solution will be destroyed and the pointer will be set to NULL.


## Termination Status Constants [\#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html\#termination-status-constants "Link to this heading")

These constants define the termination status received from the [`cuOptGetTerminationStatus()`](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.cuOptGetTerminationStatus "cuOptGetTerminationStatus") function.

CUOPT\_TERMINATION\_STATUS\_NO\_TERMINATION [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_NO_TERMINATION "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_OPTIMAL [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_OPTIMAL "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_INFEASIBLE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_INFEASIBLE "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_UNBOUNDED [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_UNBOUNDED "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_ITERATION\_LIMIT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_ITERATION_LIMIT "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_TIME\_LIMIT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_TIME_LIMIT "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_NUMERICAL\_ERROR [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_NUMERICAL_ERROR "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_PRIMAL\_FEASIBLE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_PRIMAL_FEASIBLE "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_FEASIBLE\_FOUND [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_FEASIBLE_FOUND "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_CONCURRENT\_LIMIT [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_CONCURRENT_LIMIT "Link to this definition")

CUOPT\_TERMINATION\_STATUS\_UNBOUNDED\_OR\_INFEASIBLE [#](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.html#c.CUOPT_TERMINATION_STATUS_UNBOUNDED_OR_INFEASIBLE "Link to this definition")