Descriptions of the C API functions whose names begin with "ekk_get" and "ekk_set" are given. Each entry consists of: the name of the function, its C function prototype, a brief description of each item in the calling sequence, and a description of what the function does and what it returns. The following alphabetized list provides links to these descriptions. in the list. To conserve space in this list, entries for functions that "get" and "set" a quantity are of the form:
Name of quantity | get | set | ||||||
entries for functions that only "get" a quantity are of the form: | Name of quantity | get | ||||||
and entries for functions that only "set" a quantity are of the form: | Name of quantity | set |
C API functions whose names do not begin with "ekk_get" or "ekk_set" are documented in a separate file named featCMD2.htm. Finally, in the documentation below, the names of the functions themselves (ekk_...) are hypertext links back to the beginning of the list.
Inumberuser - Rbbcutoff | Rbestest - UserData | |||||||
Cbasis | get |   set | Cbound | get |   set | Cname | get |   set |
Cobjective | get |   set | Collower | get |   set | Colrcosts | get |   set |
Colsol | get |   set | Colstat | get |   set | Column | get |   set |
ColumnsNonBasicAtLower | set | ColumnsNonBasicAtUpper | set | Colupper | get |   set | ||
CompressOff | set | CompressOn | set | Crange | get |   set | ||
Crhs | get |   set | Debug | set | Idensecol | get |   set | |
Idevexmode | get |   set | Ifastinteger | get |   set | Ifastits | get |   set |
Iheurpass | get |   set | Iintmask | get |   set | Iiterbnum | get |   set |
Iiternum | get |   set | Iiterufreq | get |   set | Ilinelen | get |   set |
Ilogfreq | get |   set | Iloglevel | get |   set | Ilpdcflag | get |   set |
Imajorits | get |   set | Imaxcols | get |   set | Imaxfactor | get |   set |
Imaxfactorsize | get |   set | Imaxiter | get |   set | Imaxiterb | get |   set |
Imaxnodes | get |   set | Imaxrows | get |   set | Imaxsols | get |   set |
Imiplength | get |   set | Imodelmask | get |   set | Imsgpos | get |   set |
Cbasis - Imsgpos | Rbestest - UserData | |||||||
Inumberuser | get |   | Inumblocks | get |   | Inumchar | get |   set |
Inumcols | get |   set | Inumdinf | get |   set | Inumelq | get |   |
Inumels | get |   | Inumints | get |   | Inumnodes | get |   |
Inumpinf | get |   set | Inumquadraticblocks | get |   | Inumrows | get |   set |
Inumsets | get |   | Inumsols | get |   set | Inumunsat | get |   set |
Ioneobj | get |   set | Iordunit | get |   set | Ipagelines | get |   set |
Ipossbasis | get |   set | Ipricetype | get |   set | Iprintsens | get |   set |
Iprobstat | get |   set | Iprobstat2 | get |   | Iprtinfomask | get |   set |
Iqparmaxiter | get |   set | Iqparnumiter | get |   | Iroword | get |   set |
Isolmask | get |   set | Istopmask | get |   set | Istrategy | get |   set |
Isupertol | get |   set | Ithreshold | get |   set | IuseRowCopy | get |   set |
LogfileFilePointer | get |   set | LogfileName | get |   set | Maximize | set | |
Minimize | set | NumberBasicColumns | get |   | NumberBasicRows | get |   | |
Objective | get |   set | Priority | set | Rbbcutoff | get |   set | |
Cbasis - Imsgpos | Inumberuser - Rbbcutoff | |||||||
Rbestest | get |   set | Rbestposs | get |   set | Rbestsol | get |   set |
Rchangeweight | get |   set | Rdegscale | get |   set | Rdensethr | get |   set |
RdualPerturbation | get |   set | Rdweight | get |   set | Rimprove | get |   set |
Riweight | get |   set | Rmaxmin | get |   set | Rmulinfac | get |   set |
Rnetsamp | get |   set | RobjectiveOffset | get |   set | Robjvalue | get |   set |
Row | get |   set | Rowacts | get |   set | Rowduals | get |   set |
Rowlower | get |   set | RowsNonBasicAtLower | set | RowsNonBasicAtUpper | set | ||
Rowstat | get |   set | Rowupper | get |   set | Rpdgaptol | get |   set |
Rpertdiag | get |   set | RprimalPerturbation | get |   set | Rprintcpu | get |   set |
Rpweight | get |   set | RregularizedDelta | get |   set | RregularizedGamma | get |   set |
Rsumdinf | get |   set | Rsumpinf | get |   set | Rtarget | get |   set |
Rthreshold | get |   set | Rtoldinf | get |   set | Rtolint | get |   set |
Rtolmps | get |   set | Rtolpinf | get |   set | SOSInfo | get |   |
UserData | set | Bottom of page | ||||||
Cbasis - Imsgpos Inumberuser - Rbbcutoff Rbestest - UserData |
Function prototype:
const char * ekk_getCbasis( EKKModel * model );
This function
returns a pointer to the current basis name. This is set by
ekk_importBasis or
ekk_setCbasis.
If an error is encountered, ekk_getCbasis returns a null pointer.
Function prototype:
const char * ekk_getCbound( EKKModel * model );
This function
returns a pointer to the current bound name. This is set by
ekk_importModel or
ekk_setCbound.
If an error is encountered, ekk_getCbound returns a null pointer.
Function prototype:
const char * ekk_getCname( EKKModel * model );
This function
returns a pointer to the current model name. This is printed in messages referring to the model. This is set by
ekk_importModel or
ekk_setCname. It may also be set by
ekk_newModel.
If an error is encountered, ekk_getCname returns a null pointer.
Function prototype:
const char * ekk_getCobjective( EKKModel * model );
This function
returns a pointer to the current name of the objective row. This is set by
ekk_importModel or
ekk_setCobjective.
If an error is encountered, ekk_getCobjective returns a null pointer.
Function prototype:
double * ekk_getCollower( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible. That is: initially the user must name the allocated space; the user can modify the
contents of this space at will; and ultimately the user must free the space by calling ekk_free. The purpose
of allocating this space is to establish an addressable place to hold user accessible data from the model. The reason that Optimization Library
functions allocate such space, instead of letting the user do so with the native C malloc command, is that the mechanics of dynamic memory support in C
is implementation dependent, and user executable application code might be incompatible in this respect with OSL executable functions. The same logic applies
to the use of the OSL function ekk_free in place of the corresponding native C free command.
If no error has occurred, ekk_getCollower returns a vector containing the column lower bounds from the model
identified by model. The length of this vector is the number of rows in the constraint matrix.
If an error occurred, ekk_getCollower returns a null pointer.
Function prototype:
double * ekk_getColsol( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getColsol returns a vector containing the column activities from the model identified by model.
The length of this vector is the number of columns in the constraint matrix. If an error occurred, ekk_getColsol returns a null pointer.
Function prototype:
double * ekk_getColupper( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getColupper returns a vector containing the column upper bounds from the model identified by model.
The length of this vector is the number of columns in the constraint matrix. If an error occurred, ekk_getColupper returns a null pointer.
Function prototype:
double * ekk_getColrcosts( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
of no error has occurred, ekk_getColrcosts returns a vector containing the column reduced costs from the model identified by model.
The length of this vector is the number of columns in the constraint matrix. If an error occurred, ekk_getColrcosts returns a null pointer.
Function prototype:
int * ekk_getColstat( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above). If no
error has occurred, ekk_getColstat returns a vector containing the column status elements (described in the next paragraph)
from the model identified by model. The length of this vector is the number of columns in the constraint matrix. If an error occurred,
ekk_getColstat returns a null pointer.
The row and column status elements are 32 bit integers. The bits are numbered from 0 to 31, with the lowest ordered bit numbered 0.
All 32 bits are used internally by Optimization Library functions, but only the three high order bits are important to the user.
If the 31 bit is 1, the corresponding variable is basic (i.e., row logical for a row,
or structural for a column). If the 31 bit is 1, then the remaining bits are ignored.
If the 30 bit is 1, then the row or column activity may go down.
If the 29 bit is 1, then the row or column activity may go up.
In practice this translates into the following.
For basic variables:
The variable will have the basic bit (#31) equal to 1.
For nonbasic variables:
A variable at, or above, its upper bound will have the down bit (#30) equal to 1.
A variable at, or below, its lower bound will have the up bit (#29) equal to 1.
A variable between its bounds will have both the up and down bits equal to 1.
A free variable at zero will have both the up and down bits equal to 1.
A fixed variable, at its bound, will have both these bits equal to 0.
Note: | Superbasic variables (that is, variables that are neither basic, nor at bound) are also allowed, although normally the bits are set using the primal solution values. |
Function prototype:
EKKVector ekk_getColumn( EKKModel * model , int iColumn )
This function
returns a EKKVector struct, into the index array of which it has loaded the row indices of the
elements of the iColumnth column, and into the element array of which it has loaded the values of the corresponding column elements.
If an error occurred, ekk_getColumn returns a null pointer.
Function prototype:
const char * ekk_getCrange( EKKModel * model );
This function
returns a pointer to the current name of the ranges. This is set by
ekk_importModel or
ekk_setCrange.
If an error is encountered, ekk_getCrange returns a null pointer.
Function prototype:
const char * ekk_getCrhs( EKKModel * model );
This function
returns a pointer to the current model rhs name. This is set by
ekk_importModel or
ekk_setCrhs.
If an error is encountered, ekk_getCrhs returns a null pointer.
Function prototype:
int ekk_getIdensecol( EKKModel * model );
This function
returns the value of the corresponding integer control variable which can be set
by ekk_setIdensecol.
Idensecol Range: 10, maxint Default: 99,999
Description: The dense column threshold. Any matrix column with more nonzeros than Idensecol is treated as dense
and is kept out of the direct Cholesky solve. This option should only be used in conjunction with
ekk_regularized.
Function prototype:
int ekk_getIdevexmode( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIdevexmode.
Idevexmode Range: -3, 3 Default: 1
Description: The type of Devex pricing to be used. Idevexmode
is used by the Devex pricing algorithm in ekk_primalSimplex or
ekk_dualSimplex. The recommended values are:
If Idevexmode = 1, the approximate Devex method is used for primal, while for dual the result is as for 2. (This is the default.)
If Idevexmode = 2, the exact Devex method is used for the primal case, and the steepest edge method using inaccurate initial norms is used for the dual.
If Idevexmode = 3, the exact steepest edge method is used. This involves computing column norms initially. If the basis is full, this can involve significant overhead.
For the majority of problems, a setting of 1 (the default) gives the best results.
Function prototype:
int ekk_getIfastinteger( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIfastinteger.
Ifastinteger Range: 0, 1 Default: 0
Description: See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_getIfastits( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIfastits.
Ifastits Range: 0, maxint Default: 0
Description: The fast iteration switch. The default primal simplex
strategies are for a majority of problems, and are intended to minimize
the number of iterations. However, there are some problems where techniques
such as Devex pricing are not needed, or are not cost effective, such as
problems with a matrix that has many more columns than rows. In these problems,
the decrease in the number of iterations is outweighed by the increase
in time per iteration. The value of Ifastits modifies this
pricing change so that ekk_primalSimplex will not switch to Devex pricing before Ifastits iterations.
Function prototype:
int ekk_getIheurpass( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIheurpass.
Iheurpass Range: 0, maxint Default: 1
Description: The number of heuristic passes to be made by the MIP
preprocessor. This does not affect supernode processing.
Function prototype:
int ekk_getIintmask( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIintmask.
Iintmask Range: 0, 63 Default: 1
Description: The MIP solver log detail bit mask.
See "Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_getIiterbnum( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIiterbnum.
Iiterbnum Range: 0, maxint Default: 0
Description: The current number of iterations the interior point LP solver has performed.
Function prototype:
int ekk_getIiternum( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIiternum.
Iiternum Range: 0, maxint Default: 0
Description: The current number of iterations that have been
performed in a solver function.
Function prototype:
int ekk_getIiterufreq( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIiterufreq.
Iiterufreq Range: 0, maxint Default: 9,999,999
Description: The frequency with which ekk_itru is called. ekk_itru is called after every Iiterufreq iterations of a solver function. All the
solver functions incur some overhead from calling ekk_itru. For the network solver, this overhead might be noticeable.
Function prototype:
int ekk_getIlinelen( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIlinelen.
Ilinelen Range: 60, 150 Default: 132
Description: The length of the output line.
Function prototype:
int ekk_getIlogfreq( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIlogfreq.
Ilogfreq Range: 1, maxint Default: 999,999
Description: The log frequency. Ilogfreq=n prints
log information every n iterations. However, log messages are always
printed after problem matrix refactorizations, feasibility weight changes,
and switches from random to Devex pricing, unless messages have been turned
off by an appropriate setting of Iloglevel.
Function prototype:
int ekk_getIloglevel( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIloglevel.
Iloglevel Range: 0, 63 Default: 15
Description: The simplex log detail bit mask. Iloglevel
controls how much information is printed for each log message. See
"Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_getIlpdcflag( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIlpdcflag.
Ilpdcflag Range: 0, maxint Default: 0
Description: The number of blocks into which ekk_decomposeCrash will attempt to decompose the constraint matrix if the master rows are marked.
If the value of Ilpdcflag is greater then zero, then ekk_decomposeCrash will attempt to decompose
the constraint matrix into this number of blocks, and no more. I.e., if it is possible to decompose the constraint matrix into more than this
number of blocks, ekk_decomposeCrash will not do so. If the value of Ilpdcflag is equal to zero, then ekk_decomposeCrash will attempt to decompose the
constraint matrix into a number of blocks, but this composition may not be into as many blocks as possible. If you want a decomposition
of the constraint matrix into as many blocks as possible, then set the value of Ilpdcflag to a very large number.
Function prototype:
int ekk_getImajorits( EKKModel * model );
This function
returns the value of the corresponding integer control variable which can be set by ekk_setImajorits.
Imajorits Range: 0, 999 Default: 30
Description: The maximum number of decomposition iterations.
For ekk_decomposeCrash with type = 3, Imajorits is the number of Dantzig-Wolfe decomposition passes to be made.
For a quadratic programming application, Imajorits determines the amount of storage that is to be allocated for decomposition, as well as the number of major decomposition iterations to be performed. More than (Imajorits × Imajorits) doubleword words of memory will be required for a quadratic application, so Imajorits should not be set too large.
Function prototype:
int ekk_getImaxcols( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxcols.
Imaxcols Range: 0, maxint Default: 0
Description: The maximum number of columns allowed in the matrix.
Setting this will resize the model.
Function prototype:
int ekk_getImaxfactor( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxfactor.
Imaxfactor Range: 0, 9999 Default: 100 + (Inumrows) / 100
Description: The maximum number of iterations before a refactorization (invert) of the basis must be performed. A lower value
of Imaxfactor forces the simplex solver to refactorize at least every Imaxfactor iterations.
A decision is made on when to refactorize based on certain heuristics. To make a more accurate decision would involve either much more work, or using CPU timings. The latter possibility was rejected because runs would not be repeatable. For a small class of problems, it may be worth experimenting with Imaxfactor. The formula above is used after ekk_importModel, otherwise 100 is used.
Function prototype:
int ekk_getImaxfactorsize( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxfactorsize.
Imaxfactorsize Range: 0, maxint Default: 0
Description: Puts an upper bound on the space reserved for the factorization. If nonzero then the factorization can only have this many nonzeros. This can be useful if
it is known that otherwise real memory will be exceeded and excessive paging will take place.
Although the exact space used will vary, it is safe to assume that each unit
of this variable corresponds to 24 bytes.
Function prototype:
int ekk_getImaxiter( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxiter.
Imaxiter Range: 0, maxint Default: 9,999,999
Description: The maximum number of iterations that will be performed.
The problem might be solved using fewer iterations, but no more than the
value of Imaxiter will be done.
Function prototype:
int ekk_getImaxiterb( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxiterb.
Imaxiterb Range: 0, maxint Default: 100
Description: The maximum number of iterations of the interior-point
barrier algorithm. For very large problems it may be worth increasing this
to 150 or 200.
Function prototype:
int ekk_getImaxnodes( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxnodes.
Imaxnodes Range: 0, maxint Default: 9,999,999
Description: The maximum number of nodes to evaluate in
branch and bound.
Function prototype:
int ekk_getImaxrows( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxrows.
Imaxrows Range: 0, maxint Default: 0
Description: The maximum number of rows allowed in the matrix.
Setting this will resize the model.
Function prototype:
int ekk_getImaxsols( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImaxsols.
Imaxsols Range: 0, maxint Default: 9,999,999
Description: The maximum number of feasible integer solutions
to find in Branch and Bound.
Function prototype:
int ekk_getImiplength( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImiplength.
Imiplength Range: 0, maxint Default: 0
Description: The amount of extra information that is saved and restored by the user exit ekk_nodu. This is set by the user exit ekk_nodu.
An array of integer fullwords of length Imiplength is saved at each node. It is saved for use by the user exit ekk_nodu.
Function prototype:
int ekk_getImodelmask( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImodelmask.
Imodelmask Range: 0, 8191 Default: 0
Description: The bit mask that determines which parts of the matrix are written or read by ekk_saveModel or ekk_restoreModel. See
"Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_getImsgpos( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setImsgpos.
Imsgpos Range: 0, 1 Default: 0
Description: The position of the message number on the output line. This does not affect traceback output.
Function prototype:
int ekk_getInumberuser( EKKModel * model );
This function
returns the number of elements in the user arrays as created by such functions as
ekk_getRow.
Function prototype:
int ekk_getInumblocks( EKKModel * model );
This function
returns the number of matrix blocks in the model.
Function prototype:
int ekk_getInumchar( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumchar.
Inumchar Range: 1, 31 Default: 8
Description: The number of characters in row and column names.
This can also be set by ekk_importModelFree.
Function prototype:
int ekk_getInumcols( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumcols.
Inumcols Range: 0, maxint Default: 0
Description: The number of structural variables in the model.
Changing this will resize the model.
Function prototype:
int ekk_getInumdinf( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumdinf.
Inumdinf Range: 0, Inumcols Default: n/a
Description: The current number of dual infeasibilities.
Function prototype:
int ekk_getInumelq( EKKModel * model );
This function
returns the number of elements or columns in the quadratic part of the matrix.
If the quadratic matrix is stored by indices, then this gives the
number of nonzero elements. If the quadratic matrix is stored by columns,
this gives the number of columns.
Function prototype:
int ekk_getInumels( EKKModel * model );
This function
returns the number of elements in the linear part of the matrix.
Function prototype:
int ekk_getInumints( EKKModel * model );
This function
returns the number of integer variables in the model.
Function prototype:
int ekk_getInumnodes( EKKModel * model );
This function
returns the number of nodes which branch and bound has explored.
Function prototype:
int ekk_getInumpinf( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumpinf.
Inumpinf Range: 0, Inumrows Default: n/a
Description: The current number of primal infeasibilities.
Function prototype:
int ekk_getInumquadraticblocks( EKKModel * model );
This function
returns the number of quadratic blocks in the model. This will normally be zero or one.
Function prototype:
int ekk_getInumrows( EKKModel * model );
This function
returns the value of the corresponding integer control variable which can be set by
ekk_setInumrows.
Inumrows Range: 0, maxint Default: 0
The number of rows in the model. Changing this will resize the model.
Function prototype:
int ekk_getInumsets( EKKModel * model );
This function
returns the number of integer and Special Ordered Sets.
Function prototype:
int ekk_getInumsols( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumsols.
Inumsols Range: 0, Imaxsols Default: 0
Description: The number of integer solutions found so far.
Function prototype:
int ekk_getInumunsat( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setInumunsat.
Inumunsat Range: 0, maxint Default: 0
Description: The number of integer variables at fractional values.
Function prototype:
int ekk_getIoneobj( EKKModel * model );
This function
returns the value of the corresponding integer control variable which can be set by ekk_setIoneobj.
Ioneobj Range: 0, 1 Default: 1
Description: One objective function (type-N row) flag for MPS files. This specifies whether to keep or discard the type-N rows except
for the chosen one. The type-N row that is the objective function change vector for LP parametrics is not discarded if Cchangeobj is set
before calling ekk_importModel.
Function prototype:
int ekk_getIordunit( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIordunit.
Iordunit Range: -1, 99 Default: -1
Description: The row ordering read and write logical unit - the
name of which will be "fort.nn".
If Iroword is negative, then Iordunit must be set to a
valid logical unit number, otherwise an error will occur.
Function prototype:
int ekk_getIpagelines( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIpagelines.
Ipagelines Range: 10, maxint Default: 55
Description: The number of lines on the output page.
Function prototype:
int ekk_getIpossbasis( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIpossbasis.
Ipossbasis Range: 0, maxint Default: 65
Description: The potential basis flag. Ipossbasis > 0 means
that at the end of the barrier algorithm, the variables significantly away
from their bounds are marked as potentially basic, as are slack variables
on rows with small dual values.
Function prototype:
int ekk_getIpricetype( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIpricetype.
Ipricetype Range: 0, 1 Default: 0
Description: The type of pricing for the network solver.
If Ipricetype = 0, a sample size for the pricing step is selected
based on problem characteristics, and it is adjusted dynamically during
the solution process.
If Ipricetype = 1, the sample size given by Rnetsamp
is used, and it remains fixed during the solution process.
Function prototype:
int ekk_getIprintsens( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIprintsens.
Iprintsens Range: 0, 1023 Default: 0
Description: The sensitivity information printing bit mask.
See "Control Variable Bit Masks"
for information on bit masks. Iprintsens controls what information is created by
ekk_senseObjective, or
ekk_senseBound, and is printed by
ekk_printSolution.
No information relating to sensitivity analysis is printed by default.
For ekk_printSolution output of ekk_senseBound results:
16 Iprintsens
the range of the objective function coefficient up and down is printed.
32 Iprintsens
the objective function values at the range points are printed.
64 Iprintsens
the row or column that enters the basis is printed.
128 Iprintsens
the row or column that leaves the basis is printed.
256 Iprintsens
the sensitivity to row bounds is printed.
512 Iprintsens
the sensitivity to column bounds is printed.
Function prototype:
int ekk_getIprobstat( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIprobstat.
Iprobstat Range: -1, 6 Default: -1
Description: The problem status. Iprobstat is set as follows:
Function prototype:
int ekk_getIprobstat2( EKKModel * model );
This function
returns the value of the secondary status variable.
Description: A secondary problem status variable. Iprobstat2 is set on the basis of a comparison of the feasibilities of the unscaled
and scaled versions of a problem. Iprobstat2 will not be set if
ekk_scale has not been called. In addition,
Iprobstat2 may not be set if the problem was found to be unbounded, or if some error occurred
in processing. The possible values of this control variable and the associated
meanings are as follows:
Function prototype:
int ekk_getIprtinfomask( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIprtinfomask.
Iprtinfomask Range: 0, 1023 Default: 31
Description: The solution information bit mask for ekk_printSolution.
See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_getIqparmaxiter( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by
ekk_setIqparmaxiter.
Iqparmaxiter Range: 0, maxint Default: 9,999,999
Description: The maximum number of parametric adjustments that
will be performed by ekk_quadraticParametrics.
Function prototyp
int ekk_getIqparnumiter( EKKModel * model );
This function
returns the number of quadratic parametric iterations done so far.
Function prototype:
int ekk_getIroword( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIroword.
Iroword Range: -1, 4 Default: 3
Description: The row ordering method indicator.
Function prototype:
int ekk_getIsolmask( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIsolmask.
Isolmask Range: 0, 16 Default: 0
Description: The print matrix bit mask for ekk_printSolution.
See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_getIstopmask( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIstopmask.
Istopmask Range: 0, 3 Default: 0
Description: The stopping condition bit mask. Istopmask controls when the solver function will stop. See
"Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_getIstrategy( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIstrategy.
Istrategy Range: 0, 63 Default: 1
Description: The bit mask that selects various steps of the
MIP algorithm. Istrategy affects MIP preprocessing, and supernode
processing in the MIP solver. See
"Control Variable Bit Masks"
for information on bit masks.
1 Istrategy means
perform probing only on satisfied 0-1 variables. This is the default setting.
When a 0-1 variable is satisfied (i.e. currently at 0 or 1), probing will
be done to determine what other variables can be fixed as a result. If
this variable is not one, then probing will done on all 0-1 integer variables.
If they still have fractional values, the MIP solver will try setting them first
to one and then to zero, and use probing to build an implication list for
each direction.
2 Istrategy means use solution strategies that assume a valid integer solution has been found.
The MIP solver uses different strategies when looking for the first integer solution than when looking for a better one. If you already have a solution from
a previous run, and have set a cutoff value Rbbcutoff), then this
option will cause the solver to operate as though it already has an integer solution. This is beneficial for restarting and should reduce the time
needed to reach an optimal integer solution.
4 Istrategy means
take the branch opposite the maximum pseudo-cost. Normally, the MIP solver will branch on the node whose smaller pseudo-cost is highest. This has
the effect of choosing a node where both branches cause significant degradation in the objective function, probably allowing the tree to be pruned
earlier. With this option, the MIP solver will branch on the node whose larger pseudo-cost is highest; the branch taken will be in the opposite
direction of this cost. This has the effect of forcing the variables with most nearly integer values to integers earlier. This may be useful when
any integer solution, even a suboptimal one, is desired. Here the tree could possibly grow much larger, but if any integer solution is adequate
and the search is successful, then most of the tree will never have to be explored.
8 Istrategy means
compute new pseudo-costs as variables are branched on. Pseudo-costs, whether
assigned by the user or by the MIP solver, are normally left unchanged during
the solution process. Choosing this option will cause new estimates to
be made, using heuristics, as each branch is selected.
16 Istrategy
means compute pseudo-costs for unsatisfied variables. Pseudo-costs, whether
assigned by the user or by the MIP solver, are normally left unchanged during
the solution process. Setting this option will cause new estimates to be
made, using heuristics, for any unsatisfied variables' pseudo-costs in
both directions. This is done only the first time the variable is found
to be unsatisfied. In some cases, variables will be fixed to a bound by
this process, leading to better performance. This work is equivalent
to making two branches for every variable investigated. Note that this
tactic can be very time-consuming, if it does not prove effective, and
this should be weighed against the time likely to be spent in the solver.
32 Istrategy
means compute pseudo-costs for satisfied variables as well as for unsatisfied
variables. If the 16 bit is also one, the solver will compute new estimated
pseudo-costs for the satisfied variables, as well as the unsatisfied ones.
Again, this is computationally expensive, but it can improve performance
on some problems.
Function prototype:
int ekk_getIsupertol( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIsupertol.
Isupertol Range: 0, maxint Default: Number of 0-1 variables
Description: The number of branches allowed inside a supernode
before supernode processing ends. Supernode processing ends, if
all the following are true:
Function prototype:
int ekk_getIthreshold( EKKModel * model );
This function
returns the value of the corresponding integer control variable which
can be set by ekk_setIthreshold.
Ithreshold Range: 0, maxint Default: 1
Description: Number of integer variables that must be fixed for supernode processing to continue. In the MIP presolver, the current phase ends
and one or more variables are fixed before the next phase begins. In the MIP solver, a branch is performed if both of the following are true:
Function prototype:
int ekk_getIuseRowCopy( EKKModel * model );
This function
returns the value of the corresponding integer control variable which is set by ekk_setIuseRowCopy.
IuseRowCopy Range: 0, 1 Default: 0
Description: For large sparse problems it may be much faster for the simplex algorithms to have a copy of matrix stored by
rows. If the value of IuseRowCopy ekk_primalSimplex or
ekk_dualSimplex.
If an error occurred, ekk_getIuseRowCopy returns a nonzero value, otherwise it returns zero.
Function prototype:
FILE * ekk_getLogfileFilePointer( EKKModel * model );
This function
returns the FILE pointer to the current log file, i.e., the file into which Optimization
Library messages will be written. This can be set using
ekk_setLogfileFilePointer.
ekk_getLogfileFilePointer returns a null pointer, if an error occurred.
Function prototype:
const char * ekk_getLogfileName( EKKModel * model );
This function
returns a pointer to the name of the current log file, i.e., the file into which
Optimization Library messages will be logged. This can be set using
ekk_setLogfileFilePointer or
ekk_setLogfileFileName.
The default is stdout.
ekk_getLogfileName returns a null pointer, if an error occurred.
Function prototype:
int ekk_getNumberBasicColumns( EKKModel * model );
This function
returns the number of basic columns in the current model.
Function prototype:
int ekk_getNumberBasicRows( EKKModel * model );
This function
returns the number of basic rows in the current model.
Function prototype:
double * ekk_getObjective( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getObjective returns a vector containing the objective function coefficients from the model identified by model.
The length of this vector is the number of columns in the constraint matrix. If an error occurred, ekk_getObjective returns a null pointer.
Function prototype:
double ekk_getRbbcutoff( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRbbcutoff.
Rbbcutoff Range: -10 20,maxreal Default: 10 31
Description: The cutoff for the branch and bound. All branches
where the objective is at or above Rbbcutoff will be pruned.
The value of Rbbcutoff
is initialized to plus infinity. This allows all solutions. Whenever a
valid integer solution is found, the cutoff is changed to the objective
minus Rimprove.
Function prototype:
double ekk_getRbestest( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRbestest.
Rbestest Range: -maxreal, maxreal Default: 0.0
Description: The best estimated solution.
Function prototype:
double ekk_getRbestposs( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRbestposs.
Rbestposs Range: -maxreal, maxreal Default: The continuous solution
Description: The best possible solution.
Function prototype:
double ekk_getRbestsol( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRbestsol.
Rbestsol Range: -maxreal, maxreal Default: 10 31
Description: The best feasible integer solution found so far.
Function prototype:
double ekk_getRchangeweight( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRchangeweight.
Rchangeweight Range: 10 -12
Purpose: used by the simplex solvers
Description: The rate of change for Rpweight or Rdweight.
It is a nonlinear factor based on case-dependent heuristics. The default
of 0.5 gives a reasonable change if progress towards feasibility is slow.
A value of 1.0 would give a greater change, while 0.1 would give a smaller
change, and 0.01 would give a very slow change.
Function prototype:
double ekk_getRdegscale( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRdegscale.
Rdegscale Range: 0.0, maxreal Default: 1.0
Description: The scale factor for all degradation. The pseudocosts
and Riweight are used to estimate how much worse the objective will
become when continuing from a node (the estimated degradation). This estimate
is computed when the node is generated. The estimate of the objective at
a solution used in choosing the node is the objective at the node +
the value of Rdegscale multiplied by the estimated degradation. This
is computed when the node choice is made.
A small value for Rdegscale causes nodes with a good objective, but possibly far away from a valid solution to be chosen. A large value biases the choice towards nodes that are closer to a valid solution.
Setting Rdegscale to zero has special significance. After computation of the estimated degradation, a value for Rdegscale is computed such that the estimated objective at a solution used in choosing the node (the objective at the node + the value of Rdegscale multiplied by the estimated degradation) is exactly the value of Rtarget. This is a quick way of getting reasonable estimates.
One way of using Rdegscale is to set a reasonable value for Rtarget, and then allow the MIP solver to compute Rdegscale to give a plausible search. When a solution is found, Rdegscale could be set to a small value to search using just the objective.
Function prototype:
double ekk_getRdensethr( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRdensethr.
Rdensethr Range: -maxreal, maxreal Default: 0.7
Description: The density threshold for Cholesky processing.
When the symbolic factorization encounters a column of L
that has Rdensethr proportion of nonzeros and the remaining part
of L is at least 12 × 12, the remainder of L
is treated as dense. In practice, the lower right part of the Cholesky
triangular factor L is quite dense and it can be computationally
more efficient to treat it as 100% dense.
Function prototype:
double ekk_getRdualPerturbation( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRdualPerturbation.
RdualPerturbation
Range: -10 10, 10 10 Default: 0.0
Description: Normally when perturbation is applied in the primal or dual simplex method the amount is determined by the
solver. This allows the user to influence this amount. If the value is negative then perturbation is applied immediately.
Function prototype:
double ekk_getRdweight( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRdweight.
Rdweight Range: 0.0, 1.0 Default: 0.1
Description: The proportion of the feasible objective that is
used when the current solution is dual infeasible in the dual simplex method.
Function prototype:
double ekk_getRimprove( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRimprove.
Rimprove Range: -maxreal, maxreal Default: 10 -5
Description: The amount by which a new solution must be better.
When a valid solution is obtained, Rbbcutoff is set to the objective minus Rimprove. Because the default value is small this only stops alternative solutions with the same value.
If Rimprove is set to a large negative value all solutions of any value will be allowed.
Rimprove can be set to a large positive value if you are not interested in solutions with values close together.
Rimprove can be set to 0.9999 if the only variables with costs are integer variables, and the costs have integer values. This can be useful in pruning the tree earlier than would otherwise be the case.
Function prototype:
double ekk_getRiweight( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRiweight.
Riweight Range: 0.0, maxreal Default: 1.0
Description: The weight for each integer infeasibility. For some types of integer problems, the values of fractional variables are
of use. For example, if one variable is greater than another it is more likely to be in the optimal solution. But for many pure 0-1 problems, only
the number of variables at fractional values are important. By changing Riweight the balance between the contribution of the pseudocosts
and the contribution of the number of fractional variables can be changed.
Function prototype:
double ekk_getRmaxmin( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRmaxmin.
See also ekk_setMaximize and
ekk_setMinimize.
Rmaxmin Range: -1.0, 1.0 Default: 1.0
Description: The weight of the linear objective.
Function prototype:
double ekk_getRmulinfac( EKKModel * model );
This function
returns the value of the corresponding real control variable which can be set by
ekk_setRmulinfac.
Rmulinfac Range: 0.0, 1.0 Default:0.0
Description: The multiple of &mu. to add to the linear objective. Adding a small multiple of &mu. to each coefficient of the
true objective can help prevent models from becoming unbounded if they have constraint sets that are not closed. Normally, this multiple is 0.
Function prototype:
double ekk_getRnetsamp( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRnetsamp.
Rnetsamp Range: 0.0, 1.0 Default:0.05
Description: The sample size for the network pricing algorithm. Rnetsamp gives the percent of arcs for which reduced costs
are computed during the pricing step of the network solver. This is used if Ipricetype is set to 1.
Function prototype:
double ekk_getRobjectiveOffset( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRobjectiveOffset.
RobjectiveOffset Range: -maxreal, maxreal Default: 0.0
Description: This is a constant to be subtracted from objective
value whenever it is printed. ekk_preSolve may
compute this (or an MPS file may have a value in the rhs of the objective
row). Also the user may modify the problem in such a way that the objective
function needs this offset (e.g. adding a multiple of an equality constraint
to objective does not change problem but does change objective).
Function prototype:
double ekk_getRobjvalue( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRobjvalue.
Robjvalue Range: -maxreal, maxreal Default: n/a
Description: The value of the objective function.
Function prototype:
int ekk_getRow( EKKModel * model , int iRow );
This function
returns a EKKVector struct, into the index array of which it has loaded the column indices of the
elements of the iRowth row, and into the element array of which it has loaded the values of the corresponding row elements.
If an error occurred, ekk_getRow returns a null pointer.
Function prototype:
double * ekk_getRowacts( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getRowacts returns a vector containing the row activities from the model identified by model.
The length of this vector is the number of rows in the constraint matrix. If an error occurred, ekk_getRowacts returns a null pointer.
Function prototype:
double * ekk_getRowduals( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getRowduals returns a vector containing the row dual values from the model identified by model.
The length of this vector is the number of rows in the constraint matrix. If an error occurred, ekk_getRowduals returns a null pointer.
Function prototype:
double * ekk_getRowlower( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getRowlower returns a vector containing the row lower bounds from the model identified by model.
The length of this vector is the number of rows in the constraint matrix. If an error occurred, ekk_getRowlower returns a null pointer.
Function prototype:
int * ekk_getRowstat( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above). If no error
has occurred, ekk_getRowstat returns a vector containing the row status elements from the model
identified by model. The length of this vector is the number of rows in the constraint matrix.
If an error occurred, ekk_getRowstat returns a null pointer.
Function prototype:
double * ekk_getRowupper( EKKModel * model );
This function
allocates a block of storage space for which the user is responsible (as explained above).
If no error has occurred, ekk_getRowupper returns a vector containing the row upper bounds from the model identified by model.
The length of this vector is the number of rows in the constraint matrix. If an error occurred, ekk_getRowupper returns a null pointer.
Function prototype:
double ekk_getRpdgaptol( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRpdgaptol.
Rpdgaptol Range: 10 -12, 10 -1 Default: 10 -7
Description: The barrier method primal-dual gap tolerance. The relative gap between the primal and dual objectives that will be accepted
for optimality when both the primal and dual problems are feasible.
Function prototype:
double ekk_getRpertdiag( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRpertdiag.
Rpertdiag Range: 0.0, 10 -6 Default: 10 -12
Description: The diagonal perturbation for Cholesky factorization.
Rpertdiag is added to the diagonal matrix used in forming the normal
matrix whose Cholesky factors are computed in the interior point solver. This helps avoid spurious indications of rank deficiency.
Function prototype:
double ekk_getRprimalPerturbation( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRprimalPerturbation.
RprimalPerturbation Range: -10 10, 10 10 Default: 0.0
Description: Normally when perturbation is applied in the primal or dual simplex
method the amount is determined by OSL. This allows the user to influence
this amount. If the value is negative then perturbation is applied
immediately.
Function prototype:
double ekk_getRprintcpu( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRprintcpu.
Rprintcpu Range: 0.0, maxreal Default: 0.1
Description: Switch to print CPU time used by Library functions. If Rprintcpu is set to a positive value x.xx, then any Optimization Library
function that takes more than x.xx seconds will print a message indicating how much time the function took, and the total CPU time used thus far. The times are
printed to two decimal places, and so a zero may be printed, if the value of Rprintcpu is small. Also, the computing time may not be correct
after the value of Rprintcpu has been changed by ekk_setRprintcpu
In particular, if Rprintcpu has been set to 0.0, no messages about CPU time will be issued.
For some platforms, elapsed time may be returned.
Function prototype:
double ekk_getRpweight( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRpweight.
Rpweight Range: 10 -12, 10 10 Default: 0.1
Description: The multiplier of the feasible objective that is
used when the current solution is primal infeasible. It starts as 0.1,
but is decreased continually. It is decreased by a large amount if the
infeasibilities increase, and by small amounts if progress to feasibility
is slow. You may want to set Rpweight to a smaller value when the
problem begins as feasible, for example, after a values pass of the interior point solver where the parameter init is set to 3.
Function prototype:
double ekk_getRregularizedDelta( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRregularizedDelta.
RregularizedDelta Range: 10 -8, 10 8 Default: 10 -3
Description: This perturbation is applied on the dual side
in ekk_regularized. If this is too small there may
a fatal loss of rank. If too big then the answer may be
slightly inaccurate. If you are going to do crossover then
for a first try leave at default safe values (1.0e-3). To use less perturbation set smaller e.g. 1.0e-6.
Function prototype:
double ekk_getRregularizedGamma( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRregularizedGamma.
RregularizedGamma Range: 10 -8, 10 8 Default: 10 -3
Description: This perturbation is applied on the primal side
in ekk_regularized. If this is too small there may
a fatal loss of rank. If too big then the answer may be
slightly inaccurate. If you are going to do crossover then
for a first try leave at default safe values (1.0e-3). To use less perturbation set smaller e.g. 1.0e-6.
Function prototype:
double ekk_getRsumdinf( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRsumdinf.
Rsumdinf Range: -maxreal, maxreal Default: n/a
Description: The sum of the dual infeasibilities.
Function prototype:
double ekk_getRsumpinf( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRsumpinf.
Rsumpinf Range: -maxreal, maxreal Default: n/a
Description: The sum of the primal infeasibilities.
Function prototype:
double ekk_getRtarget( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRtarget.
Rtarget Range: -maxreal, maxreal Default: 5% worse than the continuous solution
Description: This is a target value of the objective for a valid
solution. In choosing a node to evaluate, preference is given to those
with objective function values better than Rtarget, even if their
estimated value is worse than a node whose objective is worse than the
Rtarget.
Rtarget is also used if Rdegscale is zero. If you do not set Rtarget, then it will be set to 5% worse than the continuous solution.
Function prototype:
double ekk_getRthreshold( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRthreshold.
Rthreshold Range: 0.0, maxreal Default: 0.0
Description: The supernode processing threshold. If Rthreshold
is 0.0, the default, then the MIP presolver sets it to the smaller of
10 -4 ×
objective function + 10 -12
and 10 -3 ×
distance from the continuous solution to the cutoff, and the MIP solver
sets Rthreshold to 10 times this value.
In the presolver, the current phase ends and one or more variables are fixed before the next phase begins. In the solver, a branch is performed if both of the following are true:
Function prototype:
double ekk_getRtoldinf( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRtoldinf.
Rtoldinf Range: 10 -12, 10 -1 Default: 10 -7
Description: The allowed amount of dual infeasibility. This
variable is the dual equivalent to the primal variable Rtolpinf.
Function prototype:
double ekk_getRtolint( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRtolint.
Rtolint Range: 10 -12, 10 -1 Default: 10 -6
Description: The integer tolerance. In some problems for which the accuracy of the data is questionable, it may not be worth forcing all
variables exactly to integer values. It may be better to declare the solution valid when all fractional values are less than a moderate tolerance, and then
get an integer solution by rounding.
Function prototype:
double ekk_getRtolmps( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRtolmps.
Rtolmps Range: -maxreal, maxreal Default: 10 -12
Description: The zero tolerance for MPS and spreadsheet data.
If the absolute value of any of the following is less than Rtolmps, then that coefficient is not included in the matrix.
Setting Rtolmps to a negative value allows all the elements in
an MPS file to remain in the matrix.
A value of zero allows all nonzero elements and coefficients in an
MPS file or spreadsheet work file to remain in the matrix. A small positive
value screens out elements and coefficients of small magnitude.
For elements in the RHS, RANGES, or BOUNDS sections of an MPS file,
for objective row coefficients in an MPS file or an objective row cell
of a spreadsheet work file, and for row and column bounds in a constraint
cell in a spreadsheet work file, if the absolute value of an element is
less than Rtolmps, it is set to zero.
Function prototype:
double ekk_getRtolpinf( EKKModel * model );
This function
returns the value of the corresponding real control variable which
can be set by ekk_setRtolpinf.
Rtolpinf Range: 10 -12, 10 -1 Default: 10 -8
Description: The allowed amount of primal infeasibility. For
most problems, the default value of Rtolpinf is adequate, but it
might be necessary to increase its value, if ekk_preSolve finds a small infeasibility,
or if the solution is slightly infeasible. If possible, the problem definition
should be corrected, but in some cases this is impractical because of the
limitations of finite precision.
Increasing Rtolpinf too much may lead to instability, but a
modest increase can give the algorithm added flexibility and decrease the
iteration count.
Function prototype:
EKKIntegerSet ekk_getSOSInfo( EKKModel * model , int iSet );
This function
returns a struct, with four entries, that gives information on the set of integers identified by iSet. The prototype for the struct is:
typedef struct{ | |
int type; | /* 1 => singleton , 2 => SOS1 , 3 => SOS1 , 4 => SOS2 */ |
int priority; | /* branching priority for the set */ |
int number_in_set; | /* number of elements in the set */ |
EKKSetEntry * entries_in_set; | /* a pointer to the iSet entry in an array of EKKSetEntry structs */ |
} EKKIntegerSet; |
typedef struct{ | |
int sequence; | /* sequence number, 0 is first */ |
unsigned short number_up; | /* number of times branched up on variable */ |
unsigned short number_down; | /* number of times branched down on variable */ |
double down_pseudo_cost; | |
double up_pseudo_cost; | /* could also be reference row entry */ |
} EKKSetEntry; |
Function prototype:
int ekk_setCbasis( EKKModel * model , const * char value );
This function
sets the current basis name.
Function prototype:
int ekk_setCbound( EKKModel * model , const * char value );
This function
sets the current bound name.
Function prototype:
int ekk_setCname( EKKModel * model , const * char value );
This function
sets the current model name. This is printed
in messages referring to the model.
Function prototype:
int ekk_setCobjective( EKKModel * model , const * char value );
This function
sets the current name of the objective row.
Function prototype:
int ekk_setCollower( EKKModel * model , const double * fromArray );
This function
sets the values of the column lower bounds in the model identified by model to the values in the array pointed to by fromArray.
ekk_setCollower does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setCollower returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColrcosts( EKKModel * model , const double * fromArray );
This function
sets the values of the column reduced costs in the model identified by model to the values in the array pointed to by fromArray.
ekk_setColrcosts does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setColrcosts returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColsol( EKKModel * model , const double * fromArray );
This function
sets the values of the column activities in the model identified by model to the values in the array pointed to by fromArray.
ekk_setColsol does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setColsol returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColstat( EKKModel * model , const int * fromArray );
This function
sets the values of all the column status elements in the model identified by model to the values in
the array pointed to by fromArray. Compare ekk_setColumnStatus below, which resets status values for
specified columns. ekk_setColstat does not clear, or deallocate, the "fromarray" in which the new column status information is stored. This
array should be allocated with
ekk_int
before being populated, and it should ultimately be deallocated with
ekk_free.
If an error occurred, ekk_setColstat returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColumnStatus( EKKModel * model , int numberToMark , const int * which , const int * usrstatus );
This function
Sets new column status element values for the indicated columns. Compare
ekk_setColstat above, which resets status values for all the columns. ekk_setColumnStatus does not clear,
or deallocate, either of the "which" or "usrstatus" input arrays. These arrays
should be allocated with
ekk_int
before being populated, and they should ultimately be deallocated with
ekk_free.
If an error occurred, ekk_setColumnStatus returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColupper( EKKModel * model , const double * fromArray );
This function
sets the values of the column upper bounds in the model identified by model to the values in the array pointed to by fromArray.
ekk_setColupper does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setColupper returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setColumnsNonBasicAtLower( EKKModel * model ,
int numberToMark , const int * which);
This function
marks columns as being at their lower bounds.
Function prototype:
int ekk_setColumnsNonBasicAtUpper( EKKModel * model ,
int numberToMark , const int * which);
This function
marks columns as being at their upper bounds.
Function prototype:
void ekk_setCompressOff( EKKModel * model );
This function
resets an internal indicator (to "OFF") that would otherwise cause the (physical) storage required for the constraint matrix to be reduced after a significant
reduction in the number of data items of the model had been made. This is a
companion function to ekk_setCompressOn.
Function prototype:
void ekk_setCompressOn( EKKModel * model );
This function
sets an internal indicator (to "ON") that causes the (physical) storage
required for the constraint matrix to be reduced after a significant
reduction in the
number of data items of the model had been made. Such a reduction might
result from presolving the problem, or from having eliminated
columns or constraints.
Function prototype:
int ekk_setCrange( EKKModel * model , const * char value);
This function
sets the current name of the ranges.
Function prototype:
int ekk_setCrhs( EKKModel * model , const * char value);
This function
sets the current model rhs name.
Function prototype:
void ekk_setDebug( EKKModel * model , int ifParameters , int reserved );
This function
enables output of values supplied to OSL functions.
Function prototype:
int ekk_setIdensecol( EKKModel * model , int value );
This function
resets the value of the corresponding integer
control variable which may be retrieved by ekk_getIdensecol. Any matrix column with more nonzeros
than Idensecol is treated as dense and is kept out of the direct Cholesky solve. The default value of Idensecol
is 99,999. This function should only be used in conjunction with ekk_regularized.
If an error occurred, ekk_setIdensecol returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setIdevexmode( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which may be retrieved by ekk_getIdevexmode.
Idevexmode Range: -3, 3 Default: 1
Description: The type of Devex pricing to be used. Idevexmode
is used by the Devex pricing algorithm in
ekk_primalSimplex or
ekk_dualSimplex.
The possible values and their meanings are as follows.
For most problems, the default setting (Idevexmode = 1) gives the best results.
Function prototype:
int ekk_setIfastinteger( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIfastinteger.
Ifastinteger Range: 0, 1 Default: 0
Description: See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_setIfastits( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIfastits.
Ifastits Range: 0, maxint Default: 0
Description: The fast iteration switch. The default primal simplex
strategies are for a majority of problems, and are intended to minimize
the number of iterations. However, there are some problems where techniques
such as Devex pricing are not needed, or are not cost effective, such as
problems with a matrix that has many more columns than rows. In these problems,
the decrease in the number of iterations is outweighed by the increase
in time per iteration. The value of Ifastits modifies
this pricing change so that
ekk_primalSimplex will not switch to Devex
pricing before Ifastits iterations.
Function prototype:
int ekk_setIheurpass( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIheurpass.
Iheurpass Range: 0, maxint Default: 1
Description: The number of heuristic passes to be made by the MIP presolver. This does not affect supernode processing.
Function prototype:
int ekk_setIintmask( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIintmask.
Iintmask Range: 0, 63 Default: 1
Description: The MIP solver log detail bit mask.
See "Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_setIiterbnum( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which may be
retrieved by ekk_getIiterbnum.
Iiterbnum Range: 0, maxint Default: 0
Description: The current number of iterations that the interior point LP solver has performed.
Function prototype:
int ekk_setIiternum( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIiternum.
Iiternum Range: 0, maxint Default: 0
Description: The current number of iterations that have been
performed in a solver function.
Function prototype:
int ekk_setIiterufreq( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIiterufreq.
Iiterufreq Range: 0, maxint Default: 9,999,999
Description: The frequency with which ekk_itru is called. ekk_itru is called after every Iiterufreq iterations of a solver
function. All the solvers incur some overhead from calling ekk_itru. For the network solver, this overhead might be noticeable.
Function prototype:
int ekk_setIlinelen( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIlinelen.
Ilinelen Range: 60, 150 Default: 132
Description: The length of the output line.
Function prototype:
int ekk_setIlogfreq( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIlogfreq.
Ilogfreq Range: 1, maxint Default: 999,999
Description: The log frequency. Ilogfreq=n prints
log information every n iterations. However, log messages are always
printed after problem matrix refactorizations, feasibility weight changes,
and switches from random to Devex pricing, unless messages have been turned
off by an appropriate setting of Iloglevel.
Function prototype:
int ekk_setIloglevel( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIloglevel.
Iloglevel Range: 0, 63 Default: 15
Description: The simplex log detail bit mask. Iloglevel
controls how much information is printed for each log message. See
"Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_setIlpdcflag( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIlpdcflag.
Ilpdcflag Range: 0, maxint Default: 0
Description: The number of blocks into which ekk_decomposeCrash will attempt
to decompose the constraint matrix if the master rows are marked.
If the value of Ilpdcflag is
greater then zero, then ekk_decomposeCrash will attempt to decompose the constraint
matrix into this number of blocks, and no more. I.e., if it is possible
to decompose the constraint matrix into more than this number of blocks,
ekk_decomposeCrash will not do so. If the value of Ilpdcflag is equal to zero,
then ekk_decomposeCrash will attempt to decompose the constraint matrix into a number
of blocks, but this composition may not be into as many blocks as possible.
If you want a decomposition of the constraint matrix into as many blocks
as possible, then set the value of Ilpdcflag to a very large number.
Function prototype:
int ekk_setImajorits( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImajorits.
Imajorits Range: 0, 999 Default: 30
Description: The maximum number of decomposition iterations.
For ekk_decomposeCrash with type = 3, Imajorits is the number of Dantzig-Wolfe decomposition passes to be made.
For a quadratic programming application, Imajorits determines the amount of storage that is allocated for decomposition, as well as the number of major decomposition iterations. More than (Imajorits × Imajorits) doubleword of memory will be required for a quadratic application, so Imajorits should not be set too large.
Function prototype:
int ekk_setImaxcols( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxcols.
Imaxcols Range: 0, maxint Default: 0
Description: The maximum number of columns allowed in the matrix.
Setting this will resize the model.
Function prototype:
int ekk_setImaxfactor( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxfactor.
Imaxfactor Range: 0, 9999 Default: 100 + (Inumrows) / 100
Description: The maximum number of iterations before a refactorization (invert) of the basis must be performed. A lower value of
Imaxfactor forces the simplex solver to refactorize at least every Imaxfactor iterations.
A decision is made on when to refactorize based on certain heuristics. To make a more accurate decision would involve either much more work, or using CPU timings. The latter possibility was rejected because runs would not be repeatable. For a small class of problems, it may be worth experimenting with Imaxfactor. The formula above is used after ekk_importModel, otherwise 100 is used.
Function prototype:
int ekk_setImaxfactorsize( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxfactorsize.
Imaxfactorsize Range: 0, maxint Default: 0
Description: Puts an upper bound on the space reserved for the factorization. If nonzero then the factorization can only have this many nonzeros. This can be useful if
it is known that otherwise real memory will be exceeded and excessive paging will take place.
Although the exact space used will vary, it is safe to assume that each unit
of this variable corresponds to 24 bytes.
Function prototype:
int ekk_setImaxiter( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxiter.
Imaxiter Range: 0, maxint Default: 9,999,999
Description: The maximum number of iterations that will be performed.
The problem might be solved using fewer iterations, but no more than the
value of Imaxiter will be done.
Function prototype:
int ekk_setImaxiterb( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxiterb.
Imaxiterb Range: 0, maxint Default: 100
Description: The maximum number of iterations of the interior-point
barrier algorithm. For very large problems it may be worth increasing this
to 150 or 200.
Function prototype:
int ekk_setImaxnodes( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxnodes.
Imaxnodes Range: 0, maxint Default: 9,999,999
Description: The maximum number of nodes to evaluate in
branch and bound.
Function prototype:
int ekk_setImaxrows( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxrows.
Imaxrows Range: 0, maxint Default: 0
Description: The maximum number of rows allowed in the matrix.
Setting this will resize the model.
Function prototype:
int ekk_setImaxsols( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImaxsols.
Imaxsols Range: 0, maxint Default: 9,999,999
Description: The maximum number of feasible integer solutions
to find in Branch and Bound.
Function prototype:
int ekk_setImiplength( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImiplength.
Imiplength Range: 0, maxint Default: 0
Description: The amount of extra information that is saved and restored by the user exit ekk_nodu. This may be retrieved by the user exit ekk_nodu. An array of
integer fullwords of length Imiplength is saved at each node. It is saved for use by the user exit ekk_nodu.
Function prototype:
int ekk_setImodelmask( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getImodelmask.
Imodelmask Range: 0, 8191 Default: 0
Description: The bit mask that determines which parts of the matrix are written or read by
ekk_saveModel or
ekk_restoreModel. See
"Control Variable Bit Masks"
for information on bit masks.
Function prototype:
int ekk_setImsgpos( EKKModel * model , int value );
This function
sets the value of the corresponding integer
control variable which may be retrieved by
ekk_getImsgpos.
The value of Imsgpos determines the position of OSL message numbers on the output line. (This does not affect traceback output.)
The possible values of Imsgpos are 0 and 1. The default value is 0. Imsgpos = 0 => message numbers are to appear
at the left margin, Imsgpos = 1 => message numbers are to appear at the right margin.
If an error occurred, ekk_setImsgpos returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setInumchar( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumchar.
Inumchar Range: 1, 31 Default: 8
Description: The number of characters in each row or columns name.
This is also set by ekk_importModelFree.
Function prototype:
int ekk_setInumcols( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumcols.
Inumcols Range: 0, maxint Default: 0
Description: The number of structural variables in the model.
Changing this will resize the model.
Function prototype:
int ekk_setInumdinf( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumdinf.
Inumdinf Range: 0, Inumcols Default: n/a
Description: The current number of dual infeasibilities.
Function prototype:
int ekk_setInumpinf( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumpinf.
Inumpinf Range: 0, Inumrows Default: n/a
Description: The current number of primal infeasibilities.
Function prototype:
int ekk_setInumrows( EKKModel * model , int value);
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumrows.
Inumrows Range: 0, maxint Default: 0
The number of rows in the model. Changing this will resize the model.
Function prototype:
int ekk_setInumsols( EKKModel * model , int value);
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumsols.
Inumsols Range: 0, Imaxsols Default: 0
Description: The number of integer solutions found so far.
Function prototype:
int ekk_setInumunsat( EKKModel * model , int value);
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getInumunsat.
Inumunsat Range: 0, maxint Default: 0
Description: The number of integer variables at fractional values.
Function prototype:
int ekk_setIoneobj( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which may be retrieved by ekk_getIoneobj.
Ioneobj Range: 0, 1 Default: 1
Description: One objective function (type-N row) flag for MPS files. This specifies whether to keep or discard the type-N rows except
for the chosen one. The type-N row that is the objective function change vector for LP parametrics is not discarded if Cchangeobj is set
before calling ekk_importModel.
Function prototype:
int ekk_setIordunit( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIordunit.
Iordunit Range: -1, 99 Default: -1
Description: The row ordering read and write logical unit - the
name of which will be "fort.nn".
If Iroword is negative, then Iordunit must be set to a
valid logical unit number, otherwise an error will occur.
Function prototype:
int ekk_setIpagelines( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIpagelines.
Ipagelines Range: 10, maxint Default: 55
Description: The number of lines on the output page.
Function prototype:
int ekk_setIpossbasis( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIpossbasis.
Ipossbasis Range: 0, maxint Default: 65
Description: The potential basis flag. Ipossbasis > 0 means
that at the end of the barrier algorithm, the variables significantly away
from their bounds are marked as potentially basic, as are slack variables
on rows with small dual values.
Function prototype:
int ekk_setIpricetype( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIpricetype.
Ipricetype Range: 0, 1 Default: 0
Description: The type of pricing for the network solver.
If Ipricetype = 0, a sample size for the pricing step is selected
based on problem characteristics, and it is adjusted dynamically during
the solution process.
If Ipricetype = 1, the sample size given by Rnetsamp
is used, and it remains fixed during the solution process.
Function prototype:
int ekk_setIprintsens( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIprintsens.
Iprintsens Range: 0, 1023 Default: 0
Description: The sensitivity information printing bit mask.
See "Control Variable Bit Masks"
for information on bit masks. Iprintsens controls what information is created by
ekk_senseObjective or
ekk_senseBound and is printed by
ekk_printSolution.
No information relating to sensitivity analysis is printed by default.
For ekk_printSolution output of ekk_senseBound results:
16 Iprintsens
the range of the objective function coefficient up and down is printed.
32 Iprintsens
the objective function values at the range points are printed.
64 Iprintsens
the row or column that enters the basis is printed.
128 Iprintsens
the row or column that leaves the basis is printed.
256 Iprintsens
the sensitivity to row bounds is printed.
512 Iprintsens
the sensitivity to column bounds is printed.
Function prototype:
int ekk_setIprobstat( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIprobstat.
Iprobstat Range: -1, 6 Default: -1
Description: The problem status. Iprobstat is set as follows:
Function prototype:
int ekk_setIprtinfomask( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIprtinfomask.
Iprtinfomask Range: 0, 1023 Default: 31
Description: The solution information bit mask for ekk_printSolution.
See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_setIqparmaxiter( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIqparmaxiter.
Iqparmaxiter Range: 0, maxint Default: 9,999,999
Description: The maximum number of parametric adjustments that
will be performed by ekk_quadraticParametrics.
Function prototype:
int ekk_setIroword( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIroword.
Iroword Range: -1, 4 Default: 3
Description: The row ordering method indicator is described above.
Function prototype:
int ekk_setIsolmask( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIsolmask.
Isolmask Range: 0, 16 Default: 0
Description: The print matrix bit mask for ekk_printSolution.
See "Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_setIstopmask( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIstopmask.
Istopmask Range: 0, 3 Default: 0
Description: The stopping condition bit mask. Istopmask
controls when the solver function will stop. See
"Control Variable Bit Masks" for information on bit masks.
Function prototype:
int ekk_setIstrategy( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIstrategy.
Istrategy Range: 0, 63 Default: 1
Description: The bit mask that selects various steps of the
MIP algorithm. Istrategy affects MIP preprocessing and supernode
processing in the MIP solver. See
"Control Variable Bit Masks"
for information on bit masks.
1 Istrategy means
perform probing only on satisfied 0-1 variables. This is the default setting.
When a 0-1 variable is satisfied (i.e. currently at 0 or 1), probing will
be done to determine what other variables can be fixed as a result. If
this variable is not one, then probing will done on all 0-1 integer variables.
If they still have fractional values, the MIP solver will try setting them first
to one and then to zero, and use probing to build an implication list for
each direction.
2 Istrategy means use solution strategies that assume a valid integer solution has been found.
the MIP solver uses different strategies when looking for the first integer solution than when looking for a better one. If you already have a solution from
a previous run, and have set a cutoff value (Rbbcutoff), then this
option will cause the solver to operate as though it already has an integer solution. This is beneficial for restarting and should reduce the time
needed to reach an optimal integer solution.
4 Istrategy means
take the branch opposite the maximum pseudo-cost. Normally, the solver will
branch on the node whose smaller pseudo-cost is highest. This has the effect
of choosing a node where both branches cause significant degradation in
the objective function, probably allowing the tree to be pruned earlier.
With this option, the solver will branch on the node whose larger pseudo-cost
is highest; the branch taken will be in the opposite direction of this
cost. This has the effect of forcing the variables with most nearly integer
values to integers earlier. This may be useful when any integer solution,
even a suboptimal one, is desired. Here the tree could possibly grow much
larger, but if any integer solution is adequate and the search is successful,
then most of the tree will never have to be explored.
8 Istrategy means
compute new pseudo-costs as variables are branched on. Pseudo-costs, whether
assigned by the user or by the solver, are normally left unchanged during
the solution process. Choosing this option will cause new estimates to
be made, using heuristics, as each branch is selected.
16 Istrategy
means compute pseudo-costs for unsatisfied variables. Pseudo-costs, whether assigned by the user or by the solver, are normally left unchanged during
the solution process. Setting this option will cause new estimates to be made, using heuristics, for any unsatisfied variables' pseudo-costs in
both directions. This is done only the first time the variable is found to be unsatisfied. In some cases, variables will be fixed to a bound by
this process, leading to better performance in the solver. This work is equivalent to making two branches for every variable investigated. Note that this
tactic can be very time-consuming, if it does not prove effective, and this should be weighed against the time likely to be spent in the solver.
32 Istrategy
means compute pseudo-costs for satisfied variables as well as for unsatisfied
variables. If the 16 bit is also one, the solver will compute new estimated
pseudo-costs for the satisfied variables, as well as the unsatisfied ones.
Again, this is computationally expensive, but it can improve performance
on some problems.
Function prototype:
int ekk_setIsupertol( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIsupertol.
Isupertol Range: 0, maxint Default: Number of 0-1 variables
Description: The number of branches allowed inside a supernode
before supernode processing ends. Supernode processing ends if
all of the following are true:
Function prototype:
int ekk_setIthreshold( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIthreshold.
Ithreshold Range: 0, maxint Default: 1
Description: Number of integer variables that must be fixed
for supernode processing to continue. In the MIP presolver, the current phase ends and one or more variables are fixed before the next
phase begins. In the MIP solver, a branch is performed if both of the following are true:
Function prototype:
int ekk_setIuseRowCopy( EKKModel * model , int value );
This function
sets the value of the corresponding integer control variable which
may be retrieved by ekk_getIuseRowCopy.
IuseRowCopy Range: 0, 1 Default: 0
Description: For large sparse problems it may be much faster for the simplex algorithms to have a copy of matrix stored by
rows. If the value of IuseRowCopy is 1, then a row copy of the constraint matrix will be created by
ekk_primalSimplex or
ekk_dualSimplex.
If an error occurred, ekk_setIuseRowCopy returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setLogfileFilePointer( EKKModel * model , FILE * logfp );
This function
sets the FILE pointer logfp to point to the current log file, i.e., the file into which Optimization
Library messages will be written.
This pointer can be retrieved using ekk_getLogfileFilePointer.
If an error occurred, ekk_setLogfileFilePointer returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setLogfileName( EKKModel * model , const char * value );
This function
assigns value to the name of the current log file, i.e., the file into which
Optimization Library messages will be logged.
This is retrieved using ekk_getLogfileFileName.
The default is stdout.
If an error occurred, ekk_setLogfileName returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setMaximize( EKKModel * model );
This function:
sets the value of Rmaxmin to -1.0 for the current model, which causes the objective function for LP, network, and linear MIP problems to be maximized.
If an error occurred, ekk_setMaximize returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setMinimize( EKKModel * model );
This function:
sets the value of Rmaxmin to +1.0 for the current model, which causes the objective function for LP, network, and linear MIP problems problem to be
minimized.
If an error occurred, ekk_setMinimize returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setObjective( EKKModel * model , const double * fromArray );
This function
sets the values of the objective function coefficients in the model identified by model to the values in the array pointed to by fromArray.
ekk_setObjective does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setObjective returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setPriority( EKKModel * model , int iSet , int priority );
This function
sets the branching priority to the indicated value for the indicated set of integer variables in the current model. A low value for priority correspond
to a high branching priority. The highest branching priority is achieved by setting priority to "1." The lowest branching priority is
achieved by setting priority to "32763".
If an error occurred, ekk_setPriority returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRbbcutoff( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRbbcutoff.
Rbbcutoff Range: -10 20,maxreal Default: 10 31
Description: The cutoff for the branch and bound. All branches where the objective is at or above Rbbcutoff will be pruned.
The value of Rbbcutoff is initialized to plus infinity. This allows all solutions. Whenever a
valid integer solution is found, the cutoff is changed to the objective
minus Rimprove.
Function prototype:
int ekk_setRbestest( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRbestest.
Rbestest Range: -maxreal, maxreal Default: 0.0
Description: The best estimated solution.
Function prototype:
int ekk_setRbestposs( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRbestposs.
Rbestposs Range: -maxreal, maxreal Default: The continuous solution
Description: The best possible solution.
Function prototype:
int ekk_setRbestsol( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRbestsol.
Rbestsol Range: -maxreal, maxreal Default: 10 31
Description: The best feasible integer solution found so far.
Function prototype:
int ekk_setRchangeweight( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRchangeweight.
Rchangeweight Range: 10 -12
Purpose: used by the simplex solver
Description: The rate of change for Rpweight or Rdweight.
It is a nonlinear factor based on case-dependent heuristics. The default
of 0.5 gives a reasonable change if progress towards feasibility is slow.
A value of 1.0 would give a greater change, while 0.1 would give a smaller
change, and 0.01 would give a very slow change.
Function prototype:
int ekk_setRdegscale( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRdegscale.
Rdegscale Range: 0.0, maxreal Default: 1.0
Description: The scale factor for all degradation. The pseudocosts
and Riweight are used to estimate how much worse the objective will
become when continuing from a node (the estimated degradation). This estimate
is computed when the node is generated. The estimate of the objective at
a solution used in choosing the node is the objective at the node +
the value of Rdegscale multiplied by the estimated degradation. This
is computed when the node choice is made.
A small value for Rdegscale causes nodes with a good objective, but possibly far away from a valid solution to be chosen. A large value biases the choice towards nodes that are closer to a valid solution.
Setting Rdegscale to zero has special significance. After computation of the estimated degradation, a value for Rdegscale is computed such that the estimated objective at a solution used in choosing the node (the objective at the node + the value of Rdegscale multiplied by the estimated degradation) is exactly the value of Rtarget. This is a quick way of getting reasonable estimates.
One way of using Rdegscale is to set a reasonable value for Rtarget, and then allow the MIP solver to compute Rdegscale to give a plausible search. When a solution is found, Rdegscale could be set to a small value to search using just the objective.
Function prototype:
int ekk_setRdensethr( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRdensethr.
Rdensethr Range: -maxreal, maxreal Default: 0.7
Description: The density threshold for Cholesky processing.
When the symbolic factorization encounters a column of L
that has Rdensethr proportion of nonzeros and the remaining part
of L is at least 12 × 12, the remainder of L
is treated as dense. In practice, the lower right part of the Cholesky
triangular factor L is quite dense and it can be computationally
more efficient to treat it as 100% dense.
Rdensethr 0.0 causes all dense
processing.
Rdensethr 1.0
causes all sparse processing.
Function prototype:
int ekk_setRdualPerturbation( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRdualPerturbation.
RdualPerturbation
Range: -10 10, 10 10 Default: 0.0
Description: Normally when perturbation is applied in the primal or dual simplex
method the amount is determined by OSL. This allows the user to influence
this amount. If the value is negative then perturbation is applied
immediately.
Function prototype:
int ekk_setRdweight( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRdweight.
Rdweight Range: 0.0, 1.0 Default: 0.1
Description: The proportion of the feasible objective that is
used when the current solution is dual infeasible in the dual simplex method.
Function prototype:
int ekk_setRimprove( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRimprove.
Rimprove Range: -maxreal, maxreal Default: 10 -5
Description: The amount by which a new solution must be better.
When a valid solution is obtained, Rbbcutoff is set to the objective minus Rimprove. Because the default value is small this only stops alternative solutions with the same value.
If Rimprove is set to a large negative value all solutions of any value will be allowed.
Rimprove can be set to a large positive value if you are not interested in solutions with values close together.
Rimprove can be set to 0.9999 if the only variables with costs are integer variables, and the costs have integer values. This can be useful in pruning the tree earlier than would otherwise be the case.
Function prototype:
int ekk_setRiweight( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRiweight.
Riweight Range: 0.0, maxreal Default: 1.0
Description: The weight for each integer infeasibility. For some types of integer problems, the values of fractional variables are
of use. For example, if one variable is greater than another it is more likely to be in the optimal solution. But for many pure 0-1 problems, only
the number of variables at fractional values are important. By changing Riweight the balance between the contribution of the pseudocosts
and the contribution of the number of fractional variables can be changed.
Function prototype:
int ekk_setRmaxmin( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRmaxmin.
See also ekk_setMaximize and
ekk_setMinimize.
Rmaxmin Range: -1.0, 1.0 Default: 1.0
Description: The weight of the linear objective.
Function prototype:
int ekk_setRmulinfac( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRmulinfac.
Rmulinfac Range: 0.0, 1.0 >Default:0.0
Description: The multiple of &mu. to add to the linear objective.
Adding a small multiple of &mu. to each coefficient of the true objective
can help prevent models from becoming unbounded if they have constraint
sets that are not closed. Normally, this multiple is 0.
Function prototype:
int ekk_setRnetsamp( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRnetsamp.
Rnetsamp Range: 0.0, 1.0 Default:0.05
Description: The sample size for the network pricing algorithm.
Rnetsamp gives the percent of arcs for which reduced costs are computed
during the pricing step. This is used if Ipricetype is set to 1.
Function prototype:
int ekk_setRobjectiveOffset( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRobjectiveOffset.
RobjectiveOffset Range: -maxreal, maxreal Default: 0.0
Description: This is a constant to be subtracted from objective
value whenever it is printed. ekk_preSolve may
compute this (or an MPS file may have a value in the rhs of the objective
row). Also the user may modify the problem in such a way that the objective
function needs this offset (e.g. adding a multiple of an equality constraint
to objective does not change problem but does change objective).
Function prototype:
int ekk_setRobjvalue( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRobjvalue.
Robjvalue Range: -maxreal, maxreal Default: n/a
Description: The value of the objective function.
Function prototype:
int ekk_setRowacts( EKKModel * model , const double * fromArray );
This function
sets the values of the row activities in the model identified by model to the values in the array pointed to by fromArray.
ekk_setRowacts does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setRowacts returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowduals( EKKModel * model , const double * fromArray );
This function
sets the values of the row dual activities in the model identified by model to the values in the array pointed to by fromArray.
ekk_setRowduals does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setRowduals returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowlower( EKKModel * model , const double * fromArray );
This function
sets the values of the row lower bounds in the model identified by model to the values in the array pointed to by fromArray.
ekk_setRowlower does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setRowlower returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowupper( EKKModel * model , const double * fromArray );
This function
sets the values of the row upper bounds in the model identified by model to the values in the array pointed to by fromArray.
ekk_setRowupper does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setRowupper returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowstat( EKKModel * model , const int * fromArray );
This function
sets the values of the row status elements in the model identified by model to the values in the
array pointed to by fromArray.
ekk_setRowstatus does not clear, or deallocate, this array. The array can be (and ultimately should be) deallocated with
ekk_free.
If an error occurred, ekk_setRowstat returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowsNonBasicAtLower( EKKModel * model ,
int numberToMark , const int * which);
This function
sets the status of selected rows to their lower bound.
If an error occurred, ekk_setRowsNonBasicAtLower returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowsNonBasicAtUpper( EKKModel * model ,
int numberToMark , const int * which);
This function
sets the status of selected rows to their upper bound.
If an error occurred, ekk_setRowsNonBasicAtUpper returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRowStatus( EKKModel * model , int numberToMark ,
const int * which , const int * usrstatus );
This function
Sets new row status values for the indicated rows.
If an error occurred, ekk_setRowStatus returns a nonzero value, otherwise it returns zero.
Function prototype:
int ekk_setRpdgaptol( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRpdgaptol.
Rpdgaptol Range: 10 -12, 10 -1 Default: 10 -7
Description: The barrier method primal-dual gap tolerance. The relative gap between the primal and dual objectives that will
be accepted for optimality when both the primal and dual problems are feasible.
Function prototype:
int ekk_setRpertdiag( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRpertdiag.
Rpertdiag Range: 0.0, 10 -6 Default: 10 -12
Description: The diagonal perturbation for Cholesky factorization.
Rpertdiag is added to the diagonal matrix used in forming the normal
matrix whose Cholesky factors are computed in the interior point solver. This helps avoid spurious indications of rank deficiency.
Function prototype:
int ekk_setRprimalPerturbation( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRprimalPerturbation.
RprimalPerturbation Range: -10 10, 10 10 Default: 0.0
Description: Normally when perturbation is applied in the primal or dual simplex
method the amount is determined by OSL. This allows the user to influence
this amount. If the value is negative then perturbation is applied
immediately.
Function prototype:
int ekk_setRprintcpu( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRprintcpu.
Rprintcpu Range: 0.0, maxreal Default: 0.1
Description: Switch to print CPU time used by Library functions. If Rprintcpu is set to a positive value x.xx, then any Optimization Library
function that takes more than x.xx seconds will print a message indicating how much time the function took, and the total CPU time used thus far. The times are
printed to two decimal places, and so a zero may be printed, if the value of Rprintcpu is small. Also, the computing time may not be correct,
after the value of Rprintcpu has been changed by ekk_setRprintcpu
In particular, if Rprintcpu has been set to 0.0, no messages about CPU time will be issued.
For some platforms elapsed time may be returned.
Function prototype:
int ekk_setRpweight( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRpweight.
Rpweight Range: 10 -12, 10 10 Default: 0.1
Description: The multiplier of the feasible objective that is
used when the current solution is primal infeasible. It starts as 0.1,
but is decreased continually. It is decreased by a large amount if the
infeasibilities increase, and by small amounts if progress to feasibility
is slow. You may want to set Rpweight to a smaller value when the
problem begins as feasible, for example, after a values pass of the simplex solver where the parameter init is set to 3.
Function prototype:
int ekk_setRregularizedDelta( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRregularizedDelta.
RregularizedDelta Range: 10 -8, 10 8 Default: 10 -3
Description: This perturbation is applied on the dual side
in ekk_regularized. If this is too small there may
a fatal loss of rank. If too big then the answer may be
slightly inaccurate. If you are going to do crossover then
for a first try leave at default safe values (1.0e-3). To use less perturbation set smaller e.g. 1.0e-6.
Function prototype:
int ekk_setRregularizedGamma( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRregularizedGamma.
RregularizedGamma Range: 10 -8, 10 8 Default: 10 -3
Description: This perturbation is applied on the primal side
in ekk_regularized. If this is too small there may
a fatal loss of rank. If too big then the answer may be
slightly inaccurate. If you are going to do crossover then
for a first try leave at default safe values (1.0e-3). To use less perturbation set smaller e.g. 1.0e-6.
Function prototype:
int ekk_setRsumdinf( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRsumdinf.
Rsumdinf Range: -maxreal, maxreal Default: n/a
Description: The sum of the dual infeasibilities.
Function prototype:
int ekk_setRsumpinf( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRsumpinf.
Rsumpinf Range: -maxreal, maxreal Default: n/a
Description: The sum of the primal infeasibilities.
Function prototype:
int ekk_setRtarget( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRtarget.
Rtarget Range: -maxreal, maxreal Default: 5% worse than the continuous solution
Description: This is a target value of the objective for a valid
solution. In choosing a node to evaluate, preference is given to those
with objective function values better than Rtarget, even if their
estimated value is worse than a node whose objective is worse than the
Rtarget.
Rtarget is also used if Rdegscale is zero. If you do not set Rtarget, then it will be set to 5% worse than the continuous solution.
Function prototype:
int ekk_setRthreshold( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRthreshold.
Rthreshold Range: 0.0, maxreal Default: 0.0
Description: The supernode processing threshold. If Rthreshold is 0.0, the default, then the MIP presolver sets it to the smaller of
10 -4 × objective function + 10 -12
and 10 -3 ×
distance from the continuous solution to the cutoff, and the solver
sets Rthreshold to 10 times this value.
In the presolver, the current phase ends and one or more variables are fixed before the next phase begins. In the solver, a branch is performed if both of the following are true:
Function prototype:
int ekk_setRtoldinf( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRtoldinf.
Rtoldinf Range: 10 -12, 10 -1 Default: 10 -7
Description: The allowed amount of dual infeasibility. This
variable is the dual equivalent to the primal variable Rtolpinf.
Function prototype:
int ekk_setRtolint( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRtolint.
Rtolint Range: 10 -12, 10 -1 Default: 10 -6
Description: The integer tolerance. In some problems for which the accuracy of the data is questionable, it may not be worth forcing all
variables exactly to integer values. It may be better to declare the solution valid when all fractional values are less than a moderate tolerance, and then
get an integer solution by rounding.
Function prototype:
int ekk_setRtolmps( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRtolmps.
Rtolmps Range: -maxreal, maxreal Default: 10 -12
Description: The zero tolerance for MPS and spreadsheet data.
If the absolute value of any of the following is less than Rtolmps, then that coefficient is not included in the matrix.
Setting Rtolmps to a negative value allows all the elements in
an MPS file to remain in the matrix.
A value of zero allows all nonzero elements and coefficients in an
MPS file or spreadsheet work file to remain in the matrix. A small positive
value screens out elements and coefficients of small magnitude.
For elements in the RHS, RANGES, or BOUNDS sections of an MPS file,
for objective row coefficients in an MPS file or an objective row cell
of a spreadsheet work file, and for row and column bounds in a constraint
cell in a spreadsheet work file, if the absolute value of an element is
less than Rtolmps, it is set to zero.
Function prototype:
int ekk_setRtolpinf( EKKModel * model , double value );
This function
sets the value of the corresponding real control variable which
may be retrieved by ekk_getRtolpinf.
Rtolpinf Range: 10 -12, 10 -1 Default: 10 -8
Description: The allowed amount of primal infeasibility. For
most problems, the default value of Rtolpinf is adequate, but it
might be necessary to increase its value, if ekk_preSolve finds a small infeasibility,
or if the solution is slightly infeasible. If possible, the problem definition
should be corrected, but in some cases this is impractical because of the
limitations of finite precision.
Increasing Rtolpinf too much may lead to instability, but a
modest increase can give the algorithm added flexibility and decrease the
iteration count.
Function prototype:
int ekk_setUserData( EKKModel * model , void * const userData );
This function
saves a generic pointer supplied by the user, which can later be retrieved by using ekk_userData. This could be
used to provide a communication link to (or between) user exit functions, or in any other manner of the user's choosing.
If an error occurred, ekk_setUserData returns a nonzero value, otherwise it returns zero.