C API Reference

The Cardinal Optimizer provides a C API library for advanced usage. This section documents all the COPT constants, API functions, parameters and attributes listed in copt.h.

Constants

There are three types of constants.

  1. Constructing models, such as optimization directions, constraint senses or variable types.

  2. Accessing solution results, such as API return code, basis status and LP status.

  3. Monitoring optimization progress, such as callback context.

Optimization directions

For different optimization scenarios, it may be required to either maximize or minimize the objective function. There are two optimization directions:

  • COPT_MINIMIZE

    For minimizing the objective function.

  • COPT_MAXIMIZE

    For maximizing the objective function.

The optimization direction is automatically set when reading in a problem from file. It can also be set explicitly using COPT_SetObjSense.

Infinity

In COPT, the infinite bound is represented by a large value, which can be set using the double parameter COPT_DBLPARAM_INFBOUND, whose default value is also available as a constant:

  • COPT_INFINITY

    The default value (1e30) of the infinite bound.

Undefined Value

In COPT, the undefined value is represented by another large value. For example, the default solution value of MIP start is set to a constant:

  • COPT_UNDEFINED

    Undefined value(1e40`).

Constraint senses

NOTE: Using constraint senses is supported by COPT but not recommended. We recommend defining constraints using explicit lower and upper bounds.

Traditionally, for optimization models, constraints are defined using senses. The most common constraint senses are:

  • COPT_LESS_EQUAL

    For constraint in the form of \(g(x) \leq b\)

  • COPT_GREATER_EQUAL

    For constraint in the form of \(g(x) \geq b\)

  • COPT_EQUAL

    For constraint in the form of \(g(x) = b\)

In additional, there are two less used constraint senses:

  • COPT_FREE

    For unconstrained expression

  • COPT_RANGE

    For constraints with both lower and upper bounds in the form of \(l \leq g(x) \leq u\).

    Please refer to documentation of COPT_LoadProb regarding how to use COPT_RANGE to define a constraints with both lower and upper bounds.

Variable types

Variable types are used for defining whether a variable is continuous or integral.

  • COPT_CONTINUOUS

    Non-integer continuous variables

  • COPT_BINARY

    Binary variables

  • COPT_INTEGER

    Integer variables

SOS-constraint types

SOS constraint (Special Ordered Set) is a kind of special constraint that places restrictions on the values that a set of variables can take.

COPT currently support two types of SOS constraints, one is SOS1 constraint, where at most one variable in the constraint is allowed to take a non-zero value, the other is SOS2 constraint, where at most two variables in the constraint are allowed to take non-zero value, and those non-zero variables must be contiguous. Variables in SOS constraints are allowed to be continuous, binary and integer.

  • COPT_SOS_TYPE1

    SOS1 constraint

  • COPT_SOS_TYPE2

    SOS2 constraint

Indicator constraint

Indicator constraint is a kind of logical constraints in COPT, used to describe the relationship between the value of the binary variable \(y\) and whether the linear constraint \(a^{T}x \leq b\) is satisfied. Currently, COPT supports three types of indicator constraints:

  • COPT_INDICATOR_IF

    If-Then:

    If \(y=f\) , then the linear constraint \(a^{T}x \leq b\) is satisfied.

    If \(y\ne f\) , then the linear constraint \(a^{T}x \leq b\) is invalid (may be violated).

(45)\[\begin{split}y &= f \rightarrow a^{T}x \leq b\\ f &\in \{0, 1\}\end{split}\]
  • COPT_INDICATOR_ONLYIF

    Only-If:

    If the linear constraint \(a^{T}x \leq b\) is satisfied, then \(y=f\) .

    If the linear constraint \(a^{T}x \leq b\) is not satisfied, then \(y\) can be 0 or 1.

(46)\[\begin{split}a^{T}x &\leq b \rightarrow y = f\\ f &\in \{0, 1\}\end{split}\]
  • COPT_INDICATOR_IFANDONLYIF

    If-and-Only-If:

    The linear constraint \(a^{T}x \leq b\) and \(y=f\) must be satisfied simultaneously or not satisfied simultaneously.

(47)\[\begin{split}a^{T}x &\leq b \leftrightarrow y = f\\ f &\in \{0, 1\}\end{split}\]

SOC constraint type

The Second-Order-Cone (SOC) constraint is a special type of quadratic constraints. COPT supports two types of SOC constraints:

  • COPT_CONE_QUAD : Regular Second-Order-Cone

(48)\[Q^n= \left\{x\in \mathbb{R}^n\ \left|\ x_0\geq\sqrt{\sum_{i=1}^{n-1} x_i^2}, x_0\geq0 \right. \right\}\]
  • COPT_CONE_RQUAD : Rotated Second-Order-Cone

(49)\[Q^n_r= \left\{x\in \mathbb{R}^n\ \left|\ 2x_0x_1\geq\sum_{i=2}^{n-1} x_i^2, x_0\geq0, x_1\geq 0 \right. \right\}\]

Exponential cone constraint type

COPT supports two types of exponential cone contraints:

  • COPT_EXPCONE_PRIMAL : Primal exponential cone

(50)\[\mathrm{cl}(S_1) = S_1 \cup S_2\]
(51)\[\begin{split}\begin{aligned} S_1 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ s > 0,\ t \geq s\ \mathrm{exp}\left(\frac{r}{s} \right) \right\}, \\ S_2 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ s=0,\ t\geq 0,\ r\leq 0 \right\} \end{aligned}\end{split}\]
  • COPT_EXPCONE_DUAL : Dual exponential cone

(52)\[\mathrm{cl}(S_1) = S_1 \cup S_2\]
(53)\[\begin{split}\begin{aligned} S_1 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ r < 0,\ t \geq -r\ \mathrm{exp}\left(\frac{s}{r}-1\right) \right\}, \\ S_2 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ r = 0,\ t\geq 0,\ s\geq 0 \right\} \end{aligned}\end{split}\]

Quadratic objective function

Besides linear objective function, COPT also supports general convex quadratic objective function.

The mathematical form is:

(54)\[x^{T}Qx + c^{T}x\]

Where, \(x\) is an array of variables, \(Q\) is the quadratic part of the quadratic objective funtion and \(c\) is the linear part.

Quadratic constraint

Besides the special type of quadratic constraint, Second-Order-Cone (SOC) constraint, COPT also supports general convex quadratic constraint.

The mathematical form is:

(55)\[x^{T}Qx + q^{T}x \leq b\]

Where, \(x\) is an array of variables, \(Q\) is the quadratic part of the quadratic constraint and \(c\) is the linear part.

Basis status

For an LP problem with \(n\) variables and \(m\) constraints, the constraints are treated as slack variables internally, resulting in \(n+m\) variables. When solving an LP problem using the simplex method, the simplex method fixes \(n\) variables at one of their bounds, and then computes solutions for the other \(m\) variables. The \(m\) variables with computed solution are called basic variables, and the other \(n\) variables are called non-basic variables. The simplex progress and its final solution can be defined using the basis status of all the variables and constraints.

The basis status supported by COPT are:

  • COPT_BASIS_LOWER

    The variable is non-basic at its lower bound.

  • COPT_BASIS_BASIC

    The variable is basic.

  • COPT_BASIS_UPPER

    The variable is non-basic at its upper bound.

  • COPT_BASIS_SUPERBASIC

    The variable is non-basic but not any of its bounds.

  • COPT_BASIS_FIXED

    The variable is non-basic and fixed at its bound.

LP solution status

The solution status of an LP problem is called LP status, which can be obtained using integer attribute COPT_INTATTR_LPSTATUS.

Possible LP status values are:

  • COPT_LPSTATUS_UNSTARTED

    The LP optimization is not started yet.

  • COPT_LPSTATUS_OPTIMAL

    The LP problem is solved to optimality.

  • COPT_LPSTATUS_INFEASIBLE

    The LP problem is infeasible.

  • COPT_LPSTATUS_UNBOUNDED

    The LP problem is unbounded.

  • COPT_LPSTATUS_NUMERICAL

    Numerical trouble encountered.

  • COPT_LPSTATUS_TIMEOUT

    The LP optimization is stopped because of time limit.

  • COPT_LPSTATUS_UNFINISHED

    The LP optimization is stopped but the solver cannot provide a solution because of numerical difficulties.

  • COPT_LPSTATUS_IMPRECISE

    The solution is imprecise.

  • COPT_LPSTATUS_INTERRUPTED

    The LP optimization is stopped by user interrupt.

MIP solution status

The solution status of an MIP problem is called MIP status, which can be obtained using integer attribute COPT_INTATTR_MIPSTATUS.

Possible MIP status values are:

  • COPT_MIPSTATUS_UNSTARTED

    The MIP optimization is not started yet.

  • COPT_MIPSTATUS_OPTIMAL

    The MIP problem is solved to optimality.

  • COPT_MIPSTATUS_INFEASIBLE

    The MIP problem is infeasible.

  • COPT_MIPSTATUS_UNBOUNDED

    The MIP problem is unbounded.

  • COPT_MIPSTATUS_INF_OR_UNB

    The MIP problem is infeasible or unbounded.

  • COPT_MIPSTATUS_NODELIMIT

    The MIP optimization is stopped because of node limit.

  • COPT_MIPSTATUS_TIMEOUT

    The MIP optimization is stopped because of time limit.

  • COPT_MIPSTATUS_UNFINISHED

    The MIP optimization is stopped but the solver cannot provide a solution because of numerical difficulties.

  • COPT_MIPSTATUS_INTERRUPTED

    The MIP optimization is stopped by user interrupt.

Callback context

  • CBCONTEXT_INCUMBENT

    Invokes the callback after a new incumbent was found.

  • COPT_CBCONTEXT_MIPNODE

    Invokes the callback after a MIP node was processed.

  • COPT_CBCONTEXT_MIPRELAX

    Invokes the callback when an LP-relaxation was solved.

  • COPT_CBCONTEXT_MIPSOL

    Invokes the callback when a new MIP candidate solution is found.

API function return code

When an API function finishes, it returns an integer return code, which indicates whether the API call was finished okay or failed. In case of failure, it specifies the reason of the failure.

Possible COPT API function return codes are:

  • COPT_RETCODE_OK

    The API call finished successfully.

  • COPT_RETCODE_MEMORY

    The API call failed because of memory allocation failure.

  • COPT_RETCODE_FILE

    The API call failed because of file input or output failure.

  • COPT_RETCODE_INVALID

    The API call failed because of invalid data.

  • COPT_RETCODE_LICENSE

    The API call failed because of license validation failure. In this case, further information can be obtained by calling COPT_GetLicenseMsg.

  • COPT_RETCODE_INTERNAL

    The API call failed because of internal error.

  • COPT_RETCODE_THREAD

    The API call failed because of thread error.

  • COPT_RETCODE_SERVER

    The API call failed because of remote server error.

  • COPT_RETCODE_NONCONVEX

    The API call failed because of problem is nonconvex.

Client configuration

For floating and cluster clients, users are allowed to set client configuration parameters, currently available settings are:

  • COPT_CLIENT_CLUSTER

    IP address of cluster server.

  • COPT_CLIENT_FLOATING

    IP address of token server.

  • COPT_CLIENT_PASSWORD

    Password of cluster server.

  • COPT_CLIENT_PORT

    Connection port of token server.

  • COPT_CLIENT_WAITTIME

    Wait time of client.

Other constants

  • COPT_BUFFSIZE

    Defines the recommended buffer size when obtaining a C-style string message from COPT library. This can be used with, for example, COPT_GetBanner, COPT_GetRetcodeMsg etc.

Attributes

Problem information

  • COPT_INTATTR_COLS or "Cols"

    Integer attribute.

    Number of variables (columns) in the problem.

  • COPT_INTATTR_PSDCOLS or "PSDCols"

    Integer attribute.

    Number of PSD variables in the problem.

  • COPT_INTATTR_ROWS or "Rows"

    Integer attribute.

    Number of constraints (rows) in the problem.

  • COPT_INTATTR_ELEMS or "Elems"

    Integer attribute.

    Number of non-zero elements in the coefficient matrix.

  • COPT_INTATTR_QELEMS or "QElems"

    Integer attribute.

    Number of non-zero quadratic elements in the quadratic objective function.

  • COPT_INTATTR_PSDELEMS or "PSDElems"

    Integer attribute.

    Number of PSD terms in objective function.

  • COPT_INTATTR_SYMMATS or "SymMats"

    Integer attribute.

    Number of symmetric matrices in the problem.

  • COPT_INTATTR_BINS or "Bins"

    Integer attribute.

    Number of binary variables.

  • COPT_INTATTR_INTS or "Ints"

    Integer attribute.

    Number of integer variables.

  • COPT_INTATTR_SOSS or "Soss"

    Integer attribute.

    Number of SOS constraints.

  • COPT_INTATTR_CONES or "Cones"

    Integer attribute.

    Number of Second-Order-Cone constraints.

  • COPT_INTATTR_EXPCONES or "ExpCones"

    Integer attribute.

    Number of exponential cone constraints.

  • COPT_INTATTR_QCONSTRS or "QConstrs"

    Integer attribute.

    Number of quadratic constraints.

  • COPT_INTATTR_PSDCONSTRS or "PSDConstrs"

    Integer attribute.

    Number of PSD constraints.

  • COPT_INTATTR_LMICONSTRS or "LMIConstrs"

    Integer attribute.

    Number of LMI constraints.

  • COPT_INTATTR_INDICATORS or "Indicators"

    Integer attribute.

    Number of indicator constraints.

  • COPT_INTATTR_OBJSENSE or "ObjSense"

    Integer attribute.

    The optimization direction.

  • COPT_DBLATTR_OBJCONST or "ObjConst"

    Double attribute.

    The constant part of the objective function.

  • COPT_INTATTR_HASQOBJ or "HasQObj"

    Integer attribute.

    Whether the problem has quadratic objective function.

  • COPT_INTATTR_HASPSDOBJ or "HasPSDObj"

    Integer attribute.

    Whether the problem has PSD terms in objective function.

  • COPT_INTATTR_ISMIP or "IsMIP"

    Integer attribute.

    Whether the problem is a MIP.

Solution information

  • COPT_INTATTR_LPSTATUS or "LpStatus"

    Integer attribute.

    The LP status. Please refer to Constants: LP solution status for possible values.

  • COPT_INTATTR_MIPSTATUS or "MipStatus"

    Integer attribute.

    The MIP status. Please refer to Constants: MIP solution status for possible values.

  • COPT_INTATTR_SIMPLEXITER or "SimplexIter"

    Integer attribute.

    Number of simplex iterations performed.

  • COPT_INTATTR_BARRIERITER or "BarrierIter"

    Integer attribute.

    Number of barrier iterations performed.

  • COPT_INTATTR_NODECNT or "NodeCnt"

    Integer attribute.

    Number of explored nodes.

  • COPT_INTATTR_POOLSOLS or "PoolSols"

    Integer attribute.

    Number of solutions in solution pool.

  • COPT_INTATTR_TUNERESULTS or "TuneResults"

    Integer attribute.

    Number of parameter tuning results

  • COPT_INTATTR_HASLPSOL or "HasLpSol"

    Integer attribute.

    Whether LP solution is available.

  • COPT_INTATTR_HASBASIS or "HasBasis"

    Integer attribute.

    Whether LP basis is available.

  • COPT_INTATTR_HASDUALFARKAS or "HasDualFarkas"

    Integer attribute.

    Whether the dual Farkas of an infeasible LP problem is available.

  • COPT_INTATTR_HASPRIMALRAY or "HasPrimalRay"

    Integer attribute.

    Whether the primal ray of an unbounded LP problem is available.

  • COPT_INTATTR_HASMIPSOL or "HasMipSol"

    Integer attribute.

    Whether MIP solution is available.

  • COPT_INTATTR_IISCOLS or "IISCols"

    Integer attribute.

    Number of bounds of columns in IIS.

  • COPT_INTATTR_IISROWS or "IISRows"

    Integer attribute.

    Number of rows in IIS.

  • COPT_INTATTR_IISSOSS or "IISSOSs"

    Integer attribute.

    Number of SOS constraints in IIS.

  • COPT_INTATTR_IISINDICATORS or "IISIndicators"

    Integer attribute.

    Number of indicator constraints in IIS.

  • COPT_INTATTR_HASIIS or "HasIIS"

    Integer attribute.

    Whether IIS is available.

  • COPT_INTATTR_HASFEASRELAXSOL or "HasFeasRelaxSol"

    Integer attribute.

    Whether feasibility LP-relaxation solution is available.

  • COPT_INTATTR_ISMINIIS or "IsMinIIS"

    Integer attribute.

    Whether the computed IIS is minimal.

  • COPT_DBLATTR_LPOBJVAL or "LpObjval"

    Double attribute.

    The LP objective value.

  • COPT_DBLATTR_BESTOBJ or "BestObj"

    Double attribute.

    Best integer objective value for MIP.

  • COPT_DBLATTR_BESTBND or "BestBnd"

    Double attribute.

    Best bound for MIP.

  • COPT_DBLATTR_BESTGAP or "BestGap"

    Double attribute.

    Best relative gap for MIP.

  • COPT_DBLATTR_FEASRELAXOBJ or FeasRelaxObj

    Double attribute.

    Feasibility relaxation objective value.

  • COPT_DBLATTR_SOLVINGTIME or "SolvingTime"

    Double attribute.

    The time spent for the optimization (in seconds).

Information

Problem information

  • COPT_DBLINFO_OBJ or "Obj"

    Double information.

    Objective cost of columns.

  • COPT_DBLINFO_LB or "LB"

    Double information.

    Lower bounds of columns or rows.

  • COPT_DBLINFO_UB or "UB"

    Double information.

    Upper bounds of columns or rows.

Solution information

  • COPT_DBLINFO_VALUE or "Value"

    Double information.

    Solution of columns.

  • COPT_DBLINFO_SLACK or "Slack"

    Double information.

    Solution of slack variables, also known as activities of constraints. Only available for LP problem.

  • COPT_DBLINFO_DUAL or "Dual"

    Double information.

    Solution of dual variables. Only available for LP problem.

  • COPT_DBLINFO_REDCOST or "RedCost"

    Double information.

    Reduced cost of columns. Only available for LP problem.

Dual Farkas and primal ray

Advanced topic. When an LP is infeasible or unbounded, the solver can return the dual Farkas or primal ray to prove it.

  • COPT_DBLINFO_DUALFARKAS or "DualFarkas"

    Double information.

    The dual Farkas for constraints of an infeasible LP problem. Please enable the parameter "ReqFarkasRay" to ensure that the dual Farkas is available when the LP is infeasible.

    Without loss of generality, the concept of the dual Farkas can be conveniently demonstrated using an LP problem with general variable bounds and equality constraints: \(Ax = 0 \text{ and } l \leq x \leq u\). When the LP is infeasible, a dual Farkas vector \(y\) can prove that the system has conflict that \(\max y^TAx < y^T b = 0\). Computing \(\max y^TAx\): with the vector \(\hat{a} = y^TA\), choosing variable bound \(x_i = l_i\) when \(\hat{a}_i < 0\) and \(x_i = u_i\) when \(\hat{a}_i > 0\) gives the maximal possible value of \(y^TAx\) for any \(x\) within their bounds.

    Some application relies on the alternate conflict \(\min \bar{y}^TAx > \bar{y}^T b = 0\). This can be achieved by negating the dual Farkas, i.e. \(\bar{y}=-y\) returned by the solver.

    In very rare cases, the solver may fail to return a valid dual Farkas. For example when the LP problem slightly infeasible by tiny amount, which We recommend to study and to repair the infeasibility using FeasRelax instead.

  • COPT_DBLINFO_PRIMALRAY or "PrimalRay"

    Double information.

    The primal ray for variables of an unbounded LP problem. Please enable the parameter "ReqFarkasRay" to ensure that the primal ray is available when an LP is unbounded.

    For a minimization LP problem in the standard form: \(\min c^T x, Ax = b \text{ and } x \geq 0\), a primal ray vector \(r\) satisfies that \(r \geq 0, Ar = 0 \text{ and } c^T r < 0\).

Feasibility relaxation information

  • COPT_DBLINFO_RELAXLB or "RelaxLB"

    Double information.

    Feasibility relaxation values for lower bounds of columns or rows.

  • COPT_DBLINFO_RELAXUB or "RelaxUB"

    Double information.

    Feasibility relaxation values for upper bounds of columns or rows.

  • COPT_DBLINFO_RELAXVALUE or "RelaxValue"

    Double information.

    Solutions for the original model variables (columns) in the feasibility relaxation model.

Callback information

  • COPT_CBINFO_BESTOBJ or "BestObj"

    Double information.

    Current best objective.

  • COPT_CBINFO_BESTBND or "BestBnd"

    Double information.

    Current best objective bound.

  • COPT_CBINFO_HASINCUMBENT or "HasIncumbent"

    Integer information.

    Whether an incumbent is available.

  • COPT_CBINFO_INCUMBENT or "Incumbent"

    Double information.

    Current best feasible solution.

  • COPT_CBINFO_MIPCANDIDATE or "MipCandidate"

    Double information.

    Current feasible solution candidate.

  • COPT_CBINFO_MIPCANDOBJ or "MipCandObj"

    Double information.

    Objective value for current feasible solution candidate.

  • COPT_CBINFO_RELAXSOLUTION or "RelaxSolution"

    Double information.

    Current solution of LP-relaxation.

  • COPT_CBINFO_RELAXSOLOBJ or "RelaxSolObj"

    Double information.

    Current objective of LP-relaxation.

  • COPT_CBINFO_NODESTATUS or "NodeStatus"

    Integer information.

    The solution status of the LP-relaxation problem at the current node.

    For possible values, please refer to: General Constants Chapter: Solution Status (Part), except for NODELIMIT, UNSTARTED, INF_OR_UNB .

Parameters

Limits and tolerances

  • COPT_DBLPARAM_TIMELIMIT or "TimeLimit"

    Double parameter.

    Time limit of the optimization.

    Default: 1e20

    Minimal: 0

    Maximal: 1e20

  • COPT_DBLPARAM_SOLTIMELIMIT or "SolTimeLimit"

    Double parameter.

    Time limit if a primal feasible solution has been found.

    Default: 1e20

    Minimal: 0

    Maximal: 1e20

  • COPT_INTPARAM_NODELIMIT or "NodeLimit"

    Integer parameter.

    Node limit of the optimization.

    Default: -1

    Minimal: -1

    Maximal: INT_MAX

  • COPT_INTPARAM_BARITERLIMIT or "BarIterLimit"

    Integer parameter.

    Iteration limit of barrier method.

    Default: 500

    Minimal: 0

    Maximal: INT_MAX

  • COPT_DBLPARAM_MATRIXTOL or "MatrixTol"

    Double parameter.

    Input matrix coefficient tolerance.

    Default: 1e-10

    Minimal: 0

    Maximal: 1e-7

  • COPT_DBLPARAM_FEASTOL or "FeasTol"

    Double parameter.

    The feasibility tolerance.

    Default: 1e-6

    Minimal: 1e-9.

    Maximal: 1e-4

  • COPT_DBLPARAM_DUALTOL or "DualTol"

    Double parameter.

    The tolerance for dual solutions and reduced cost.

    Default: 1e-6

    Minimal: 1e-9

    Maximal: 1e-4

  • COPT_DBLPARAM_INTTOL or "IntTol"

    Double parameter.

    The integrality tolerance for variables.

    Default: 1e-6

    Minimal: 1e-9

    Maximal: 1e-1

  • COPT_DBLPARAM_RELGAP or "RelGap"

    Double parameter.

    The relative gap of optimization.

    Default: 1e-4

    Minimal: 0

    Maximal: DBL_MAX

  • COPT_DBLPARAM_ABSGAP or "AbsGap"

    Double parameter.

    The absolute gap of optimization.

    Default: 1e-6

    Minimal: 0

    Maximal: DBL_MAX

Presolving and scaling

  • COPT_INTPARAM_PRESOLVE or "Presolve"

    Integer parameter.

    Level of presolving before solving a model.

    Default: -1

    Possible values:

    -1: Automatic

    0: Off

    1: Fast

    2: Normal

    3: Aggressive

  • COPT_INTPARAM_SCALING or "Scaling"

    Integer parameter.

    Whether to perform scaling before solving a problem.

    Default: -1

    Possible values:

    -1: Choose automatically.

    0: No scaling.

    1: Apply scaling.

  • COPT_INTPARAM_DUALIZE or "Dualize"

    Integer parameter.

    Whether to dualize a problem before solving it.

    Default: -1

    Possible values:

    -1: Choose automatically.

    0: No dualizing.

    1: Dualizing the problem.

Other parameters

  • COPT_INTPARAM_LOGGING or "Logging"

    Integer parameter.

    Whether to print optimization logs.

    Default: 1

    Possible values:

    0: No optimization logs.

    1: Print optimization logs.

  • COPT_INTPARAM_LOGTOCONSOLE or "LogToConsole"

    Integer parameter.

    Whether to print optimization logs to console.

    Default: 1

    Possible values:

    0: No optimization logs to console.

    1: Print optimization logs to console.

API Functions

The documentations for COPT API functions are grouped by their purposes.

All the return values of COPT API functions are integers, and possible return values are documented in the constants section.

Creating the environment and problem

COPT_CreateEnvConfig

Synopsis

int COPT_CreateEnvConfig(copt_env_config **p_config)

Description

Create a COPT client configuration.

Arguments

p_config

Output pointer to COPT client configuration.

COPT_DeleteEnvConfig

Synopsis

int COPT_DeleteEnvConfig(copt_env_config **p_config)

Description

Delete COPT client configuration.

Arguments

p_config

Input pointer to COPT client configuration.

COPT_SetEnvConfig

Synopsis

int COPT_SetEnvConfig(copt_env_config *config, const char *name, const char *value)

Description

Set COPT client configuration.

Arguments

config

COPT client configuration.

name

Name of configuration parameter.

value

Value of configuration parameter.

COPT_CreateEnv

Synopsis

int COPT_CreateEnv(copt_env **p_env)

Description

Creates a COPT environment.

Calling this function is the first step when using the COPT library. It validates the license, and when the license is okay, the resulting environment variable will allow for creating COPT problems. When the license validation fails, more information can be obtained using COPT_GetLicenseMsg to help identify the issue.

Arguments

p_env

The output pointer to a variable holding COPT environment.

COPT_CreateEnvWithPath

Synopsis

int COPT_CreateEnvWithPath(const char *licDir, copt_env **p_env)

Description

Creates a COPT environment, directory of license files is specified by argument licDir.

Calling this function is the first step when using the COPT library. It validates the license, and when the license is okay, the resulting environment variable will allow for creating COPT problems. When the license validation fails, more information can be obtained using COPT_GetLicenseMsg to help identify the issue.

Arguments

licDir

Directory of license files.

p_env

Output pointer to a variable holding COPT environment.

COPT_CreateEnvWithConfig

Synopsis

int COPT_CreateEnvWithConfig(copt_env_config *config, copt_env **p_env)

Description

Creates a COPT environment, client configuration is specified by argument config.

Calling this function is the first step when using the COPT library. It validates the client configuration, and when the license is okay, the resulting environment variable will allow for creating COPT problems. When the license validation fails, more information can be obtained using COPT_GetLicenseMsg to help identify the issue.

Arguments

config

Client configuration.

p_env

Output pointer to a variable holding COPT environment.

COPT_DeleteEnv

Synopsis

int COPT_DeleteEnv(copt_env **p_env)

Description

Deletes the COPT environment created by COPT_CreateEnv.

Arguments

p_env

Input pointer to a variable holding COPT environment.

COPT_GetLicenseMsg

Synopsis

int COPT_GetLicenseMsg(copt_env *env, char *buff, int buffSize)

Description

Returns a C-style string regarding the license validation information. Please refer to this function when COPT_CreateEnv fails.

Arguments

env

The COPT environment.

buff

A buffer for holding the resulting string.

buffSize

The size of the above buffer.

COPT_CreateProb

Synopsis

int COPT_CreateProb(copt_env *env, copt_prob **p_prob)

Description

Creates an empty COPT problem.

Arguments

env

The COPT environment.

p_prob

Output pointer to a variable holding the COPT problem.

COPT_CreateCopy

Synopsis

int COPT_CreateCopy(copt_prob *src_prob, copt_prob **p_dst_prob)

Description

Create a deep-copy of an COPT problem.

Note: The parameter settings will be copied too. To solve the copied problem with different parameters, users should reset its parameters to default by calling COPT_ResetParam first, and then set parameters as needed.

Arguments

src_prob

The pointer to a varialbe hoding the COPT problem to be copied.

p_dst_prob

Output pointer to a variable hodling the copied COPT problem.

COPT_ClearProb

Synopsis

int COPT_ClearProb(copt_prob *prob)

Description

Clear COPT problem data (excluding callback function).

Arguments

prob

COPT problem.

COPT_DeleteProb

Synopsis

int COPT_DeleteProb(copt_prob **p_prob)

Description

Deletes the COPT problem created using COPT_CreateProb

Arguments

p_prob

Input pointer to a variable holding the COPT problem.

Building and modifying a problem

COPT_LoadProb

Synopsis

int COPT_LoadProb(

copt_prob *prob,

int nCol,

int nRow,

int iObjSense,

double dObjConst,

const double *obj,

const int *colMatBeg,

const int *colMatCnt,

const int *colMatIdx,

const double *colMatElem,

const char *colType,

const double *colLower,

const double *colUpper,

const char *rowSense,

const double *rowBound,

const double *rowUpper,

char const *const *colNames,

char const *const *rowNames)

Description

Loads a problem defined by arrays.

Arguments

prob

The COPT problem.

nCol

Number of variables (coefficient matrix columns).

nRow

Number of constraints (coefficient matrix rows).

iObjSense

The optimization sense, either COPT_MAXIMIZE or COPT_MINIMIZE.

dObjConst

The constant part of the objective function.

obj

Objective coefficients of variables.

colMatBeg, colMatCnt, colMatIdx and colMatElem

Defines the coefficient matrix in compressed column storage (CCS) format. Please see other information for an example of the CCS format.

If colMatCnt is NULL, colMatBeg will need to have length of nCol+1, and the begin and end pointers to the i-th matrix column coefficients are defined using colMatBeg[i] and colMatBeg[i+1].

If colMatCnt is provided, the begin and end pointers to the i-th column coefficients are defined using colMatBeg[i] and colMatBeg[i] + colMatCnt[i].

colType

Types of variables.

If colType is NULL, all variables will be continuous.

colLower and colUpper

Lower and upper bounds of variables.

If colLower is NULL, lower bounds will be 0.

If colUpper is NULL, upper bounds will be infinity.

rowSense

Senses of constraint.

Please refer to the list of all senses constants for all the supported types.

If rowSense is NULL, then rowBound and rowUpper will be treated as lower and upper bounds for constraints. This is the recommended method for defining constraints.

If rowSense is provided, then rowBound and rowUpper will be treated as RHS and range for constraints. In this case, rowUpper is only required when there are COPT_RANGE constraints, where the

lower bound is rowBound[i] - fabs(rowUpper[i])

upper bound is rowBound[i]

rowBound

Lower bounds or RHS of constraints.

rowUpper

Upper bounds or range of constraints.

colNames and rowNames

Names of variables and constraints. Can be NULL.

Other information

The compressed column storage (CCS) is a common format for storing sparse matrix. We demonstrate how to store the example matrix with 4 columns and 3 rows in the CCS format.

(56)\[\begin{split}A = \begin{bmatrix} 1.1 & 1.2 & & \\ & 2.2 & 2.3 & \\ & & 3.3 & 3.4 \\ \end{bmatrix}\end{split}\]
// Compressed column storage using colMatBeg
colMatBeg[5]  = {  0,   1,   3,   5,   6};
colMatIdx[6]  = {  0,   0,   1,   1,   2,   2};
colMatElem[6] = {1.1, 1.2, 2.2, 2.3, 3.3, 3.4};

// Compressed column storage using both colMatBeg and colMatCnt.
// The * in the example represents unused spaces.
colMatBeg[4]  = {  0,   1,   5,   7};
colMatCnt[4]  = {  1,   2,   2,   1};
colMatIdx[6]  = {  0,   0,   1,   1,   2,   *,   *,   2};
colMatElem[6] = {1.1, 1.2, 2.2, 2.3, 3.3,   *,   *, 3.4};

COPT_AddCol

Synopsis

int COPT_AddCol(

copt_prob *prob,

double dColObj,

int nColMatCnt,

const int *colMatIdx,

const double *colMatElem,

char cColType,

double dColLower,

double dColUpper,

const char *colName)

Description

Adds one variable (column) to the problem.

Arguments

prob

The COPT problem.

dColObj

The objective coefficient of the variable.

nColMatCnt

Number of non-zero elements in the column.

colMatIdx

Row index of non-zero elements in the column.

colMatElem

Values of non-zero elements in the column.

cColType

The type of the variable.

dColLower and dColUpper

The lower and upper bounds of the variable.

colName

The name of the variable. Can be NULL.

COPT_AddPSDCol

Synopsis

int COPT_AddPSDCol(copt_prob *prob, int colDim, const char *name)

Description

Add a PSD variable to the problem.

Arguments

prob

The COPT problem.

colDim

Dimension of new PSD variable.

name

Name of new PSD variable. Can be NULL.

COPT_AddRow

Synopsis

int COPT_AddRow(

copt_prob *prob,

int nRowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense,

double dRowBound,

double dRowUpper,

const char *rowName)

Description

Adds one constraint (row) to the problem.

Arguments

prob

The COPT problem.

nRowMatCnt

Number of non-zero elements in the row.

rowMatIdx

Column index of non-zero elements in the row.

rowMatElem

Values of non-zero elements in the row.

cRowSense

The sense of the row.

Please refer to the list of all senses constants for all the supported types.

If cRowSense is 0, then dRowBound and dRowUpper will be treated as lower and upper bounds for the constraint. This is the recommended method for defining constraints.

If cRowSense is provided, then dRowBound and dRowUpper will be treated as RHS and range for the constraint. In this case, dRowUpper is only required when cRowSense = COPT_RANGE, where

lower bound is dRowBound - dRowUpper

upper bound is dRowBound

dRowBound

Lower bound or RHS of the constraint.

dRowUpper

Upper bound or range of the constraint.

rowName

The name of the constraint. Can be NULL.

COPT_AddCols

Synopsis

int COPT_AddCols(

copt_prob *prob,

int nAddCol,

const double *colObj,

const int *colMatBeg,

const int *colMatCnt,

const int *colMatIdx,

const double *colMatElem,

const char *colType,

const double *colLower,

const double *colUpper,

char const *const *colNames)

Description

Adds nAddCol variables (columns) to the problem.

Arguments

prob

The COPT problem.

nAddCol

Number of new variables.

colObj

Objective coefficients of new variables.

colMatBeg, colMatCnt, colMatIdx and colMatElem

Defines the coefficient matrix in compressed column storage (CCS) format. Please see other information of COPT_LoadProb for an example of the CCS format.

colType

Types of new variables.

colLower and colUpper

Lower and upper bounds of new variables.

If colLower is NULL, lower bounds will be 0.

If colUpper is NULL, upper bounds will be COPT_INFINITY.

colNames

Names of new variables. Can be NULL.

COPT_AddPSDCols

Synopsis

int COPT_AddPSDCols(copt_prob *prob, int nAddCol, const int* colDims, char const *const *names)

Description

Add nAddCol PSD variables to the problem.

Arguments

prob

The COPT problem.

nAddCol

Number of new PSD variables.

colDims

Dimensions of new PSD variables.

names

Names of new PSD variables. Can be NULL.

COPT_AddRows

Synopsis

int COPT_AddRows(

copt_prob *prob,

int nAddRow,

const int *rowMatBeg,

const int *rowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

const char *rowSense,

const double *rowBound,

const double *rowUpper,

char const *const *rowNames)

Description

Adds nAddRow constraints (rows) to the problem.

Arguments

prob

The COPT problem.

nAddRow

Number of new constraints.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

rowSense

Senses of new constraints.

Please refer to the list of all senses constants for all the supported types.

If rowSense is NULL, then rowBound and rowUpper will be treated as lower and upper bounds for constraints. This is the recommended method for defining constraints.

If rowSense is provided, then rowBound and rowUpper will be treated as RHS and range for constraints. In this case, rowUpper is only required when there are COPT_RANGE constraints, where the

lower bound is rowBound[i] - fabs(rowUpper[i])

upper bound is rowBound[i]

rowBound

Lower bounds or RHS of new constraints.

rowUpper

Upper bounds or range of new constraints.

rowNames

Names of new constraints. Can be NULL.

COPT_AddSOSs

Synopsis

int COPT_AddSOSs(

copt_prob *prob,

int nAddSOS,

const int *sosType,

const int *sosMatBeg,

const int *sosMatCnt,

const int *sosMatIdx,

const double *sosMatWt)

Description

Add nAddSOS SOS constraints to the problem. If sosMatWt is NULL, then COPT will generate it internally.

Note: if a problem contains SOS constraints, the problem is a MIP.

Arguments

prob

The COPT problem.

nAddSOS

Number of new SOS constraints.

sosType

Types of SOS constraints.

sosMatBeg, sosMatCnt, sosMatIdx and sosMatWt

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

sosMatWt

Weights of variables in SOS constraints. Can be NULL.

COPT_AddCones

Synopsis

int COPT_AddCones(

copt_prob *prob,

int nAddCone,

const int *coneType,

const int *coneBeg,

const int *coneCnt,

const int *coneIdx)

Description

Add nAddCone Second-Order-Cone (SOC) constraints.

Arguments

prob

The COPT problem.

nAddCone

Number of new SOC constraints.

coneType

Types of SOC constraints.

coneBeg, coneCnt, coneIdx

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

COPT_AddExpCones

Synopsis

int COPT_AddExpCones(

copt_prob *prob,

int nAddCone,

const int *coneType,

const int *coneIdx)

Description

Add nAddCone exponential cone constraints.

Arguments

prob

The COPT problem.

nAddCone

Number of new exponential cone constraints.

coneType

Types of exponential cone constraints.

coneIdx

Array of subscripts for the variables that constitute the exponential cone constraints.

COPT_AddQConstr

Synopsis

int COPT_AddQConstr(

copt_prob *prob,

int nRowMatCnt,

const int *rowMatIdx,

const int *rowMatElem,

int nQMatCnt,

const int *qMatRow,

const int *qMatCol,

const double *qMatElem,

char cRowSense,

double dRowBound, const char *name)

Description

Add a general quadratic constraint.

Note Only convex quadratic constraint is currently supported.

Arguments

prob

The COPT problem.

nRowMatCnt

Number of non-zero linear terms of the quadratic constraint (row).

rowMatIdx

Column index of non-zero linear terms of the quadratic constraint (row).

rowMatElem

Values of non-zero linear terms of the quadratic constraint (row).

nQMatCnt

Number of non-zero quadratic terms of the quadratic constraint (row).

qMatRow

Row index of non-zero quadratic terms of the quadratic constraint (row).

qMatCol

Column index of non-zero quadratic terms of the quadratic constraint (row).

qMatElem

Values of non-zero quadratic terms of the quadratic constraint (row).

cRowSense

The sense of the quadratic constraint (row).

dRowBound

Right hand side of the quadratic constraint (row).

name

Name of the quadratic constraint (row).

COPT_AddPSDConstr

Synopsis

int COPT_AddPSDConstr(

copt_prob *prob,

int nRowMatCnt,

const int *rowMatIdx,

const int *rowMatElem,

int nColCnt,

const int *psdColIdx,

const int *symMatIdx,

char cRowSense,

double dRowBound,

double dRowUpper,

const char *name)

Description

Add a PSD constraint.

Arguments

prob

The COPT problem.

nRowMatCnt

Number of non-zero linear terms of the PSD constraint.

rowMatIdx

Column index of non-zero linear terms of the PSD constraint.

rowMatElem

Values of non-zero linear terms of the PSD constraint.

nColCnt

Number of PSD terms of the PSD constraint.

psdColIdx

PSD variable index of PSD terms of the PSD constraint.

symMatIdx

Symmetric matrix index of PSD terms of the PSD constraint.

cRowSense

Senses of new PSD constraint.

Please refer to the list of all senses constants for all the supported types.

If cRowSense is 0, then dRowBound and dRowUpper will be treated as lower and upper bounds for the constraint. This is the recommended method for defining constraints.

If cRowSense is provided, then dRowBound and dRowUpper will be treated as RHS and range for the constraint. In this case, dRowUpper is only required when cRowSense = COPT_RANGE, where

lower bound is dRowBound - dRowUpper

upper bound is dRowBound

dRowBound

Lower bound or RHS of the PSD constraint.

dRowUpper

Upper bound or range of the PSD constraint.

name

Name of the PSD constraint. Can be NULL.

COPT_AddLMIConstr

Synopsis

int COPT_AddLMIConstr(

copt_prob *prob,

int nDim,

int nLMIMatCnt,

const int *colIdx,

const int *symMatIdx,

int constMatIdx,

const char *name)

Description

Add a LMI constraint to the problem.

Arguments

prob

The COPT problem.

nDim

Dimension of symmetric matrix in the LMI constraint.

nLMIMatCnt

Number of coefficient matrix entries in the LMI constraint.

colIdx

Index of scalar variable in the LMI constraint.

symMatIdx

Index of symmetric coefficient matrix in the LMI constraint.

constMatIdx

Index of constant-term symmetric matrix in the LMI constraint.

name

Name of LMI constraint. Can be NULL.

COPT_AddIndicator

Synopsis

int COPT_AddIndicator(

copt_prob *prob,

int binColIdx,

int binColVal,

int nRowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense, double dRowBound)

Description

Add an indicator constraint to the problem.

Arguments

prob

The COPT problem.

binColIdx

Index of indicator variable (column).

binColVal

Value of indicator variable (column).

nRowMatCnt

Number of non-zero elements in the linear constraint (row).

rowMatIdx

Column index of non-zero elements in the linear constraint (row).

rowMatElem

Values of non-zero elements in the linear constraint (row).

cRowSense

The sense of the linear constraint (row). Options are: COPT_EQUAL , COPT_LESS_EQUAL and COPT_GREATER_EQUAL .

dRowBound

Right hand side of the linear constraint (row).

COPT_AddIndicators

Synopsis

int COPT_AddIndicators(

copt_prob *prob,

int nInd,

int *indType,

int *binColIdx,

int *binColVal,

const int *rowMatBeg,

const int *RowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense,

double *dRowBound,

char const *const indNames);

Description

Add nInd indicator constraints to the problem.

Arguments

prob

The COPT problem.

nInd

Number of indicator constraints.

indType

Type for indcator constraints. Please refer to Indicator constraint types for possible values.

binColIdx

Index of indicator variable (column).

binColVal

Value of indicator variable (column).

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format for linear constraint in the indcator constrsints.

Please see other information of COPT_LoadProb for an example of the CRS format.

cRowSense

The sense of the linear constraint (row). Options are: COPT_EQUAL , COPT_LESS_EQUAL and COPT_GREATER_EQUAL .

dRowBound

Right hand side of the linear constraint (row).

indNames

Names for indicator constraints.

COPT_AddSymMat

Synopsis

int COPT_AddSymMat(copt_prob *prob, int ndim, int nelem, int *rows, int *cols, double *elems)

Description

Add a symmetric matrix to the problem. (Expect lower triangle part)

Arguments

prob

The COPT problem.

ndim

Dimension of symmetric matrix.

nelem

Number of non-zeros of symmetric matrix.

rows

Row index of symmetric matrix.

cols

Column index of symmetric matrix.

elems

Nonzero elements of symmetric matrix.

COPT_DelCols

Synopsis

int COPT_DelCols(copt_prob *prob, int num, const int *list)

Description

Deletes num variables (columns) from the problem.

Arguments

prob

The COPT problem.

num

Number of variables to be deleted.

list

A list of index of variables to be deleted.

COPT_DelPSDCols

Synopsis

int COPT_DelPSDCols(copt_prob *prob, int num, const int *list)

Description

Deletes num PSD variables from the problem.

Arguments

prob

The COPT problem.

num

Number of PSD variables to be deleted.

list

A list of index of PSD variables to be deleted.

COPT_DelRows

Synopsis

int COPT_DelRows(copt_prob *prob, int num, const int *list)

Description

Deletes num constraints (rows) from the problem.

Arguments

prob

The COPT problem.

num

The number of constraints to be deleted.

list

The list of index of constraints to be deleted.

COPT_DelSOSs

Synopsis

int COPT_DelSOSs(copt_prob *prob, int num, const int *list)

Description

Deletes num SOS constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of SOS constraints to be deleted.

list

The list of index of SOS constraints to be deleted.

COPT_DelCones

Synopsis

int COPT_DelCones(copt_prob *prob, int num, const int *list)

Description

Deletes num Second-Order-Cone (SOC) constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of SOC constraints to be deleted.

list

The list of index of SOC constraints to be deleted.

COPT_DelExpCones

Synopsis

int COPT_DelExpCones(copt_prob *prob, int num, const int *list)

Description

Deletes num exponential cone constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of exponential cone constraints to be deleted.

list

The list of index of exponential cone constraints to be deleted.

COPT_DelQConstrs

Synopsis

int COPT_DelQConstrs(copt_prob *prob, int num, const int *list)

Description

Deletes num quadratic constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of quadratic constraints to be deleted.

list

The list of index of quadratic constraints to be deleted.

COPT_DelPSDConstrs

Synopsis

int COPT_DelPSDConstrs(copt_prob *prob, int num, const int *list)

Description

Deletes num PSD constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of PSD constraints to be deleted.

list

The list of index of PSD constraints to be deleted.

COPT_DelLMIConstrs

Synopsis

int COPT_DelLMIConstrs(copt_prob *prob, int num, const int *list)

Description

Deletes num LMI constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of LMI constraints to be deleted.

list

The list of index of LMI constraints to be deleted.

COPT_DelIndicators

Synopsis

int COPT_DelIndicators(copt_prob *prob, int num, const int *list)

Description

Deletes num indicator constraints from the problem.

Arguments

prob

The COPT problem.

num

The number of indicator constraints to be deleted.

list

The list of index of indicator constraints to be deleted.

COPT_DelQuadObj

Synopsis

int COPT_DelQuadObj(copt_prob *prob)

Description

Deletes the quadratic terms from the quadratic objective function.

Arguments

prob

The COPT problem.

COPT_DelPSDObj

Synopsis

int COPT_DelPSDObj(copt_prob *prob)

Description

Deletes the PSD terms from objective function.

Arguments

prob

The COPT problem.

COPT_SetElem

Synopsis

int COPT_SetElem(copt_prob *prob, int iCol, int iRow, double newElem)

Description

Set coefficient of specified row and column.

Note: If newElem is smaller than or equal to parameter MatrixTol, the coefficient will be set as zero.

Arguments

prob

The COPT problem.

iCol

Column index.

iRow

Row index.

newElem

New coefficient.

COPT_SetElems

Synopsis

int COPT_SetElems(copt_prob *prob, int nelem, const int *cols, const int *rows, const double *elems)

Description

Set the coefficients of the specified columns and rows in batches.

Note The index pairs of columns and rows cannot appear repeatedly.

Arguments

prob

The COPT problem.

nelem

The number of new coefficients to be set.

cols

Column indexes.

rows

Row indexes.

elems

The values of the new coefficients to be set.

COPT_SetPSDElem

Synopsis

int COPT_SetPSDElem(copt_prob *prob, int iCol, int iRow, int newIdx)

Description

Set symmetric matrix index for given PSD term of PSD constraint.

Arguments

prob

The COPT problem.

iCol

PSD variable index.

iRow

PSD constraint index.

newIdx

New symmetric matrix index.

COPT_SetLMIElem

Synopsis

int COPT_SetLMIElem(copt_prob *prob, int iCol, int iRow, int newIdx)

Description

Set symmetric matrix index for given term of LMI constraint.

Arguments

prob

The COPT problem.

iCol

Scalar variable index.

iRow

LMI constraint index.

newIdx

New coefficient symmetric matrix index.

COPT_SetObjSense

Synopsis

int COPT_SetObjSense(copt_prob *prob, int iObjSense)

Description

Change the objective function sense.

Arguments

prob

The COPT problem.

iObjSense

The optimization sense, either COPT_MAXIMIZE or COPT_MINIMIZE.

COPT_SetObjConst

Synopsis

int COPT_SetObjConst(copt_prob *prob, double dObjConst)

Description

Set the constant term of objective function.

Arguments

prob

The COPT problem.

dObjConst

The constant term of objective function.

COPT_SetColObj/Type/Lower/Upper/Names

Synopsis

int COPT_SetColObj(copt_prob *prob, int num, const int *list, const double *obj)

int COPT_SetColType(copt_prob *prob, int num, const int *list, const char *type)

int COPT_SetColLower(copt_prob *prob, int num, const int *list, const double *lower)

int COPT_SetColUpper(copt_prob *prob, int num, const int *list, const double *upper)

int COPT_SetColNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

These five API functions each modifies

objective coefficients

variable types

lower bounds

upper bounds

names

of num variables (columns) in the problem.

Arguments

prob

The COPT problem.

num

Number of variables to modify.

list

A list of index of variables to modify.

obj

New objective coefficients for each variable in the list.

types

New types for each variable in the list.

lower

New lower bounds for each variable in the list.

upper

New upper bounds for each variable in the list.

names

New names for each variable in the list.

COPT_SetPSDColNames

Synopsis

int COPT_SetPSDColNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

Modify names of num PSD variables.

Arguments

prob

The COPT problem.

num

Number of PSD variables to modify.

list

A list of index of PSD variables to modify.

names

New names for each PSD variable in the list.

COPT_SetRowLower/Upper/Names

Synopsis

int COPT_SetRowLower(copt_prob *prob, int num, const int *list, const double *lower)

int COPT_SetRowUpper(copt_prob *prob, int num, const int *list, const double *upper)

int COPT_SetRowNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

These three API functions each modifies

lower bounds

upper bounds

names

of num constraints (rows) in the problem.

Arguments

prob

The COPT problem.

num

Number of constraints to modify.

list

A list of index of constraints to modify.

lower

New lower bounds for each constraint in the list.

upper

New upper bounds for each constraint in the list.

names

New names for each constraint in the list.

COPT_SetQConstrSense/Rhs/Names

Synopsis

int COPT_SetQConstrSense(copt_prob *prob, int num, const int *list, const char *sense)

int COPT_SetQConstrRhs(copt_prob *prob, int num, const int *list, const double *rhs)

int COPT_SetQConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

These three API functions each modifies

senses

RHS

names

of num quadratic constraints (rows) in the problem.

Arguments

prob

The COPT problem.

num

Number of quadratic constraints to modify.

list

A list of index of quadratic constraints to modify.

sense

New senses for each quadratic constraint in the list.

rhs

New RHS for each quadratic constraint in the list.

names

New names for each quadratic constraint in the list.

COPT_SetPSDConstrLower/Upper/Names

Synopsis

int COPT_SetPSDConstrLower(copt_prob *prob, int num, const int *list, const double *lower)

int COPT_SetPSDConstrUpper(copt_prob *prob, int num, const int *list, const double *upper)

int COPT_SetPSDConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

These three API functions each modifies

lower bounds

upper bounds

names

of num PSD constraints in the problem.

Arguments

prob

The COPT problem.

num

Number of PSD constraints to modify.

list

A list of index of PSD constraints to modify.

lower

New lower bounds for each PSD constraint in the list.

upper

New upper bounds for each PSD constraint in the list.

names

New names for each PSD constraint in the list.

COPT_SetLMIConstrRhs

Synopsis

int COPT_SetLMIConstrRhs(copt_prob *prob, int num, const int *list, const int *newIdx)

Description

Modify the constant-term symmetric matrix of num LMI constraints.

Arguments

prob

The COPT problem.

num

Number of LMI constraints to modify.

list

A list of index of LMI constraints to modify.

newIdx

The new index of the constant-term symmetric matrix to be set.

COPT_SetIndicatorNames

Synopsis

int COPT_SetIndicatorNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

Modifies names of num indicator constraints in the problem.

Arguments

prob

The COPT problem.

num

Number of indicator constraints to modify.

list

A list of indexes of indicator constraints to modify.

names

New names for each indicator constraint in the list.

COPT_SetLMIConstrNames

Synopsis

int COPT_SetLMIConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)

Description

Modify the names of num LMI constraints.

Arguments

prob

The COPT problem.

num

Number of LMI constraints to modify.

list

A list of index of LMI constraints to modify.

names

New names for each LMI constraint in the list.

COPT_ReplaceColObj

Synopsis

int COPT_ReplaceColObj(copt_prob *prob, int num, const int *list, const double *obj)

Description

Replace objective function with new objective function represented by specified objective costs.

Arguments

prob

The COPT problem.

num

Number of variables to be modified.

list

Index of variables to be modified.

obj

Objective costs of modified variables.

COPT_ReplacePSDObj

Synopsis

int COPT_ReplacePSDObj(copt_prob *prob, int num, const int *list, const int *idx)

Description

Replace PSD terms in objective function with specified PSD terms.

Arguments

prob

The COPT problem.

num

Number of PSD variables to be modified.

list

Index of PSD variables to be modified.

idx

Symmetric matrix index of modified PSD variables.

COPT_SetQuadObj

Synopsis

int COPT_SetQuadObj(copt_prob *prob, int num, int *qRow, int *qCol, double *qElem)

Description

Set the quadratic terms of the quadratic objective function.

Arguments

prob

The COPT problem.

num

Number of non-zero quadratic terms of the quadratic objective function.

qRow

Row index of non-zero quadratic terms of the quadratic objective function.

qCol

Column index of non-zero quadratic terms of the quadratic objective function.

qElem

Values of non-zero quadratic terms of the quadratic objective function.

COPT_SetPSDObj

Synopsis

int COPT_SetPSDObj(copt_prob *prob, int iCol, int newIdx)

Description

Set PSD terms of objective function.

Arguments

prob

The COPT problem.

iCol

PSD variable index.

newIdx

Symmetric matrix index.

Reading and writing the problem

COPT_ReadMps

Synopsis

int COPT_ReadMps(copt_prob *prob, const char *mpsfilename)

Description

Reads a problem from a MPS file.

Arguments

prob

The COPT problem.

mpsfilename

The path to the MPS file.

COPT_ReadLp

Synopsis

int COPT_ReadLp(copt_prob *prob, const char *lpfilename)

Description

Read a problem from a LP file.

Arguments

prob

The COPT problem.

lpfilename

The path to the LP file.

COPT_ReadSDPA

Synopsis

int COPT_ReadSDPA(copt_prob *prob, const char *sdpafilename)

Description

Reads a problem from SDPA format file.

Arguments

prob

The COPT problem.

sdpafilename

The path to the SDPA format file.

COPT_ReadCbf

Synopsis

int COPT_ReadCbf(copt_prob *prob, const char *cbffilename)

Description

Reads a problem from CBF format file.

Arguments

prob

The COPT problem.

cbffilename

The path to the CBF format file.

COPT_ReadBin

Synopsis

int COPT_ReadBin(copt_prob *prob, const char *binfilename)

Description

Reads a problem from a COPT binary format file.

Arguments

prob

The COPT problem.

binfilename

The path to the COPT binary format file.

COPT_ReadBlob

Synopsis

int COPT_ReadBlob(copt_prob *prob, void *blob, COPT_INT64 len)

Description

Reads a problem from COPT serialized data.

Arguments

prob

The COPT problem.

blob

Serialized data.

len

Length of serialized data.

COPT_WriteMps

Synopsis

int COPT_WriteMps(copt_prob *prob, const char *mpsfilename)

Description

Writes the problem to a MPS file.

Arguments

prob

The COPT problem.

mpsfilename

The path to the MPS file.

COPT_WriteMpsStr

Synopsis

int COPT_WriteMpsStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)

Description

Writes the problem to a string buffer as MPS format.

Arguments

prob

The COPT problem.

str

String buffer of MPS-format problem.

nStrSize

The size of string buffer.

pReqSize

Minimum space requirement of string buffer for problem.

COPT_WriteLp

Synopsis

int COPT_WriteLp(copt_prob *prob, const char *lpfilename)

Description

Writes the problem to a LP file.

Arguments

prob

The COPT problem.

lpfilename

The path to the LP file.

COPT_WriteCbf

Synopsis

int COPT_WriteCbf(copt_prob *prob, const char *cbffilename)

Description

Writes the problem to a CBF format file.

Arguments

prob

The COPT problem.

cbffilename

The path to the CBF format file.

COPT_WriteBin

Synopsis

int COPT_WriteBin(copt_prob *prob, const char *binfilename)

Description

Writes the problem to a COPT binary format file.

Arguments

prob

The COPT problem.

binfilename

The path to the COPT binary format file.

COPT_WriteBlob

Synopsis

int COPT_WriteBlob(copt_prob *prob, int tryCompress, void **p_blob, COPT_INT64 *pLen)

Description

Writes the problem to COPT serialized data.

Arguments

prob

The COPT problem.

tryCompress

Whether to compress data.

p_blob

Output pointer of serialized data.

pLen

Pointer to length of serialized data.

Solving the problem and accessing solutions

COPT_SolveLp

Synopsis

int COPT_SolveLp(copt_prob *prob)

Description

Solves the LP, QP, QCP, SOCP and SDP problem.

If problem is a MIP, then integer restrictions on variables will be ignored, and SOS constraints, indicator constraints will be discarded, and the problem will be solved as a LP.

Arguments

prob

The COPT problem.

COPT_Solve

Synopsis

int COPT_Solve(copt_prob *prob)

Description

Solves the problem.

Arguments

prob

The COPT problem.

COPT_GetSolution

Synopsis

int COPT_GetSolution(copt_prob *prob, double *colVal)

Description

Obtains MIP solution.

Arguments

prob

The COPT problem.

colVal

Solution values of variables.

COPT_GetPoolObjVal

Synopsis

int COPT_GetPoolObjVal(copt_prob *prob, int iSol, double *p_objVal)

Description

Obtains the iSol -th objective value in solution pool.

Arguments

prob

The COPT problem.

iSol

Index of solution.

p_objVal

Pointer to objective value.

COPT_GetPoolSolution

Synopsis

int COPT_GetPoolSolution(copt_prob *prob, int iSol, int num, const int *list, double *colVal)

Description

Obtains the iSol -th solution.

Arguments

prob

The COPT problem.

iSol

Index of solution.

num

Number of columns.

list

Index of columns. Can be NULL.

colVal

Array of solution.

COPT_GetLpSolution

Synopsis

int COPT_GetLpSolution(copt_prob *prob, double *value, double *slack, double *rowDual, double *redCost)

Description

Obtains LP, QP, QCP, SOCP and SDP solutions.

Note: For SDP, please use COPT_GetPSDColInfo to obtain primal/dual solution of PSD variable.

Arguments

prob

The COPT problem.

value

Solution values of variables. Can be NULL.

slack

Solution values of slack variables. They are also known as activities of constraints. Can be NULL.

rowDual

Dual values of constraints. Can be NULL.

redCost

Reduced cost of variables. Can be NULL.

COPT_SetLpSolution

Synopsis

int COPT_SetLpSolution(copt_prob *prob, double *value, double *slack, double *rowDual, double *redCost)

Description

Set LP solution.

Arguments

prob

The COPT problem.

value

Solution values of variables.

slack

Solution values of slack variables.

rowDual

Dual values of constraints.

redCost

Reduced cost of variables.

COPT_GetBasis

Synopsis

int COPT_GetBasis(copt_prob *prob, int *colBasis, int *rowBasis)

Description

Obtains LP basis.

Arguments

prob

The COPT problem.

colBasis and rowBasis

The basis status of variables and constraints. Please refer to basis constants for possible values and their meanings.

COPT_SetBasis

Synopsis

int COPT_SetBasis(copt_prob *prob, const int *colBasis, const int *rowBasis)

Description

Sets LP basis. It can be used to warm-start an LP optimization.

Arguments

prob

The COPT problem.

colBasis and rowBasis

The basis status of variables and constraints. Please refer to basis constants for possible values and their meanings.

COPT_SetSlackBasis

Synopsis

int COPT_SetSlackBasis(copt_prob *prob)

Description

Sets a slack basis for LP. The slack basis is the default starting basis for an LP problem. This API function can be used to restore an LP problem to its starting basis.

Arguments

prob

The COPT problem.

COPT_Reset

Synopsis

int COPT_Reset(copt_prob *prob, int iClearAll)

Description

Reset basis and LP/MIP solution in problem, which forces next solve start from scratch. If iClearAll is 1, then clear additional information such as MIP start as well.

Arguments

prob

The COPT problem.

iClearAll

Whether to clear additional information.

COPT_ReadSol

Synopsis

int COPT_ReadSol(copt_prob *prob, const char *solfilename)

Description

Reads a MIP solution from file as MIP start information.

Note: The default solution value is 0, i.e. a partial solution will be automatically filled in with zeros.

Arguments

prob

The COPT problem.

solfilename

The path to the solution file.

COPT_WriteSol

Synopsis

int COPT_WriteSol(copt_prob *prob, const char *solfilename)

Description

Writes a LP/MIP solution to a file.

Arguments

prob

The COPT problem.

solfilename

The path to the solution file.

COPT_WritePoolSol

Synopsis

int COPT_WritePoolSol(copt_prob *prob, int iSol, const char *solfilename)

Description

Writes selected pool solution to a file.

Arguments

prob

The COPT problem.

iSol

Index of pool solution.

solfilename

The path to the solution file.

COPT_WriteBasis

Synopsis

int COPT_WriteBasis(copt_prob *prob, const char *basfilename)

Description

Writes the internal LP basis to a file.

Arguments

prob

The COPT problem.

basfilename

The path to the basis file.

COPT_ReadBasis

Synopsis

int COPT_ReadBasis(copt_prob *prob, const char *basfilename)

Description

Reads the LP basis from a file. It can be used to warm-start an LP optimization.

Arguments

prob

The COPT problem.

basfilename

The path to the basis file.

Accessing information of problem

COPT_GetCols

Synopsis

int COPT_GetCols(

copt_prob *prob,

int nCol,

const int *list,

int *colMatBeg,

int *colMatCnt,

int *colMatIdx,

double *colMatElem,

int nElemSize,

int *pReqSize)

Description

Extract coefficient matrix by columns.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments colMatBeg, colMatCnt, colMatIdx and colMatElem, we get number of non-zeros elements by pReqSize specified by nCol and list. Secondly, allocate sufficient memory for CCS-format matrix and call this function again to extract coefficient matrix. If the memory of coefficient matrix passed to function is not sufficient, then return the first nElemSize non-zero elements, and the minimal required length of non-zero elements by pReqSize. If list is NULL, then the first nCol columns will be returned.

Arguments

prob

The COPT problem.

nCol

Number of columns.

list

Index of columns. Can be NULL.

colMatBeg, colMatCnt, colMatIdx and colMatElem

Defines the coefficient matrix in compressed column storage (CCS) format. Please see other information of COPT_LoadProb for an example of the CCS format.

nElemSize

Length of array for non-zero coefficients.

pReqSize

Pointer to minimal length of array for non-zero coefficients. Can be NULL.

COPT_GetPSDCols

Synopsis

int COPT_GetPSDCols(copt_prob *prob, int nCol, int *list, int* colDims, int *colLens)

Description

Get dimension and flattened length of nCol PSD variables.

Arguments

prob

The COPT problem.

nCol

Number of PSD variables.

list

Index of PSD variables. Can be NULL.

colDims

Dimension of PSD variables.

colLens

Flattened length of PSD variables.

COPT_GetRows

Synopsis

int COPT_GetRows(

copt_prob *prob,

int nRow,

const int *list,

int *rowMatBeg,

int *rowMatCnt,

int *rowMatIdx,

double *rowMatElem,

int nElemSize,

int *pReqSize)

Description

Extract coefficient matrix by rows.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem, we get number of non-zeros elements by pReqSize specified by nRow and list. Secondly, allocate sufficient memory for CRS-format matrix and call this function again to extract coefficient matrix. If the memory of coefficient matrix passed to function is not sufficient, then return the first nElemSize non-zero elements, and the minimal required length of non-zero elements by pReqSize. If list is NULL, then the first nRow rows will be returned.

Arguments

prob

The COPT problem.

nRow

Number of rows.

list

Index of rows. Can be NULL.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. Please see other information of COPT_LoadProb for an example of the CRS format.

nElemSize

Length of array for non-zero coefficients.

pReqSize

Pointer to minimal length of array for non-zero coefficients. Can be NULL.

COPT_GetElem

Synopsis

int COPT_GetElem(copt_prob *prob, int iCol, int iRow, double *p_elem)

Description

Get coefficient of specified row and column.

Arguments

prob

The COPT problem.

iCol

Column index.

iRow

Row index.

p_elem

Pointer to requested coefficient.

COPT_GetPSDElem

Synopsis

int COPT_GetPSDElem(copt_prob *prob, int iCol, int iRow, int *p_idx)

Description

Get symmetric matrix index of specified PSD constraint and PSD variable.

Arguments

prob

The COPT problem.

iCol

PSD variable index.

iRow

PSD constraint index.

p_idx

Pointer to requested symmetric matrix index.

COPT_GetLMIElem

Synopsis

int COPT_GetLMIElem(copt_prob *prob, int iCol, int iRow, int *p_idx)

Description

Get symmetric matrix index of specified LMI constraint and scalar variable.

Arguments

prob

The COPT problem.

iCol

Scalar variable index.

iRow

LMI constraint index.

p_idx

Pointer to requested coefficient matrix index.

COPT_GetSymMat

Synopsis

int COPT_GetSymMat(

copt_prob *prob,

int iMat,

int *p_nDim,

int *p_nElem,

int *rows,

int *cols,

double *elems)

Description

Get specified symmetric matrix.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments rows, cols and elems, we get dimension and number of non-zeros of symmetric matrix by p_nDim and p_nElem, then allocate enough memory for rows, cols and elems and call this function to get the data of symmetric matrix.

Arguments

prob

The COPT problem.

iMat

Symmetric matrix index.

p_nDim

Pointer to dimension of symmetric matrix.

p_nElem

Pointer to number of nonzeros of symmetric matrix.

rows

Row index of symmetric matrix.

cols

Column index of symmetric matrix.

elems

Nonzero elements of symmetric matrix.

COPT_GetQuadObj

Synopsis

int COPT_GetQuadObj(copt_prob* prob, int* p_nQElem, int* qRow, int* qCol, double* qElem)

Description

Get the quadratic terms of the quadratic objective function.

Arguments

prob

The COPT problem.

p_nQElem

Pointer to number of non-zero quadratic terms . Can be NULL.

qRow

Row index of non-zero quadratic terms of the quadratic objective function.

qCol

Column index of non-zero quadratic terms of the quadratic objective function.

qElem

Values of non-zero quadratic terms of the quadratic objective function.

COPT_GetPSDObj

Synopsis

int COPT_GetPSDObj(copt_prob *prob, int iCol, int *p_idx)

Description

Get the specified PSD term of objective function.

Arguments

prob

The COPT problem.

iCol

PSD variable index.

p_idx

Pointer to symmetric matrix index.

COPT_GetSOSs

Synopsis

int COPT_GetSOSs(

copt_prob *prob,

int nSos,

const int *list,

int *sosMatBeg,

int *sosMatCnt,

int *sosMatIdx,

double *sosMatWt,

int nElemSize,

int *pReqSize)

Description

Get the weight matrix of SOS constraints.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments sosMatBeg, sosMatCnt, sosMatIdx and sosMatWt, we get number of non-zeros elements by pReqSize specified by nSos and list. Secondly, allocate sufficient memory for CRS-format matrix and call this function again to extract weight matrix. If the memory of weight matrix passed to function is not sufficient, then return the first nElemSize non-zero elements, and the minimal required length of non-zero elements by pReqSize. If list is NULL, then the first nSos rows will be returned.

Arguments

prob

The COPT problem.

nSos

Number of SOS constraints.

list

Index of SOS constraints. Can be NULL.

sosMatBeg, sosMatCnt, sosMatIdx and sosMatWt

Defines the weight matrix of SOS constraints in compressed row storage (CRS) format. Please see other information of COPT_LoadProb for an example of the CRS format.

nElemSize

Length of array for non-zero weights.

pReqSize

Pointer to minimal length of array for non-zero weights. Can be NULL.

COPT_GetCones

Synopsis

int COPT_GetCones(

copt_prob *prob,

int nCone,

const int *list,

int *coneBeg,

int *coneCnt,

int *coneIdx,

int nElemSize,

int *pReqSize)

Description

Get the matrix of Second-Order-Cone (SOC) constraints.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments coneBeg, coneCnt and coneIdx, we get number of subscripts of variables by pReqSize specified by nCone and list. Secondly, allocate sufficient memory for CRS-format matrix and call this function again to extract weight matrix. If the memory of weight matrix passed to function is not sufficient, then return the first nElemSize subscripts of variables, and the minimal required length of non-zero elements by pReqSize. If list is NULL, then the first nCone rows will be returned.

Arguments

prob

The COPT problem.

nCone

Number of SOC constraints.

list

Index of SOC constraints. Can be NULL.

coneBeg, coneCnt, coneIdx

Defines the matrix of SOC constraints in compressed row storage (CRS) format. Please see other information of COPT_LoadProb for an example of the CRS format.

nElemSize

Length of array for non-zero weights.

pReqSize

Pointer to minimal length of array for non-zero weights. Can be NULL.

COPT_GetExpCones

Synopsis

int COPT_GetExpCones(

copt_prob *prob,

int nCone,

const int *list,

int *coneType,

int *coneIdx,

int nElemSize,

int *pReqSize)

Description

Get the array of exponential cone constraints.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments coneIdx, we get number of subscripts of variables by nElemSizes specified by nCone and list. Secondly, allocate sufficient memory for array and call this function again to extract weight array. If the memory of weight array passed to function is not sufficient, then return the first nElemSize subscripts, and the minimal required length of subscripts by pReqSize. If list is NULL, then the first nCone rows will be returned.

Arguments

prob

The COPT problem.

nCone

Number of exponential cone constraints.

list

Index of exponential cone constraints. Can be NULL.

coneType

Type of exponential cone constraints. Please refer to Exponential Cone type for possible values.

coneIdx

Array of subscripts of variables constituting the exponential cone constraints.

nElemSize

Length of array for subscripts of variables.

pReqSize

Pointer to minimal length of array for subscripts of variables. Can be NULL.

COPT_GetQConstr

Synopsis

int COPT_GetQConstr(

copt_prob *prob,

int qConstrIdx,

int *qMatRow,

int *qMatCol,

double *qMatElem,

int nQElemSize,

int *pQReqSize,

int *rowMatIdx,

double *rowMatElem,

char *cRowSense,

double *dRowBound,

int nElemSize,

int *pReqSize)

Description

Get quadratic constraint.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments qMatRow, qMatCol, qMatElem, rowMatIdx and rowMatElem, we get number of non-zero quadratic terms by pQReqSize and number of non-zero linear terms by pReqSize specified by qConstrIdx. Secondly, allocate sufficient memory for the quadratic terms and the linear terms, and call this function again to extract the quadratic constraint. If the memory of the array of the quadratic terms passed to function is not sufficient, then return the first nQElemSize quadratic terms, and the minimal required length of quadratic terms by pQReqSize. If the memory of the array of the linear terms passed to function is not sufficient, then return the first nElemSize linear terms, and the minimal required length of linear terms by pReqSize.

Arguments

prob

The COPT problem.

qConstrIdx

Index of the quadratic constraint.

qMatRow

Row index of non-zero quadratic terms of the quadratic constraint (row).

qMatCol

Column index of non-zero quadratic terms of the quadratic constraint (row).

qMatElem

Values of non-zero quadratic terms of the quadratic constraint (row).

nQElemSize

Length of array for non-zero quadratic terms of the quadratic constraint (row).

pQReqSize

Pointer to minimal length of array for non-zero quadratic terms of the quadratic constraint (row). Can be NULL.

rowMatIdx

Column index of non-zero linear terms of the quadratic constraint (row).

rowMatElem

Values of non-zero linear terms of the quadratic constraint (row).

cRowSense

The sense of the quadratic constraint (row).

dRowBound

Right hand side of the quadratic constraint (row).

nElemSize

Length of array for non-zero linear terms of the quadratic constraint (row).

pReqSize

Pointer to minimal length of array for non-zero linear terms of the quadratic constraint (row). Can be NULL.

COPT_GetPSDConstr

Synopsis

int COPT_GetPSDConstr(

copt_prob *prob,

int psdConstrIdx,

int *psdColIdx,

int *symMatIdx,

int nColSize,

int *pColReqSize,

int *rowMatIdx,

double *rowMatElem,

double *dRowLower,

double *dRowUpper,

int nElemSize,

int *pReqSize)

Description

Get PSD constraint.

In general, users need to call this function twice to accomplish the task. Fisrtly, by passing NULL to arguments psdColIdx and symMatIdx, we get number of PSD terms by pColReqSize specified by psdConstrIdx, by passing NULL to arguments rowMatIdx and rowMatElem, we get number of linear terms by pReqSize specified by qConstrIdx. Secondly, allocate sufficient memory for the PSD terms and the linear terms, and call this function again to extract the PSD constraint. If the memory of the array of the PSD terms passed to function is not sufficient, then return the first nColSize PSD terms, and the minimal required length of PSD terms by pColReqSize. If the memory of the array of the linear terms passed to function is not sufficient, then return the first nElemSize linear terms, and the minimal required length of linear terms by pReqSize.

Arguments

prob

The COPT problem.

psdConstrIdx

PSD constraint index.

psdColIdx

PSD variable index.

symMatIdx

Symmetric matrix index.

nColSize

Length of array for PSD terms of the PSD constraint.

pColReqSize

Pointer to minimal length of array for PSD terms of the PSD constraint. Can be NULL.

rowMatIdx

Column index of non-zero linear terms of the PSD constraint.

rowMatElem

Values of non-zero linear terms of the PSD constraint.

dRowLower

Pointer to lower bound of the PSD constraint.

dRowUpper

Pointer to upper bound of the PSD constraint.

nElemSize

Length of array for non-zero linear terms of the PSD constraint.

pReqSize

Pointer to minimal length of array for non-zero linear terms of the PSD constraint (row). Can be NULL.

COPT_GetLMIConstr

Synopsis

int COPT_GetLMIConstr(

copt_prob *prob,

int lmiConstrIdx,

int *nDim,

int *nLMILen,

int *colIdx,

int *symMatIdx,

int *constMatIdx,

int nElemSize,

int *pReqSize)

Description

Gets the LMI constraint with the specified index in the model.

Arguments

prob

The COPT problem.

lmiConstrIdx

LMI constraint index.

nDim

Pointer to the dimension of symmetric matrix in the LMI constraint.

nLMILen

Pointer to the flattened length of the LMI constraint.

colIdx

Index of scalar variable in the LMI constraint.

symMatIdx

Index of symmetric coefficient matrix in the LMI constraint.

constMatIdx

Pointer to the index of symmetric constant-term matrix in the LMI constraint.

nElemSize

Length of array for non-zero linear terms of the LMI constraint.

pReqSize

Pointer to minimal length of array for non-zero linear terms of the LMI constraint (row). Can be NULL.

COPT_GetIndicator

Synopsis

int COPT_GetIndicator(

copt_prob *prob,

int rowIdx,

int *binColIdx,

int *binColVal,

int *nRowMatCnt,

int *rowMatIdx,

double *rowMatElem,

char *cRowSense,

double *dRowBound,

int nElemSize,

int *pReqSize)

Description

Get the data of an indicator constraint.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments nRowMatCnt, rowMatIdx and rowMatElem, we get number of non-zeros elements by pReqSize specified by rowIdx. Secondly, allocate sufficient memory for sparse row vector and call this function again to extract data.

If the memory of sparse row vector passed to function is not sufficient, then return the first nElemSize non-zero elements, and the minimal required length of non-zero elements by pReqSize.

Arguments

prob

The COPT problem.

rowIdx

Index of the indicator constraint.

binColIdx

Index of the indicator variable (column).

binColVal

Value of the indicator variable (column).

nRowMatCnt

Number of non-zeros elements in the linear constraint (row).

rowMatIdx

Column index of non-zeros elements in the linear constraint (row).

rowMatElem

Values of non-zero elements in the linear constraint (row).

cRowSense

The sense of the linear constraint (row).

dRowBound

Right hand side of the linear constraint (row).

nElemSize

Length of array for non-zero coefficients.

pReqSize

Pointer to minimal length of array for non-zero coefficients. Can be NULL.

COPT_GetIndicators

Synopsis

int COPT_GetIndicators(

copt_prob *prob,

int nInd,

int *list,

int *indType,

int *binColIdx,

int *binColVal,

int *rowMatBeg,

int *rowMatCnt,

int *rowMatIdx,

double *rowMatElem,

char *cRowSense,

double *dRowBound,

int nElemSize,

int *pReqSize)

Description

Get the data of a set of indicator constraints.

In general, users need to call this function twice to accomplish the task. Firstly, by passing NULL to arguments rowMatBeg, rowMatCnt, rowMatIdx , we get number of non-zeros elements by pReqSize specified by nInd and list. Secondly, allocate sufficient memory for CRS-format matrix and call this function again to extract coefficient matrix.

If the memory of coefficient matrix passed to function is not sufficient, then return the first nElemSize non-zero elements, and the minimal required length of non-zero elements by pReqSize. If list is NULL, then the first nInd rows will be returned.

Arguments

prob

The COPT problem.

nInd

Number of indicator constraints (rows).

list

Index of indicator constraints. Can be NULL.

indType

Type of indicator constraints. Please refer to Indicator constraint types for possible values.

binColIdx

Index of the indicator variable (column).

binColVal

Value of the indicator variable (column).

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix of indcator constrants in compressed row storage (CRS) format. Please see other information of COPT_LoadProb for an example of the CRS format.

cRowSense

The sense of the linear constraint (row).

dRowBound

Right hand side of the linear constraint (row).

nElemSize

Length of array for non-zero coefficients.

pReqSize

Pointer to minimal length of array for non-zero coefficients. Can be NULL.

COPT_GetColIdx

Synopsis

int COPT_GetColIdx(copt_prob *prob, const char *colName, int *p_iCol)

Description

Get index of column by name.

Arguments

prob

The COPT problem.

colName

Name of column.

p_iCol

Pointer to index of column.

COPT_GetPSDColIdx

Synopsis

int COPT_GetPSDColIdx(copt_prob *prob, const char *psdColName, int *p_iPSDCol)

Description

Get index of PSD variable by name.

Arguments

prob

The COPT problem.

psdColName

Name of PSD variable.

p_iPSDCol

Pointer to index of PSD variable.

COPT_GetRowIdx

Synopsis

int COPT_GetRowIdx(copt_prob *prob, const char *rowName, int *p_iRow)

Description

Get index of row by name.

Arguments

prob

The COPT problem.

rowName

Name of row.

p_iRow

Pointer to index of row.

COPT_GetQConstrIdx

Synopsis

int COPT_GetQConstrIdx(copt_prob *prob, const char *qConstrName, int *p_iQConstr)

Description

Get index of quadratic constraint by name.

Arguments

prob

The COPT problem.

qConstrName

Name of quadratic constraint.

p_iQConstr

Pointer to index of quadratic constraint.

COPT_GetPSDConstrIdx

Synopsis

int COPT_GetPSDConstrIdx(copt_prob *prob, const char *psdConstrName, int *p_iPSDConstr)

Description

Get index of PSD constraint by name.

Arguments

prob

The COPT problem.

psdConstrName

Name of PSD constraint.

p_iPSDConstr

Pointer to index of PSD constraint.

COPT_GetLMIConstrIdx

Synopsis

int COPT_GetLMIConstrIdx(copt_prob *prob, const char *lmiConstrName, int *p_iLMIConstr)

Description

Get index of LMI constraint by name.

Arguments

prob

The COPT problem.

lmiConstrName

Name of LMI constraint.

p_iLMIConstr

Pointer to index of LMI constraint.

COPT_GetIndicatorIdx

Synopsis

int COPT_GetIndicatorIdx(copt_prob *prob, const char *indicatorName, int *p_iIndicator)

Description

Get index of indicator constraint by name.

Arguments

prob

The COPT problem.

indicatorName

Name of indicator constraint.

p_iIndicator

Pointer to index of indicator constraint.

COPT_GetColInfo

Synopsis

int COPT_GetColInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)

Description

Get information of column. If list is NULL, then information of the first num columns will be returned.

Arguments

prob

The COPT problem.

infoName

Name of information. Please refer to Information for supported information.

num

Number of columns.

list

Index of columns. Can be NULL.

info

Array of information.

COPT_GetPSDColInfo

Synopsis

int COPT_GetPSDColInfo(copt_prob *prob, const char *infoName, int iCol, double *info)

Description

Get information of PSD variable.

Arguments

prob

The COPT problem.

infoName

Name of information. Please refer to Information for supported information.

iCol

Index of PSD variable.

info

Array of information.

COPT_GetRowInfo

Synopsis

int COPT_GetRowInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)

Description

Get information of row. If list is NULL, then information of the first num rows will be returned.

Arguments

prob

The COPT problem.

infoName

Name of information. Please refer to Information for supported information.

num

Number of rows.

list

Index of rows. Can be NULL.

info

Array of information.

COPT_GetQConstrInfo

Synopsis

int COPT_GetQConstrInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)

Description

Get information of quadratic constraints. If list is NULL, then information of the first num quadratic constraints will be returned.

Arguments

prob

The COPT problem.

infoName

Name of information. Please refer to Information for supported information.

num

Number of quadratic constraints.

list

Index of quadratic constraints. Can be NULL.

info

Array of information.

COPT_GetPSDConstrInfo

Synopsis

int COPT_GetPSDConstrInfo(copt_prob *prob, const char *infoName, int num, const int* list, double *info)

Description

Get information of PSD constraints. If list is NULL, then information of the first num PSD constraints will be returned.

Arguments

prob

The COPT problem.

infoName

Name of information. Please refer to Information for supported information.

num

Number of PSD constraints.

list

Index of PSD constraints. Can be NULL.

info

Array of information.

COPT_GetLMIConstrInfo

Synopsis

int COPT_GetLMIConstrInfo(copt_prob *prob, const char *infoName, int iLMI, double *info)

Description

Get a set of information about LMI constraints.

Arguments

prob

The COPT problem.

infoName

Name of information. Possible values are: COPT_DBLINFO_SLACK and COPT_DBLINFO_DUAL.

iLMI

The index of the LMI constraint whose information is to be retrieved.

info

Array of information.

COPT_GetColType

Synopsis

int COPT_GetColType(copt_prob *prob, int num, const int *list, char *type)

Description

Get types of columns. If list is NULL, then types of the first num columns will be returned.

Arguments

prob

The COPT problem.

num

Number of columns.

list

Index of columns. Can be NULL.

type

Types of columns.

COPT_GetColBasis

Synopsis

int COPT_GetColBasis(copt_prob *prob, int num, const int *list, int *colBasis)

Description

Get basis status of columns. If list is NULL, then basis status of the first num columns will be returned.

Arguments

prob

The COPT problem.

num

Number of columns.

list

Index of columns. Can be NULL.

colBasis

Basis status of columns.

COPT_GetRowBasis

Synopsis

int COPT_GetRowBasis(copt_prob *prob, int num, const int *list, int *rowBasis)

Description

Get basis status of rows. If list is NULL, then basis status of the first num rows will be returned.

Arguments

prob

The COPT problem.

num

Number of rows.

list

Index of rows. Can be NULL.

rowBasis

Basis status of rows.

COPT_GetQConstrSense

Synopsis

int COPT_GetQConstrSense(copt_prob *prob, int num, const int *list, char *sense)

Description

Get senses of quadratic constraints. If list is NULL, then types of the first num quadratic constraints will be returned.

Arguments

prob

The COPT problem.

num

Number of quadratic constraints.

list

Index of quadratic constraints. Can be NULL.

sense

Array of senses.

COPT_GetQConstrRhs

Synopsis

int COPT_GetQConstrRhs(copt_prob *prob, int num, const int *list, double *rhs)

Description

Get RHS of quadratic constraints. If list is NULL, then types of the first num quadratic constraints will be returned.

Arguments

prob

The COPT problem.

num

Number of quadratic constraints.

list

Index of quadratic constraints. Can be NULL.

rhs

Array of RHS.

COPT_GetColName

Synopsis

int COPT_GetColName(copt_prob *prob, int iCol, char *buff, int buffSize, int *pReqSize)

Description

Get name of column by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iCol

Index of column.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetPSDColName

Synopsis

int COPT_GetPSDColName(copt_prob *prob, int iPSDCol, char *buff, int buffSize, int *pReqSize)

Description

Get name of PSD variable by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iPSDCol

Index of PSD variable.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetRowName

Synopsis

int COPT_GetRowName(copt_prob *prob, int iRow, char *buff, int buffSize, int *pReqSize)

Description

Get name of row by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iRow

Index of row.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetQConstrName

Synopsis

int COPT_GetQConstrName(copt_prob *prob, int iQConstr, char *buff, int buffSize, int *pReqSize)

Description

Get name of quadratic constraint by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iQConstr`

Index of quadratic constraint.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetPSDConstrName

Synopsis

int COPT_GetPSDConstrName(copt_prob *prob, int iPSDConstr, char *buff, int buffSize, int *pReqSize)

Description

Get name of PSD constraint by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iPSDConstr`

Index of PSD constraint.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetLMIConstrName

Synopsis

int COPT_CALL COPT_GetLMIConstrName(copt_prob *prob, int iLMIConstr, char *buff, int buffSize, int *pReqSize)

Description

Get name of LMI constraint by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iLMIConstr

Index of LMI constraint.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetIndicatorName

Synopsis

int COPT_GetIndicatorName(copt_prob *prob, int iIndicator, char *buff, int buffSize, int *pReqSize)

Description

Get name of indicator constraints by index. If memory of buff is not sufficient, then return the first buffSize length of sub-string, and the length of name requested by pReqSize. If buff is NULL, then we can get the length of name requested by pReqSize.

Arguments

prob

The COPT problem.

iIndicator

Index of indicator constraint.

buff

Buffer for storing name.

buffSize

Length of the buffer.

pReqSize

Length of the requested name. Can be NULL.

COPT_GetLMIConstrRhs

Synopsis

int COPT_GetLMIConstrRhs(copt_prob *prob, int num, const int *list, int *constMatIdx)

Description

Get the constant-term symmetric matrix of num LMI constraints.

Arguments

prob

The COPT problem.

num

Number of LMI constraints.

list

Index of LMI constraints.

constMatIdx

Index of constant-term symmetric in the LMI constraints.

Accessing and setting parameters

COPT_SetIntParam

Synopsis

int COPT_SetIntParam(copt_prob *prob, const char *paramName, int intParam)

Description

Sets an integer parameter.

Arguments

prob

The COPT problem.

paramName

The name of the integer parameter.

intParam

The value of the integer parameter.

COPT_GetIntParam, COPT_GetIntParamDef/Min/Max

Synopsis

int COPT_GetIntParam(copt_prob *prob, const char *paramName, int *p_intParam)

int COPT_GetIntParamDef(copt_prob *prob, const char *paramName, int *p_intParam)

int COPT_GetIntParamMin(copt_prob *prob, const char *paramName, int *p_intParam)

int COPT_GetIntParamMax(copt_prob *prob, const char *paramName, int *p_intParam)

Description

Gets the

current

default

minimal

maximal

value of an integer parameter.

Arguments

prob

The COPT problem.

paramName

The name of the integer parameter.

p_intParam

Pointer to the value of the integer parameter.

COPT_SetDblParam

Synopsis

int COPT_SetDblParam(copt_prob *prob, const char *paramName, double dblParam)

Description

Sets a double parameter.

Arguments

prob

The COPT problem.

paramName

The name of the double parameter.

dblParam

The value of the double parameter.

COPT_GetDblParam, COPT_GetDblParamDef/Min/Max

Synopsis

int COPT_GetDblParam(copt_prob *prob, const char *paramName, double *p_dblParam)

int COPT_GetDblParamDef(copt_prob *prob, const char *paramName, double *p_dblParam)

int COPT_GetDblParamMin(copt_prob *prob, const char *paramName, double *p_dblParam)

int COPT_GetDblParamMax(copt_prob *prob, const char *paramName, double *p_dblParam)

Description

Gets the

current

default

minimal

maximal

value of a double parameter.

Arguments

prob

The COPT problem.

paramName

The name of the double parameter.

p_dblParam

Pointer to the value of the double parameter.

COPT_ResetParam

Synopsis

int COPT_ResetParam(copt_prob *prob)

Description

Reset parameters to default settings.

Arguments

prob

The COPT problem.

COPT_WriteParam

Synopsis

int COPT_WriteParam(copt_prob *prob, const char *parfilename)

Description

Writes user defined parameters to a file. This API function will write out all the parameters that are different from their default values.

Arguments

prob

The COPT problem.

parfilename

The path to the parameter file.

COPT_WriteParamStr

Synopsis

int COPT_WriteParamStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)

Description

Writes the modified parameters to a string buffer.

Arguments

prob

The COPT problem.

str

String buffer of modified parameters.

nStrSize

The size of string buffer.

pReqSize

Minimum space requirement of string buffer for modified parameters.

COPT_ReadParam

Synopsis

int COPT_ReadParam(copt_prob *prob, const char *parfilename)

Description

Reads and applies parameters settings as defined in the parameter file.

Arguments

prob

The COPT problem.

parfilename

The path to the parameter file.

COPT_ReadParamStr

Synopsis

int COPT_ReadParamStr(copt_prob *prob, const char *strParam)

Description

Read parameter settings from string buffer, and set parameters in COPT.

Arguments

prob

The COPT problem.

strParam

String buffer of parameter settings.

Accessing attributes

COPT_GetIntAttr

Synopsis

int COPT_GetIntAttr(copt_prob *prob, const char *attrName, int *p_intAttr)

Description

Gets the value of an integer attribute.

Arguments

prob

The COPT problem.

attrName

The name of the integer attribute.

p_intAttr

Pointer to the value of the integer attribute.

COPT_GetDblAttr

Synopsis

int COPT_GetDblAttr(copt_prob *prob, const char *attrName, int *p_dblAttr)

Description

Gets the value of an double attribute.

Arguments

prob

The COPT problem.

attrName

The name of the double attribute.

p_dblAttr

Pointer to the value of the double attribute.

Logging utilities

COPT_SetLogFile

Synopsis

int COPT_SetLogFile(copt_prob *prob, char *logfilename)

Description

Set log file for the problem.

Arguments

prob

The COPT problem.

logfilename

The path to the log file.

COPT_SetLogCallback

Synopsis

int COPT_SetLogCallback(copt_prob *prob, void (*logcb)(char *msg, void *userdata), void *userdata)

Description

Set message callback for the problem.

Arguments

prob

The COPT problem.

logcb

Callback function for message.

userdata

User defined data. The data will be passed to the solver without modification.

MIP start utilities

COPT_AddMipStart

Synopsis

int COPT_AddMipStart(copt_prob *prob, int num, const int *list, double *colVal)

Description

Add MIP start information for the problem. If list is NULL, then information of the first num columns will be added.

One MIP start information will be added for each call to this function.

Arguments

prob

The COPT problem.

num

Number of variables (columns).

list

Index of variables (columns). Can be NULL.

colVal

MIP start information.

COPT_ReadMst

Synopsis

int COPT_ReadMst(copt_prob *prob, const char *mstfilename)

Description

Read MIP start information from file, and used as initial solution for the problem.

Arguments

prob

The COPT problem.

mstfilename

The path to the MIP start file.

COPT_WriteMst

Synopsis

int COPT_WriteMst(copt_prob *prob, const char *mstfilename)

Description

Write solution or existed MIP start information in problem to file.

Arguments

prob

The COPT problem.

mstfilename

The path to the MIP start file.

IIS utilities

COPT_ComputeIIS

Synopsis

int COPT_ComputeIIS(copt_prob *prob)

Description

Compute IIS (Irreducible Inconsistent Subsystem) for infeasible problem.

Arguments

prob

The COPT problem.

COPT_GetColLowerIIS

Synopsis

int COPT_GetColLowerIIS(copt_prob *prob, int num, const int *list, int *colLowerIIS)

Description

Get IIS status of lower bounds of columns. If list is NULL, then IIS status of the first num columns will be returned.

Arguments

prob

The COPT problem.

num

Number of columns.

list

Index of columns. Can be NULL.

colLowerIIS

IIS status of lower bounds of columns.

COPT_GetColUpperIIS

Synopsis

int COPT_GetColUpperIIS(copt_prob *prob, int num, const int *list, int *colUpperIIS)

Description

Get IIS status of upper bounds of columns. If list is NULL, then IIS status of the first num columns will be returned.

Arguments

prob

The COPT problem.

num

Number of columns.

list

Index of columns. Can be NULL.

colUpperIIS

IIS status of upper bounds of columns.

COPT_GetRowLowerIIS

Synopsis

int COPT_GetRowLowerIIS(copt_prob *prob, int num, const int *list, int *rowLowerIIS)

Description

Get IIS status of lower bounds of rows. If list is NULL, then IIS status of the first num rows will be returned.

Arguments

prob

The COPT problem.

num

Number of rows.

list

Index of rows. Can be NULL.

rowLowerIIS

IIS status of lower bounds of rows.

COPT_GetRowUpperIIS

Synopsis

int COPT_GetRowUpperIIS(copt_prob *prob, int num, const int *list, int *rowUpperIIS)

Description

Get IIS status of upper bounds of rows. If list is NULL, then IIS status of the first num rows will be returned.

Arguments

prob

The COPT problem.

num

Number of rows.

list

Index of rows. Can be NULL.

rowUpperIIS

IIS status of upper bounds of rows.

COPT_GetSOSIIS

Synopsis

int COPT_GetSOSIIS(copt_prob *prob, int num, const int *list, int *sosIIS)

Description

Get IIS status of SOS constraints. If list is NULL, then IIS status of the first num SOS constraints will be returned.

Arguments

prob

The COPT problem.

num

Number of SOS constraints.

list

Index of SOS constraints. Can be NULL.

sosIIS

IIS status of SOS constraints.

COPT_GetIndicatorIIS

Synopsis

int COPT_GetIndicatorIIS(copt_prob *prob, int num, const int *list, int *indicatorIIS)

Description

Get IIS status of indicator constraints. If list is NULL, then IIS status of the first num indicator constraints will be returned.

Arguments

prob

The COPT problem.

num

Number of indicator constraints.

list

Index of indicator constraints. Can be NULL.

indicatorIIS

IIS status of indicator constraints.

Feasibility relaxation utilities

COPT_FeasRelax

Synopsis

int COPT_FeasRelax(copt_prob *prob, double *colLowPen, double *colUppPen, double *rowBndPen, double *rowUppPen)

Description

Compute feasibility relaxation to infeasible problem.

Arguments

prob

The COPT problem.

colLowPen

Penalty for lower bounds of columns. If NULL, then no relaxation for lower bounds of columns are allowed; If penalty in colLowPen is COPT_INFINITY, then no relaxation is allowed for corresponding bound.

colUppPen

Penalty for upper bounds of columns. If NULL, then no relaxation for upper bounds of columns are allowed; If penalty in colUppen is COPT_INFINITY, then no relaxation is allowed for corresponding bound.

rowBndPen

Penalty for bounds of rows. If NULL, then no relaxation for bounds of rows are allowed; If penalty in rowBndPen is COPT_INFINITY, then no relaxation is allowed for corresponding bound.

rowUppPen

Penalty for upper bounds of rows. If problem has two-sided rows, and rowUppPen is not NULL, then rowUppPen is penalty for upper bounds of rows; If penalty in rowUppPen is COPT_INFINITY, then no relaxation is allowed for corresponding bound.

Note: Normally, just set rowUppPen to NULL.

COPT_WriteRelax

Synopsis

int COPT_WriteRelax(copt_prob *prob, const char *relaxfilename)

Description

Write feasrelax problem to file.

Arguments

prob

The COPT problem.

relaxfilename

Name of feasrelax problem file.

Parameter tuning utilities

COPT_Tune

Synopsis

int COPT_Tune(copt_prob *prob)

Description

Parameter tuning of the model.

Arguments

prob

COPT model.

COPT_LoadTuneParam

Synopsis

int COPT_LoadTuneParam(copt_prob *prob, int idx)

Description

Load the parameter tuning results of the specified number into the model.

Arguments

prob

COPT model.

idx

The number of the parameter tuning result.

COPT_ReadTune

Synopsis

int COPT_ReadTune(copt_prob *prob, const char *tunefilename)

Description

Read the parameter combination to be tuned from the tuning file to the model.

Arguments

prob

COPT model.

tunefilename

Tuning file names.

COPT_WriteTuneParam

Synopsis

int COPT_WriteTuneParam(copt_prob *prob, int idx, const char *parfilename)

Description

Output the parameter tuning result of the specified number to the parameter file.

Arguments

prob

COPT model.

idx

The number of the parameter tuning result.

parfilename

parameter file name.

Callback utilities

Certain callback utilities methods can only be called in certain contexts, which are listed below:

Table 44 Callback utilities

Context

Methods

COPT_CBCONTEXT_INCUMBENT

COPT_AddCallbackSolution, COPT_GetCallbackInfo

COPT_CBCONTEXT_MIPSOL

COPT_AddCallbackLazyConstr, COPT_AddCallbackLazyConstrs, COPT_AddCallbackSolution, COPT_GetCallbackInfo

COPT_CBCONTEXT_MIPRELAX

COPT_AddCallbackUserCut, COPT_AddCallbackUserCuts, COPT_AddCallbackSolution, COPT_GetCallbackInfo

COPT_CBCONTEXT_MIPNODE

COPT_AddCallbackSolution, COPT_GetCallbackInfo

COPT_AddLazyConstr

Synopsis

int COPT_AddLazyConstr(

copt_prob *prob,

int nRowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense,

double dRowBound,

double dRowUpper,

const char *rowName)

Description

Add a lazy constraint to the MIP model.

Arguments

prob

The COPT problem.

nRowMatCnt

Number of non-zero elements in the lazy constraint.

rowMatIdx

Column index of non-zero elements in the lazy constraint.

rowMatElem

Values of non-zero elements in the lazy constraint.

cRowSense

The sense of the new lazy constraint.

Please refer to Constraint senses for all the supported types.

If cRowSense is 0, then dRowBound and dRowUpper will be treated as lower and upper bounds for the constraint. This is the recommended method for defining constraints.

If cRowSense is provided, then dRowBound and dRowUpper will be treated as RHS and range for the constraint. In this case, dRowUpper is only required when cRowSense = COPT_RANGE, where

lower bound is dRowBound - dRowUpper

upper bound is dRowBound

dRowBound

Lower bound or RHS of the lazy constraint.

dRowUpper

Upper bound or range of the lazy constraint.

rowName

The name of the lazy constraint. Can be NULL.

COPT_AddLazyConstrs

Synopsis

int COPT_AddLazyConstrs(

copt_prob *prob,

int nAddRow,

const int *rowMatBeg,

const int *rowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

const char *rowSense,

const double *rowBound,

const double *rowUpper,

char const *const *rowNames)

Description

Add a set of lazy constraints to the MIP model.

Arguments

prob

The COPT problem.

nAddRow

Number of new lazy constraints.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

rowSense

Senses of new lazy constraints.

Please refer to Constraint senses for all the supported types.

If rowSense is NULL, then rowBound and rowUpper will be treated as lower and upper bounds for constraints. This is the recommended method for defining constraints.

If rowSense is provided, then rowBound and rowUpper will be treated as RHS and range for constraints. In this case, rowUpper is only required when there are COPT_RANGE constraints, where the

lower bound is rowBound[i] - fabs(rowUpper[i])

upper bound is rowBound[i]

rowBound

Lower bounds or RHS of new lazy constraints.

rowUpper

Upper bounds or range of new lazy constraints.

rowNames

Names of new lazy constraints. Can be NULL.

COPT_AddUserCut

Synopsis

int COPT_AddUserCut(

copt_prob* prob,

int nRowMatCnt,

const int* rowMatIdx,

const double* rowMmatElem,

char cRowSense,

double dRowBound,

double dRowUpper,

const char* rowName)

Description

Add a user cut to the MIP model.

Arguments

prob

The COPT problem.

nRowMatCnt

Number of non-zero elements in the user cut.

rowMatIdx

Column index of non-zero elements in the user cut.

rowMatElem

Values of non-zero elements in the user cut.

cRowSense

The sense of the user cut.

Please refer to Constraint senses for all the supported types.

If cRowSense is 0, then dRowBound and dRowUpper will be treated as lower and upper bounds for the constraint. This is the recommended method for defining constraints.

If cRowSense is provided, then dRowBound and dRowUpper will be treated as RHS and range for the constraint. In this case, dRowUpper is only required when cRowSense = COPT_RANGE, where

lower bound is dRowBound - dRowUpper

upper bound is dRowBound

dRowBound

Lower bound or RHS of the user cut.

dRowUpper

Upper bound or range of the user cut.

rowName

The name of the user cut. Can be NULL.

COPT_AddUserCuts

Synopsis

int COPT_CALL COPT_AddUserCuts(

copt_prob *prob,

int nAddRow,

const int *rowMatBeg,

const int *rowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

const char *rowSense,

const double *rowBound,

const double *rowUpper,

char const *const *rowNames)

Description

Add a set of user cuts to the MIP model.

Arguments

prob

The COPT problem.

nAddRow

Number of new user cuts.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

rowSense

Senses of new user cuts.

Please refer to Constraint senses for all the supported types.

If rowSense is NULL, then rowBound and rowUpper will be treated as lower and upper bounds for constraints. This is the recommended method for defining constraints.

If rowSense is provided, then rowBound and rowUpper will be treated as RHS and range for constraints. In this case, rowUpper is only required when there are COPT_RANGE constraints, where the

lower bound is rowBound[i] - fabs(rowUpper[i])

upper bound is rowBound[i]

rowBound

Lower bounds or RHS of new user cuts.

rowUpper

Upper bounds or range of new user cuts.

rowNames

Names of new user cuts. Can be NULL.

COPT_SetCallback

Synopsis

int COPT_SetCallback(

copt_prob *prob,

int (COPT_CALL *cb)(copt_prob *prob, void *cbdata, int cbctx, void *userdata),

int cbctx,

void *userdata)

Description

Set the callback function of the model.

Arguments

prob

The COPT problem.

cb

Callback function.

cbctx

Callback context. Please refer to Callback context .

userdata

User defined data. The data will be passed to the solver without modification.

COPT_GetCallbackInfo

Synopsis

int COPT_GetCallbackInfo(void *cbdata, const char* cbinfo, void *p_val)

Description

Retrieve the value of the specified callback information.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_GetCallbackInfo().

cbinfo

The name of the callback information. Please refer to Callback information for possible values.

p_val

Pointer to the value of the callback information.

COPT_AddCallbackSolution

Synopsis

int COPT_AddCallbackSolution(void *cbdata, const double *sol, double* p_objval)

Description

Set feasible solutions for the specified variables.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_AddCallbackSolution().

sol

The solution vector.

p_objval

Pointer to the objective value for solution.

COPT_AddCallbackUserCut

Synopsis

int COPT_AddCallbackUserCut(

void *cbdata,

int nRowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense,

double dRowRhs)

Description

Add a user cut to the MIP model from within the callback function.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_AddCallbackUserCut().

nRowMatCnt

Number of non-zero elements in the user cut.

rowMatIdx

Column index of non-zero elements in the user cut.

rowMatElem

Values of non-zero elements in the user cut.

cRowSense

The sense of the new user cut. It supports for LESS_EQUAL, GREATER_EQUAL, EQUAL and FREE .

The user cut added from within callback can only have a single bound.

dRowRhs

RHS of the user cut.

COPT_AddCallbackUserCuts

Synopsis

int COPT_AddCallbackUserCuts(

void *cbdata,

int nAddRow,

const int *rowMatBeg,

const int *rowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

const char *rowSense,

const double *rowRhs)

Description

Add a set of user cuts to the MIP model from within the callback function.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_AddCallbackUserCuts().

nAddRow

Number of new user cuts.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

rowSense

Senses of new user cuts. It supports for LESS_EQUAL, GREATER_EQUAL, EQUAL and FREE .

The user cuts added from within callback can only have single bounds.

rowRhs

RHS of new user cuts.

COPT_AddCallbackLazyConstr

Synopsis

int COPT_AddCallbackLazyConstr(

void *cbdata,

int nRowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

char cRowSense,

double dRowRhs)

Description

Add a lazy constraint to the MIP model from within the callback function.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_AddCallbackLazyConstr().

nRowMatCnt

Number of non-zero elements in the lazy constraint.

When nRowMatCnt<=0, the MIP candidate solution will be directly rejected without adding a lazy constraint. And rowMatIdx, rowMatElem, cRowSense and dRowRhs will be ignored.

rowMatIdx

Column index of non-zero elements in the lazy constraint.

rowMatElem

Values of non-zero elements in the lazy constraint.

cRowSense

The sense of new lazy constraint. It supports for LESS_EQUAL, GREATER_EQUAL, EQUAL and FREE .

The lazy constraint added from within callback can only have a single bound.

dRowRhs

RHS of the lazy constraint.

COPT_AddCallbackLazyConstrs

Synopsis

int COPT_AddCallbackLazyConstrs(

void *cbdata,

int nAddRow,

const int *rowMatBeg,

const int *rowMatCnt,

const int *rowMatIdx,

const double *rowMatElem,

const char *rowSense,

const double *rowRhs)

Description

Add a set of lazy constraints to the MIP model from within the callback function.

Arguments

cbdata

The cbdata argument that was passed into the user callback by COPT. This argument must be passed unmodified from the user callback to COPT_AddCallbackLazyConstrs().

nAddRow

Number of new lazy constraints.

When nAddRow<=0, the MIP candidate solution will be directly rejected without adding lazy constraints.

And other parameters(apart from cbdata) will be ignored.

rowMatBeg, rowMatCnt, rowMatIdx and rowMatElem

Defines the coefficient matrix in compressed row storage (CRS) format. The CRS format is similar to the CCS format described in the other information of COPT_LoadProb.

rowSense

Senses of new lazy constraints. It supports for LESS_EQUAL, GREATER_EQUAL, EQUAL and FREE .

The lazy constraints added from within callback can only have single bounds.

rowRhs

RHS of new lazy constraints.

Note: If the user gives a solution to COPT in a callback, the user should ensure that this fulfills the lazy constraint callback since that won’t be called for user-provided solutions.

Other API functions

COPT_GetBanner

Synopsis

int COPT_GetBanner(char *buff, int buffSize)

Description

Obtains a C-style string as banner, which describes the COPT version information.

Arguments

buff

A buffer for holding the resulting string.

buffSize

The size of the above buffer.

COPT_GetRetcodeMsg

Synopsis

int COPT_GetRetcodeMsg(int code, char *buff, int buffSize)

Description

Obtains a C-style string which explains a return code value in plain text.

Arguments

code

The return code from a COPT API function.

buff

A buffer for holding the resulting string.

buffSize

The size of the above buffer.

COPT_Interrupt

Synopsis

int COPT_Interrupt(copt_prob *prob)

Description

Interrupt solving process of current problem.

Arguments

prob

The COPT problem.