Appendix C. Control Variables

This appendix contains a list of all of the control variables available in the Optimization Library. It is intended for reference purposes. Control variable information is also listed in these places: This appendix contains descriptions of all the control variables listed by type:
The descriptions of the control variables in each section are ordered by the sequence numbers of the variables. These sequence numbers are a relic from times past, but they can still be used to reference the control variables in the array passed to the appropriate EKKxGET or EKKxSET subroutine. The C index of a particular control variable in this array is (as always) one less than the FORTRAN index for the same variable, which is (as always) the same as the sequence number of the variable. There is a table at the beginning of each of the sections of this appendix that lists the names of the control variables, in alphabetical order, along with their sequence numbers. In these tables, the name of each control variable is a hypertext link to the description of that variable.


Integer Control Variables

Name no. Name no. Name no.
Iadjactype14 Idensecol16 Idevexmode17
Idroprowct19 Iextrablk34 Ifastits39
Iformntype15 Iheurpass55 Iintmask38
Iiterbnum60 Iiternum4 Iiterufreq20
Ilinelen36 Ilogfreq1 Iloglevel6
Ilpdcflag71 Imajorits48 Imaxcols10
Imaxfactor3 Imaxintinfo53 Imaxints50
Isupertol56 Imaxiter5 Imaxiterb13
Imaxnodes40 Imaxprojns22 Imaxrows 9
Imaxsets51 Imaxsols41 Imiplength59
Imodelmask31 Imsgpos25 Inullcheck18
Inumblocks24 Inumchar11 Inumcols28
Inumcpu62 Inumdinf30 Inumelq69
Inumels23 Inumints43 Inumnodes37
Inumpinf29 Inumrows27 Ithreshold54
Inumsets44 Inumsols42 Inumunsat45
Ioneobj7 Iordthrsh70 Iordunit58
Ipagelines26 Ipossbasis21 Ipricetype61
Iprintsens49 Iprintunit 2 Iprobstat 47
Iprobstat263 Iprtinfomask32 Iqparmaxiter35
Iqparnumiter8 Iroword57 Ismdltypemask64
Isolmask33 Istopmask12 Istrategy52
Istripes67 Itotalcpu65 Iwhichcpu66
Ivector46      
Name
Comments
Ilogfreq
Sequence number: 1   Range: 1, maxint   Default: 999,999

Settable: Yes
Purpose: EKKSSLV, EKKNSLV, EKKQSLV, and EKKMSLV
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.
Iprintunit
Sequence number: 2   Range: 0, 99   Default: 6

Settable: Yes
Purpose: General Purpose
Description: The unit where output is directed for printing. In general, 0 Iprintunit 99. If you are using any variant of UNIX, or a PC operating system, the value of Iprintunit can not be 0, 2, or 5.
Imaxfactor
Sequence number: 3   Range: 0, 999   Default: 100 + (Inumrows) / 100

Settable: Yes
Purpose: EKKSSLV
Description: The maximum number of iterations before a refactorization (invert) of the basis must be performed. A lower value of Imaxfactor forces EKKSSLV 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.

Iiternum
Sequence number: 4   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKSSLV, EKKNSLV, and EKKQSLV
Description: The current number of iterations that have been performed in a solver subroutine.
Imaxiter
Sequence number: 5   Range: 0, maxint   Default: 9,999,999

Settable: Yes
Purpose: EKKSSLV, EKKQSLV, and EKKNSLV
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.
Iloglevel
Sequence number: 6   Range: 0, 63   Default: 15

Settable: Yes
Purpose: EKKSSLV
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.

0=Iloglevel selects no information to be printed for the log message.
Iloglevel prints a log line every Ilogfreq iterations and at final EKKSSLV status.
Iloglevel prints a log line at every refactorization and change in pricing method.
Iloglevel prints variables being rejected from entering the basis.
Iloglevel is not used.
16  Iloglevel prints feasibility weight changes and minor computational errors.
32  Iloglevel prints pivoting information.

Ioneobj
Sequence number: 7   Range: 0, 1   Default: 1

Settable: Yes
Purpose: EKKMPS
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 EKKMPS.

Ioneobj=0 keeps all N rows.
Ioneobj=1 discards all the other N rows.

Iqparnumiter
Sequence number: 8   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKQSLV
Description: The number of the current EKKQPAR parametric adjustment.
Imaxrows
Sequence number: 9   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The maximum number of rows allowed in the matrix. The value of Imaxrows can be set only once, and it is usually set concurrently with the value of Imaxcols.

Imaxrows=-n allows you to get n spare rows. (Only applicable before EKKMPS.)

Imaxcols
Sequence number: 10   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The maximum number of columns allowed in the matrix. The value of Imaxcols can be set only once, and it usually is set concurrently with the value of Imaxrows.

Imaxcols=-n allows you to get n spare columns. (Only applicable before EKKMPS.)

Inumchar
Sequence number: 11   Range: 1, 31   Default: 8

Settable: Yes
Purpose: EKKMPS, EKKBASI, EKKBASO, EKKBCDO, and EKKQMPS
Description: The number of characters in row names, columns names, and names of problems in MPS data sets.
Istopmask
Sequence number: 12   Range: 0, 3   Default: 0

Settable: Yes
Purpose: EKKSSLV
Description: The stopping condition bit mask. Istopmask controls when the solve subroutine will stop. See "Control Variable Bit Masks" for information on bit masks.

0=Istopmask indicates that EKKSSLV will exit normally.
Istopmask indicates that EKKSSLV will exit when the pricing mode changes. This occurs after a values pass when EKKSSLV was called with init set to 3. It also occurs when fast iterations are switched off.
Istopmask indicates that EKKSSLV will exit when the problem becomes feasible.

Imaxiterb
Sequence number: 13   Range: 0, maxint   Default: 100

Settable: Yes
Purpose: EKKBSLV
Description: The maximum number of iterations of the interior-point barrier algorithm.
Iadjactype
Sequence number: 14   Range: 0, 1   Default: 1

Settable: Yes
Purpose: EKKBSLV
Description: The formation of the adjacency matrix AAT.

Iadjactype=0 causes the nonzero structure of AAT to be computed by taking the symbolic outer products of all the columns, accumulating them in a list, sorting them, and eliminating the duplicates.
Iadjactype = 1 uses or creates row and column copies of A. The nonzero positions are found by matrix multiplication. This is faster, but requires a storage-by-rows copy of A.

Iformntype
Sequence number: 15   Range: 0, 1   Default: 0

Settable: Yes
Purpose: EKKBSLV
Description: The formation of the normal matrix.

Iformntype=0 creates a mapping of the outer products of the matrix columns A* jA* j T onto the nonzero positions of L. The map is then used at every iteration to build the normal matrix which is factorized. This procedure generally uses a large amount of storage, but it allows for efficient vectorization. If there is not enough storage, the following method is used.
Iformntype = 1 uses or creates row and column copies of A. The nonzero values are found by using the copies directly at each iteration to create the normal matrix. This does not take advantage of vector processing.

Idensecol
Sequence number: 16   Range: 10, maxint   Default: 99,999

Settable: Yes
Purpose: EKKBSLV
Description: The dense column threshold. Any matrix column with more nonzeros than Idensecol is treated as dense and is kept out of the preconditioner for conjugate gradients. Dense columns inhibit direct solution of a set of equations for the direction vector and require the use of a conjugate gradient method (or the simplex method).
Idevexmode
Sequence number: 17   Range: -3, 3   Default: 1

Settable: Yes
Purpose: EKKSSLV
Description: The type of Devex pricing to be used. Idevexmode is used by the Devex pricing algorithm in EKKSSLV. Devex iterations are only done in EKKSSLV after the initial random pricing iterations. In the primal simplex case, a negative value for Idevexmode indicates that the standard Devex method should be used until the problem becomes feasible. For the dual simplex case, negative settings of Idevexmode have the same meaning as the positive setting. That is, for dual, setting Idevexmode to -1 is the same as setting it to 1. Following is the meaning of the positive settings of Idevexmode:

If Idevexmode = 0, switch off Devex pricing. This option is not recommended for general use.

If Idevexmode = 1, the approximate Devex method is used. (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) or -2 gives the best results for the primal case, while 3 (or -3) usually gives the best results for the dual case.

Inullcheck
Sequence number: 18   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: EKKBSLV
Description: The null space checking switch. This check is useful to see if the direction vector p (projected descent direction) lies in the null space of A when using the primal barrier algorithm. When using one of the primal-dual algorithms, an analogous check is made to see if the direction vector Dx satisfies ADx = b - Ax.

Inullcheck 0 ||Ap||/||p||. If ||Ap||/||p|| is less than the value of Rprojtol (the projection error tolerance), the direction is accepted. If ||Ap||/||p|| Rprojtol, the value is printed, and an attempt to iteratively improve the projection may be made. Imaxprojns controls the number of such attempts.
Inullcheck 0 prints the information on the first check with the information on the feasibility of the new solution for each iteration. The progress of the iterations is provided in the log.
Inullcheck < 0 means that none of these checks are made.

Idroprowct
Sequence number: 19   Range: 1, 30   Default: 1

Settable: Yes
Purpose: EKKBSLV
Description: The constraint dropping threshold. This is a sensitive parameter for problems that may be very rank-deficient.

1 Idroprowct 16 means that if a diagonal element for a particular row has been rejected Idroprowct consecutive times, the row is declared redundant (free) for the rest of the barrier algorithm. If there are difficulties with unboundedness, a larger value of Idroprowct may prevent this.
Idroprowct > 16 means that the constraints will never be freed.

Iiterufreq
Sequence number: 20   Range: 0, maxint   Default: 1

Settable: Yes
Purpose: EKKITRU
Description: The frequency with which EKKITRU is called. EKKITRU is called after every Iiterufreq iterations of a solve subroutine. All the solve subroutines incur some overhead from calling EKKITRU. For EKKNSLV, this overhead might be noticeable. To reduce the overhead, set Iiterufreq to a large value.
Ipossbasis
Sequence number: 21   Range: 0, maxint   Default: 65

Settable: Yes
Purpose: EKKBSLV
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.
Imaxprojns
Sequence number: 22   Range: 1, 10   Default: 3

Settable: Yes
Purpose: EKKBSLV
Description: The maximum null space projections.

Imaxprojns > 1 means that (Imaxprojns - 1) number of iterations are made to improve the projection so that its direction stays below the projection error tolerance, Rprojtol.
Imaxprojns = 1 means no attempt at an improvement is made.

Inumels
Sequence number: 23   Range: 0, maxint   Default: n/a

Settable: No
Purpose: General Purpose
Description: The number of elements in the last created matrix block.
Inumblocks
Sequence number: 24   Range: 0, maxint   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The number of matrix blocks.
Imsgpos
Sequence number: 25   Range: 0, 1   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The position of the message number on the output line. This does not affect traceback output.

Imsgpos=0 indicates the leftmost position.
Imsgpos=1 indicates the rightmost position.

Ipagelines
Sequence number: 26   Range: 10, maxint   Default: 55

Settable: Yes
Purpose: General Purpose
Description: The number of lines on the output page.
Inumrows
Sequence number: 27   Range: 0, Imaxrows   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The number of rows in the matrix.
Inumcols
Sequence number: 28   Range: 0, Imaxcols   Default: 0

Settable: Yes
Purpose: General Purpose
Description: The number of structural variables in the matrix.
Inumpinf
Sequence number: 29   Range: 0, Inumrows   Default: n/a

Settable: No
Purpose: EKKSSLV and EKKNSLV
Description: The current number of primal infeasibilities.
Inumdinf
Sequence number: 30   Range: 0, Inumcols   Default: n/a

Settable: No
Purpose: EKKSSLV and EKKNSLV
Description: The current number of dual infeasibilities.
Imodelmask
Sequence number: 31   Range: 0, 8191   Default: 0

Settable: Yes
Purpose: EKKGTMD and EKKPTMD
Description: The bit mask that determines which parts of the matrix are written or read by EKKPTMD or EKKGTMD. See "Control Variable Bit Masks" for information on bit masks.

0=Imodelmask selects all of the parts in the matrix.
Imodelmask selects the common block.
Imodelmask selects the row and column selection lists.
Imodelmask selects the names of the rows and columns.
Imodelmask selects the status of each variable.
16  Imodelmask selects the activity values of each variable.
32  Imodelmask selects the dual values and the reduced costs.
64  Imodelmask selects the lower bounds.
128  Imodelmask selects the upper bounds.
256  Imodelmask selects the input costs.
512  Imodelmask selects the matrix elements.
1024  Imodelmask selects the scales.
2048  Imodelmask selects the presolve information.
4096  Imodelmask selects integer information.

Iprtinfomask
Sequence number: 32   Range: 0, 1023   Default: 31

Settable: Yes
Purpose: EKKPRTS
Description: The solution information bit mask for EKKPRTS. See "Control Variable Bit Masks" for information on bit masks.

0=Iprtinfomask selects all of the parts for printing by EKKPRTS. This is equivalent to setting Iprtinfomask to 63.
Iprtinfomask selects the statistics.
Iprtinfomask selects the iteration count, the value of the objective function, and the problem status.
Iprtinfomask selects the names of the columns and rows.
Iprtinfomask selects the status of each variable.
16  Iprtinfomask selects the activity values.
32  Iprtinfomask selects the dual values and reduced costs.
64  Iprtinfomask selects the lower bounds.
128  Iprtinfomask selects the upper bounds.
256  Iprtinfomask selects the input costs.
512  Iprtinfomask selects the matrix elements.

Isolmask
Sequence number: 33   Range: 0, 16   Default: 0

Settable: Yes
Purpose: EKKPRTS
Description: The print matrix bit mask for EKKPRTS. (7) See "Control Variable Bit Masks" for information on bit masks.

0=Isolmask selects all of the parts for printing by EKKPRTS. This is equivalent to setting Isolmask to 15 or 16.
Isolmask selects the rows.
Isolmask selects the columns.
Isolmask selects the nonzero elements of the model.
Isolmask selects the infeasible elements of the model.
16  Isolmask selects the entire matrix.

Iextrablk
Sequence number: 34   Range: 1, maxint   Default: 1,000

Settable: Yes
Purpose: General Purpose
Description: The number of elements in each spare block.
Iqparmaxiter
Sequence number: 35   Range: 0, maxint   Default: 9,999,999

Settable: Yes
Purpose: EKKQSLV
Description: The maximum number of parametric adjustments that will be performed by EKKQPAR.
Ilinelen
Sequence number: 36   Range: 60, 150   Default: 80

Settable: Yes
Purpose: General Purpose
Description: The length of the output line.
Inumnodes
Sequence number: 37   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKMSLV
Description: The maximum node number created so far.
Iintmask
Sequence number: 38   Range: 0, 63   Default: 1

Settable: Yes
Purpose: EKKMSLV
Description: The EKKMSLV log detail bit mask. See "Control Variable Bit Masks" for information on bit masks.

0=Iintmask turns off the printing of the EKKMSLV log line.
Iintmask prints nonzero integer values at integer solutions.
Iintmask does not modify Iloglevel. If this bit is not set, then Iloglevel is set to 0; this is the default.
Iintmask is not used.
Iintmask is not used.
16  Iintmask prints changes in bounds.
32  Iintmask prints nonzero integer values at noninteger solutions.

Ifastits
Sequence number: 39   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: EKKSSLV
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 random strategy addresses this problem, but it is switched off for one of two reasons: a low success rate or an inverse that requires a large amount of storage. The value of Ifastits modifies this pricing change as follows: Ifastits is only useful if random pricing was used to start with, that is, the init parameter of EKKSSLV is set to 2.
Imaxnodes
Sequence number: 40   Range: 0, maxint   Default: 9,999,999

Settable: Yes
Purpose: EKKMSLV
Description: The maximum number of nodes to evaluate.
Imaxsols
Sequence number: 41   Range: 0, maxint   Default: 9,999,999

Settable: Yes
Purpose: EKKMSLV
Description: The maximum number of feasible integer solutions to find.
Inumsols
Sequence number: 42   Range: 0, Imaxsols   Default: 0

Settable: No
Purpose: EKKMSLV
Description: The number of integer solutions found so far.
Inumints
Sequence number: 43   Range: 0, Imaxints   Default: 0

Settable: No
Purpose: EKKMSLV
Description: The number of individual integer variables.
Inumsets
Sequence number: 44   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKMSLV
Description: The number of sets.
Inumunsat
Sequence number: 45   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKMSLV
Description: The number of integer variables at fractional values.
Ivector
Sequence number: 46   Range: 0, 1   Default: 1

Settable: Yes
Purpose: General Purpose
Description: IBM Vector Facility flag. The presence of the IBM Vector Facility on your mainframe processor will be detected automatically, and the value of Ivector will be set to 1. If your mainframe processor does not have a Vector Facility, Ivector will be set to 0. If your mainframe processor does have a Vector Facility, but you choose not to use it, you should explicitly set Ivector to 0.

Ivector=0 indicates not to use the Vector Facility.
Ivector=1 indicates that you have the Vector Facility and want to use it.

Iprobstat
Sequence number: 47   Range: -1, 6   Default: -1

Settable: No
Purpose: EKKSSLV, EKKBSLV, EKKQSLV, EKKMSLV, EKKMPRE, and EKKNSLV
Description: The problem status. Iprobstat is set as follows:

If Iprobstat = -1, Iprobstat has not been set by the solve subroutine.
If Iprobstat = 0, the solve subroutine completed successfully.
If Iprobstat = 1, the problem is continuous infeasible.
If Iprobstat = 2, the problem is continuous unbounded.
If Iprobstat = 3, the solve subroutine has stopped on the maximum number of iterations.
If Iprobstat = 4, the solve subroutine has stopped because no solution has been found.
If Iprobstat = 5, the solve subroutine has stopped on the maximum number of solutions.
If Iprobstat = 6, the solve subroutine has stopped because of lack of storage or file space.

Imajorits
Sequence number: 48   Range: 0, 999   Default: 30

Settable: Yes
Purpose: EKKQSLV and EKKLPDC
Description: The maximum number of decomposition iterations.

For EKKLPDC 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 elements of dspace is required for a quadratic application, so Imajorits should not be set too large.

Iprintsens
Sequence number: 49   Range: 0, 1023   Default: 0

Settable: Yes
Purpose: EKKSOBJ, EKKSBND, and EKKPRTS
Description: The sensitivity information printing bit mask. See "Control Variable Bit Masks" for information on bit masks. Iprintsens controls what information created by EKKSOBJ or EKKSBND is printed by EKKPRTS. By default, no information relating to sensitivity analysis is printed.

For EKKPRTS output of EKKSOBJ results:
Iprintsens the range of the objective function coefficient up and down is printed.
Iprintsens the objective function values at the range points are printed.
Iprintsens the row or column that enters the basis is printed.
Iprintsens the row or column that leaves the basis is printed.

For EKKPRTS output of EKKSBND 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.

Imaxints
Sequence number: 50   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: EKKMSLV
Description: The maximum number of integer variables. If Imaxints is set to a positive number, n, before calling EKKMPS or EKKIMDL, space will be allocated in dspace for n integer variables. If Imaxints is set to a negative number (-n) before calling EKKMPS, space will be allowed for an additional n integer variables. If the MPS file has no integer markers, then Imaxints is ignored. The current number of integer variables is set by the integer markers in the MPS file or the nints argument for EKKIMDL. Subsequent calls to EKKMPS or EKKIMDL can reset the current number of integer variables up to Imaxints.
Imaxsets
Sequence number: 51   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: EKKMSLV
Description: The maximum number of sets. If Imaxsets is set to a positive number, n, before calling EKKMPS or EKKIMDL, space will be allocated in dspace for n sets. If Imaxsets is set to a negative number (-n) before calling EKKMPS, space will be allowed for an additional n sets. If the MPS file has no integer markers, then Imaxsets is ignored. The current number of sets is set by the integer markers in the MPS file or the nsets argument for EKKIMDL. Subsequent calls to EKKMPS or EKKIMDL can reset the current number of sets up to Imaxsets.
Istrategy
Sequence number: 52   Range: 0, 63   Default: 1

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
Description: The bit mask that selects various steps of the MIP algorithm. Istrategy affects EKKMPRE preprocessing and supernode processing in EKKMSLV. See "Control Variable Bit Masks" for information on bit masks.
0 = Istrategy specifies probing on all variables.

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, EKKMSLV will try setting them first to one and then to zero, and use probing to build an implication list for each direction.

Istrategy means use solution strategies that assume a valid integer solution has been found. EKKMSLV 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 EKKMSLV 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.

Istrategy means take the branch opposite the maximum pseudo-cost. Normally, EKKMSLV 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, EKKMSLV 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.

Istrategy means compute new pseudo-costs as variables are branched on. Pseudo-costs, whether assigned by the user or by EKKMSLV, 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 EKKMSLV, 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 EKKMSLV. 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 EKKMSLV.

32  Istrategy means compute pseudo-costs for satisfied variables as well as for unsatisfied variables. If the 16 bit is also one, EKKMSLV 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.

Imaxintinfo
Sequence number: 53   Range: -maxint, maxint   Default: 0

Settable: Yes
Purpose: EKKMSLV
Description: The maximum amount of integer information. Imaxintinfo is the maximum allowed size of the sum of the sizes of the sets, plus the number of variables not in sets. (Thus, if a variable is a member of more than one set, it should be counted for each occurrence.) If Imaxintinfo is set to a positive number, n, before calling EKKMPS or EKKIMDL, space will be allocated in dspace for n doublewords of integer information. If Imaxintinfo is set to a negative number (-n) before calling EKKMPS, space will be allowed for an additional n doublewords of integer information. If the MPS file has no integer markers, then Imaxintinfo is ignored. The current amount of integer information is set by the integer markers in the MPS file or the ntotinfo argument for EKKIMDL. Subsequent calls to EKKMPS or EKKIMDL can reset the current amount of integer information up to Imaxintinfo doublewords.
Ithreshold
Sequence number: 54   Range: 0, maxint   Default: 1

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
Description: Number of integer variables that must be fixed for supernode processing to continue. In EKKMPRE, the current phase ends and one or more variables are fixed before the next phase begins. In EKKMSLV, a branch is performed if both of the following are true:
Iheurpass
Sequence number: 55   Range: 0, maxint   Default: 1

Settable: Yes
Purpose: EKKMPRE
Description: The number of heuristic passes to be made by EKKMPRE. This does not affect EKKMSLV supernode processing.
Isupertol
Sequence number: 56   Range: 0, maxint   Default: Number of 0-1 variables

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
Description: The number of branches allowed inside a supernode before supernode processing ends. EKKMSLV supernode processing ends if all of the following are true:
Iroword
Sequence number: 57   Range: -1, 4   Default: 3

Settable: Yes
Purpose: EKKBSLV and EKKQSLV interior (alg = -1).
Description: The row ordering method indicator.
Iordunit
Sequence number: 58   Range: -1, 99   Default: -1

Settable: Yes
Purpose: EKKBSLV
Description: The row ordering read and write logical unit.
If Iroword is negative, then Iordunit must be set to a valid logical unit number, otherwise an error will occur.
Imiplength
Sequence number: 59   Range: 0, maxint   Default: 0

Settable: Yes
Purpose: EKKMSLV
Description: The amount of extra information that is saved and restored by the user exit subroutine EKKNODU. This is set by the user exit subroutine EKKNODU. An array of integer fullwords of length Imiplength is saved at each node. It is saved for use by the user exit subroutine EKKNODU.
Iiterbnum
Sequence number: 60   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKBSLV
Description: The current number of iterations EKKBSLV has performed.
Ipricetype
Sequence number: 61   Range: 0, 1   Default: 0

Settable: Yes
Purpose: EKKNSLV
Description: The type of pricing for EKKNSLV.
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.
Inumcpu
Sequence number: 62   Range:-3   Inumcpu   Itotalcpu    128 Default: 0

Settable: Yes
Purpose: Enables parallel execution, and identifies subordinate processes.
Description: The initial value of Inumcpu determines the number of subordinate processes to be spawned. After subordinate processes have been spawned, the value of Inumcpu is reset, and this new value identifies subordinate processes.
If initial the value of Inumcpu is -3 , then the result will be the same as if the value of Inumcpu was -2. This is provided for backward compatibility with OSLP V1.
If the initial value of Inumcpu is -2 , then subordinate processes will be initiated on all available processors listed in the options file except the first, on which the master process in running. (One can still get a subordinate process initiated on the processor on which the master process is running by entering the name of this processor both first and second in the options file list.)
An initial value of -1  is not valid for Inumcpu. After subordinate processes have been spawned, any process can determine is it is a subordinate process by fetching and inspecting the current value of Inumcpu. If this value is -1 , then the process is a subordinate process.
If the initial value of Inumcpu is 0 , then no subordinate processe will be spawned, and master process alone will execute in serial mode.
If the initial value of Inumcpu is 1 , then just one subordinate process will be spawned, and this process will be run on the first processor in the options file list (on which the master process may also be running).
If the value of Inumcpu is greater than 1 , then subordinate processes will be initiated on the first through Inumcputh processors in the options file list. If the name of a processor is repeated in the first Inumcpu entries of the options file list, then multiple processes will be spawned on that processor.
Note: If no parallel environment exists, or if the number of processes requested is more than the number of entries in the options list or more than is achievable in the existing parallel environment, then the attempt to spawn subordinate processes fails, and the master process alone continues to run in serial mode.
Iprobstat2
Sequence number: 63   Range: -1, 3   Default: -1

Settable: No
Purpose: EKKSCAL
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 EKKSCAL 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:

If Iprobstat2 = -1, Iprobstat2 has not been set.
If Iprobstat2 = 0, both the unscaled and scaled problems are feasible.
If Iprobstat2 = 1, the unscaled problem is feasible, and the scaled problem is infeasible.
If Iprobstat2 = 2, the unscaled problem is infeasible, and the scaled problem is feasible.
If Iprobstat2 = 3, both the unscaled and scaled problems are infeasible.

Ismdltypemask
Sequence number: 64   Range: 0, 7   Default: 0

Settable: No
Purpose: EKKSMDL
Description: The bit mask that indicates the type of model read in by EKKSMDL. See "Control Variable Bit Masks" for information on bit masks.

0=Ismdltypemask indicates that a model has not been read in by EKKSMDL or no model information was detected in the spreadsheet workfile passed to EKKSMDL.
Ismdltypemask indicates that linear data was detected in the spreadsheet workfile passed to EKKSMDL and a call to EKKLMDL has been made. In addition, EKKNAME was called.
Ismdltypemask indicates that quadratic data was detected in the spreadsheet workfile passed to EKKSMDL and a call to EKKQMDL has been made.
Ismdltypemask indicates that integer data was detected in the spreadsheet workfile passed to EKKSMDL and a call to EKKIMDL has been made.

Itotalcpu
Sequence number: 65   Range: 1, 128 Default: 1

Settable: No
Purpose: EKKIGET, EKKIGET, EKKBSLV, EKKMSLV
Description: The value of Itotalcpu is the total number of processes created.
Iwhichcpu
Sequence number: 66   Range: 0, 7   Default: 0

Settable: No
Purpose: EKKIGET, EKKIGET, EKKBSLV, EKKMSLV
Description: The value of Iwhichcpu is the number of the process that retrieved this value with EKKIGET. (The master process runs as process number 0. Subordinate processes are numbered 1, 2, ..., Inumcpu).
Istripes
Sequence number: 67   Range: 0, Inumcol   Default: 0

Settable: Yes
Purpose: EKKBSLV
Description: The number of stripes to be used in the parallel Cholesky factorization done by EKKBSLV. The value of Istripes should be at least as large as the number of subordinate processes.

If the value of Istripes is 0 (the default), then a reasonable number of stripes is determined based on the number of subordinate processes spawned, and the size and the density of the matrix whose Cholesky factors are sought. For small numbers of subordinate processes, setting the value of Istripes to 0 should give the best results. For large numbers of processes, you might find it beneficial to raise the value of Iloglevel to obtain tuning information, and to experiment with different values of Istripes, because the default values used by EKKBSLV are for an "average" Cholesky factorization.

If the value of Istripes is positive, and EKKBSLV is operating in serial mode, EKKBSLV still stripes the Cholesky factorization. This can have a beneficial effect for some large problems, because it improves the cache behavior of IBM RISC System/6000 processors.

Inumelq
Sequence number: 69   Range: 0, maxint   Default: 0

Settable: No
Purpose: EKKQMPS, EKKQMDL
Description: The number of elements or columns in the quadratic 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.
Iordthrsh
Sequence number: 70   Range: 0, maxint   Default: 0

Settable: Yes
Purpose: EKKBSLV
Description: The ordering threshold. If Iordthrsh is greater then zero, then rows with more than Iordthrsh non-zeros will put at the end during the row re-ordering done in EKKBSLV.
Ilpdcflag
Sequence number: 71   Range: 0, maxint   Default: 0

Settable: Yes
Purpose: EKKLPDC
Description: The number of blocks into which EKKLPDC will attempt to decompose the constraint matrix. If the value of Ilpdcflag is greater then zero, then EKKLPDC 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, EKKLPDC will not do so. If the value of Ilpdcflag is equal to zero, then EKKLPDC 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.

Real Control Variables

Name no. Name no. Name no.
Rbbcutoff16 Rbestest29 Rbestposs28
Rbestsol23 Rchangeweight15 Rcholabstol10
Rcholtinytol11 Rdccutoff35 Rdegscale22
Rdensethr32 Rdobjval36 Rdweight 17
Rfixvar1 8 Rfixvar29 Rimprove25
Riweight24 Rlambdaval34 Rmaxmin3
Rmufactor4 Rmuinit31 Rmulimit5
Rmulinfac12 Rnetsamp44 Robjvalue18
Robjweight33 Rpdgaptol41 Rpdstepmult42
Rpertdiag43 Rprintcpu45 Rprojtol13
Rpweight14 Rrgfactor6 Rrglimit7
Rslambda37 Rslambdadelta39 Rslambdalim38
Rstepmult30 Rsumdinf20 Rsumpinf19
Rtarget26 Rthreshold40 Rtoldinf 2
Rtolint27 Rtolmps21 Rtolpinf 1
Name
Comments
Rtolpinf
Sequence number: 1   Range: 10 -12, 10 -1   Default: 10 -8

Settable: Yes
Purpose: EKKSSLV and EKKBSLV
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 EKKPRSL 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.
Rtoldinf
Sequence number: 2   Range: 10 -12, 10 -1   Default: 10 -7

Settable: Yes
Purpose: EKKSSLV and EKKBSLV
Description: The allowed amount of dual infeasibility. This variable is the dual equivalent to the primal variable Rtolpinf.
Rmaxmin
Sequence number: 3   Range: -1.0, 1.0   Default: 1.0

Settable: Yes
Purpose: EKKSSLV, EKKNSLV, and EKKBSLV
Description: The weight of the linear objective.

Rmaxmin=1.0 minimizes the objective function.
Rmaxmin=-1.0 maximizes the objective function.
Rmaxmin=0.0 causes the objective function to be ignored, and optimality to be declared as soon as a feasible solution is found.

Rmufactor
Sequence number: 4   Range: 10 -6, 0.99999   Default: 0.1

Settable: Yes
Purpose: EKKBSLV
Description: The reduction factor for &mu. in the primal barrier algorithm. The barrier parameter is multiplied by Rmufactor when it is determined that the value of &mu. should be reduced.
Rmulimit
Sequence number: 5   Range: 10 -17, 1.0   Default: 10 -8

Settable: Yes
Purpose: EKKBSLV
Description: The lower limit for &mu. in the primal barrier algorithm. This is the lower limit for &mu. and is scaled in the same way as Rmuinit. When &mu. is reduced below Rmulimit, then the final value of &mu. is computed. When the next target level for the reduced gradient is reached, the barrier method will stop.

The accuracy of the final solution may depend on the setting of Rmulimit. However, it may be advisable not to make this value too small, and instead allow the simplex method to take over and find an optimal basic solution. You can do this by setting the parameter sslvswch of EKKBSLV to a value >=2.

Rrgfactor
Sequence number: 6   Range: 10 -6, 0.99999   Default: 0.1

Settable: Yes
Purpose: EKKBSLV
Description: The reduced gradient target reduction factor. The next target reduced gradient norm is computed by multiplying the current reduced gradient by Rrgfactor.
Rrglimit
Sequence number: 7   Range: 0.0, 1.0   Default: 0.0

Settable: Yes
Purpose: EKKBSLV
Description: The reduced gradient limit for the primal barrier algorithm. The barrier primal algorithm terminates if the reduced gradient norm falls below this limit.
Rfixvar1
Sequence number: 8   Range: 0.0, 10 -3   Default: 10 -7

Settable: Yes
Purpose: EKKBSLV
Description: The tolerance for fixing variables in the barrier method when infeasible. If some of the variables in a new solution approach their bounds within the tolerance Rfixvar1, they are fixed to their bounds and not used in the algorithm. This is quite common because some variables must be at bound in all feasible solutions for many models. In general, Rfixvar1 should be set to a larger value than Rfixvar2 because recomputing the artificial vector compensates for small infeasibilities introduced by fixing variables when infeasible.
Rfixvar2
Sequence number: 9   Range: 0.0, 10 -3   Default: 10 -8

Settable: Yes
Purpose: EKKBSLV
Description: The tolerance for fixing variables in the barrier method when feasible. If some of the variables in a new solution approach their bounds within the tolerance Rfixvar2, they are fixed to their bounds and not used in the algorithm. In general, Rfixvar2 should be set to a small value to avoid introducing infeasibilities.
Rcholabstol
Sequence number: 10   Range: 10 -30, 10 -6   Default: 10 -15

Settable: Yes
Purpose: EKKBSLV
Description: The absolute pivot tolerance for Cholesky factorization. If a diagonal value drops below Rcholabstol during factorization but is larger than Rcholtinytol, then its value is set to Rcholabstol.
Rcholtinytol
Sequence number: 11   Range: 10 -30, 10 -6   Default: 10 -18

Settable: Yes
Purpose: EKKBSLV
Description: The cut-off tolerance for Cholesky factorization. Rcholabstol(8) If a diagonal value drops below Rcholtinytol, the row is essentially treated as dependent and ignored in the factorization. Rcholtinytol should be set to a value less than or equal to
Rmulinfac
Sequence number: 12   Range: 0.0, 1.0   Default: 0.0

Settable: Yes
Purpose: EKKBSLV
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.
Rprojtol
Sequence number: 13   Range: 0.0, 1.0   Default: 10 -6

Settable: Yes
Purpose: EKKBSLV
Description: The projection error tolerance. If the projected direction vector is denoted p, and the value of <concat biA bip concat / concat bip concat> exceeds this tolerance, as determined when the check triggered by Inullcheck 0 is made, then an effort will be made to project the direction into the null space of the constraint matrix, up to a maximum of (Imaxprojns - 1) additional times.
Rpweight
Sequence number: 14   Range: 10 -12, 10 10   Default: 0.1

Settable: Yes
Purpose: EKKSSLV
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 EKKSSLV where the parameter init is set to 3.
Rchangeweight
Sequence number: 15   Range: 10 -12, 1.0   Default: 0.5

Settable: Yes
Purpose: EKKSSLV
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.
Rbbcutoff
Sequence number: 16   Range: -10 20, maxreal   Default: 10 31

Settable: Yes
Purpose: EKKMSLV
Description: The cutoff for the branch and bound. All branches where the objective is at or above Rbbcutoff will be pruned. The falue 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.
Rdweight
Sequence number: 17   Range: 0.0, 1.0   Default: 0.1

Settable: Yes
Purpose: EKKSSLV
Description: The proportion of the feasible objective that is used when the current solution is dual infeasible.
Robjvalue
Sequence number: 18   Range: -maxreal, maxreal   Default: n/a

Settable: No
Purpose: EKKSSLV, EKKBSLV, EKKMSLV, EKKQSLV, and EKKNSLV
Description: The value of the objective function.
Rsumpinf
Sequence number: 19   Range: -maxreal, maxreal   Default: n/a

Settable: No
Purpose: EKKSSLV and EKKNSLV
Description: The sum of the primal infeasibilities.
Rsumdinf
Sequence number: 20   Range: -maxreal, maxreal   Default: n/a

Settable: No
Purpose: EKKSSLV and EKKNSLV
Description: The sum of the dual infeasibilities.
Rtolmps
Sequence number: 21   Range: -maxreal, maxreal   Default: 10 -12

Settable: Yes
Purpose: EKKMPS, EKKBASI, EKKQMPS, and EKKSMDL
Description: The zero tolerance for MPS and spreadsheet data.

If the absolute value of any of the following:

is less than Rtolmps, 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 workfile 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 workfile, and for row and column bounds in a constraint cell in a spreadsheet workfile, if the absolute value of an element is less than Rtolmps, it is set to zero.

Rdegscale
Sequence number: 22   Range: 0.0, maxreal   Default: 1.0

Settable: Yes
Purpose: EKKMSLV
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 EKKMSLV 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.

Rbestsol
Sequence number: 23   Range: -maxreal, maxreal   Default: 10 31

Settable: No
Purpose: EKKMSLV
Description: The best feasible integer solution found so far.
Riweight
Sequence number: 24   Range: 0.0, maxreal   Default: 1.0

Settable: Yes
Purpose: EKKMSLV
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.
Rimprove
Sequence number: 25   Range: -maxreal, maxreal   Default: 10 -5

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
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.

Rtarget
Sequence number: 26   Range: -maxreal, maxreal   Default: 5% worse than the continuous solution

Settable: Yes
Purpose: EKKMSLV
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.

Rtolint
Sequence number: 27   Range: 10 -12, 10 -1   Default: 10 -6

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
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 best to declare the solution valid when all fractional values are less than 0.005, and then round the solution after processing by EKKMSLV or EKKMPRE.
Rbestposs
Sequence number: 28   Range: -maxreal, maxreal   Default: The continuous solution

Settable: No
Purpose: EKKMSLV
Description: The best possible solution.
Rbestest
Sequence number: 29   Range: -maxreal, maxreal   Default: 0.0

Settable: No
Purpose: EKKMSLV
Description: The best estimated solution.
Rstepmult
Sequence number: 30   Range: 0.01, 0.99999   Default: 0.99

Settable: Yes
Purpose: EKKBSLV
Description: The step-length multiplier for the primal barrier algorithm. The maximum feasible step-length in a chosen direction is multiplied by Rstepmult which must be less than 1 to prevent moving beyond the barrier. A step-length greater than 1 indicates numerical difficulties.
Rmuinit
Sequence number: 31   Range: 10 -20, 10 6   Default: 0.1

Settable: Yes
Purpose: EKKBSLV
Description: The initial value of m for the primal barrier algorithm. This value is scaled internally by a model-dependent quantity: ( 1 + artval ) / Inumcols , where artval is the initial value of the artificial variable and Inumcols is the number of columns. If the value of Robjweight is zero, then the phase 2 initial value of m is Rmuinit*(1 + dvlobj ) / Inumcols, where dvlobj is the true objective. The scaled value is printed in a message.

If you expect the objective function values (concat bic concat) to get very large, set Rmuinit to 1000 before calling EKKBSLV.

Rdensethr
Sequence number: 32   Range: -maxreal, maxreal   Default: 0.7

Settable: Yes
Purpose: EKKBSLV
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.

Robjweight
Sequence number: 33   Range: 0.0, 10 8   Default: 0.1

Settable: Yes
Purpose: EKKBSLV
Description: The weight given to the true objective in primal composite phase 1. In phase 1 of the primal barrier method, the objective coefficients will consist of a 1.0 for the artificial column and Robjweight multiplied by the true objective for the real columns. In general, Robjweight should be small if there is some difficulty in finding any feasible solutions and big if the feasible solution space is large, or if the first feasible solutions obtained are undesirable.
Rlambdaval
Sequence number: 34   Range: 0.0, maxreal   Default: 0.0

Settable: Yes
Purpose: EKKQSLV
Description: The value of the EKKQPAR parameter &lambda..
Rdccutoff
Sequence number: 35   Range: -maxreal, maxreal   Default: -10 31

Settable: Yes
Purpose: EKKQSLV
Description: The value of the EKKQSLV decomposition cutoff.
Rdobjval
Sequence number: 36   Range: -maxreal, maxreal   Default: n/a

Settable: No
Purpose: EKKBSLV
Description: The value of the dual objective for EKKBSLV.
Rslambda
Sequence number: 37   Range: -maxreal, maxreal   Default: 0.0

Settable: Yes
Purpose: EKKSPAR
Description: The value of the EKKSPAR parameter &lambda..
Rslambdalim
Sequence number: 38   Range: -maxreal, maxreal   Default: 1.0

Settable: Yes
Purpose: EKKSPAR
Description: The limiting value for the EKKSPAR parameter &lambda..
Rslambdadelta
Sequence number: 39   Range: -maxreal, maxreal   Default: 0.1

Settable: Yes
Purpose: EKKSPAR
Description: The incrementing value for the EKKSPAR parameter &lambda..
Rthreshold
Sequence number: 40   Range: 0.0, maxreal   Default: 0.0

Settable: Yes
Purpose: EKKMSLV and EKKMPRE
Description: The supernode processing threshold. If Rthreshold is 0.0, the default, then EKKMPRE sets it to the smaller of 10 -4 × objective function + 10 -12 and 10 -3 × distance from the continuous solution to the cutoff, and EKKMSLV sets Rthreshold to 10 times this value.

In EKKMPRE, the current phase ends and one or more variables are fixed before the next phase begins. In EKKMSLV, a branch is performed if both of the following are true:

Rpdgaptol
Sequence number: 41   Range: 10 -12, 10 -1   Default: 10 -7

Settable: Yes
Purpose: EKKBSLV
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.
Rpdstepmult
Sequence number: 42   Range: 0.01, 0.999999   Default: 0.99995

Settable: Yes
Purpose: EKKBSLV
Description: The primal-dual barrier method step-length multiplier. The maximum feasible step-length chosen by the primal-dual (or primal-dual with predictor-corrector) algorithm is multiplied by Rpdstepmult. This number must be less than 1 to prevent moving beyond the barrier. An actual step-length greater than 1 indicates numerical difficulties.
Rpertdiag
Sequence number: 43   Range: 0.0, 10 -6   Default: 10 -12

Settable: Yes
Purpose: EKKBSLV
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 EKKBSLV. This helps avoid spurious indications of rank deficiency.
Rnetsamp
Sequence number: 44   Range: 0.0, 1.0   Default: 0.05

Settable: Yes
Purpose: EKKNSLV
Description: The sample size for the EKKNSLV pricing algorithm. Rnetsamp gives the percent of arcs for which reduced costs are computed during the pricing step of EKKNSLV. This is used if Ipricetype is set to 1.
Rprintcpu
Sequence number: 45   Range: 0.0, maxreal   Default: 0.0

Settable: Yes
Purpose: General Purpose
Description: Switch to print CPU time used by Optimization Library subroutines. If Rprintcpu is set to a positive value x.xx, then any Optimization Library subroutine that takes more than x.xx seconds will print a message indicating how much time the subroutine took, and the total CPU time used thus far. The times are printed to two decimal places and so may be printed as zero if Rprintcpu is small. Also, the subroutine time may not be correct after a call to EKKRSET that changes Rprintcpu.

If Rprintcpu is set to 0.0, then no messages about CPU time will be issued. Note that if the timer returns a nonzero return code, timings are not printed. (For example, when sampling using VS FORTRAN Interactive Debug.)

For VM, MVS, and OS/390 platforms, the VS FORTRAN function CPUTIME is used to compute the CPU time. For AIX/6000, the function MCLOCK is used. For SunOS, the FORTRAN function ETIME is used. For PCs, CPU time is equated to wall clock time.


Index Control Variables

 
Name no. Name no. Name no.
Narcid62 Nblockcol25 Nblockelem27
Nblockrow26 Ncolaux30 Ncolcc22
Ncollower 6 Ncolnames13 Ncolrc18
Ncolrcosts 9 Ncolscales15 Ncolsol 7
Ncolstat10 Ncolupper 8 Nelemcc19
Nelemrc20 Nfirstfree23 Nintinfo28
Nlastfree24 Nlevel63 Nobjective11
Nparent64 Npreorder65 Npresolve16
Nqcol68 Nqelem69 Nqrow67
Nrevpreorder66 Nrowacts 2 Nrowaux29
Nrowcc17 Nrowduals 4 Nrowlower 1
Nrownames12 Nrowrc21 Nrowscales14
Nrowstat 5 Nrowupper 3 Nsbndcdnb40
Nsbndcdne44 Nsbndcdnl46 Nsbndcdnv42
Nsbndcupb39 Nsbndcupe43 Nsbndcupl45
Nsbndcupv41 Nsbndrdnb48 Nsbndrdne52
Nsbndrdnl54 Nsbndrdnv50 Nsbndrupb47
Nsbndrupe51 Nsbndrupl53 Nsbndrupv49
Nsellistcol55 Nsellistrow56 Nsobjdnc32
Nsobjdne36 Nsobjdnl38 Nsobjdnv34
Nsobjupc31 Nsobjupe35 Nsobjupl37
Nsobjupv33 Nsparclo60 Nsparcost57
Nsparcup61 Nsparrlo58 Nsparrup59
Name
Comments
Nrowlower
Sequence number: 1

Description: The Fortran index into dspace for the first element of row lower bounds.
Nrowacts
Sequence number: 2

Description: The Fortran index into dspace for the first element of row activities.
Nrowupper
Sequence number: 3

Description: The Fortran index into dspace for the first element of row upper bounds.
Nrowduals
Sequence number: 4

Description: The Fortran index into dspace for the first element of row slacks. (9)
Nrowstat
Sequence number: 5

Description: The Fortran index into mspace for the first element of the row status vector. Nrowstat and Ncolstat give the locations of the row and column status vectors respectively. The status vectors are one-dimensional integer arrays of fullwords. The numbering of the bits in these vectors follows the bit numbering conventions for VS FORTRAN. All 32 bits are used internally by Optimization Library modules, but only three of these bits are important to the user: EKKMSLV will override any of these if they are invalid (for example, if the up bit is set, but the column (variable) is at or above its upper bound).

In practice this translates into:

 
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.
You may set up a basis using this information and then call EKKSSLV with init set to a value other than 3.

When init is set to 3, only the basic bits have meaning. The primal values and bounds bits will be used for other things.

Ncollower
Sequence number: 6

Description: The Fortran index into dspace for the first element of column lower bounds.
Ncolsol
Sequence number: 7

Description: The Fortran index into dspace for the first element of the solution (column activities).
Ncolupper
Sequence number: 8

Description: The Fortran index into dspace for the first element of column upper bounds.
Ncolrcosts
Sequence number: 9

Description: The Fortran index into dspace for the first element of reduced costs.
Ncolstat
Sequence number: 10

Description: The Fortran index into mspace for the first element of the column status vector. See the description of Nrowstat for more information about Ncolstat.
Nobjective
Sequence number: 11

Description: The Fortran index into dspace for the first element of column costs (objective function coefficients).
Nrownames
Sequence number: 12

Description: The Fortran index into dspace for the first element of row names.
Ncolnames
Sequence number: 13

Description: The Fortran index into dspace for the first element of column names.
Nrowscales
Sequence number: 14

Description: The Fortran index into dspace for the first element of row scale factors. The scaling region contains scale factors that are applied to each matrix element ai j as follows:
        scaled ai j = (original ai j * rowscale i ) / colscale j
Ncolscales
Sequence number: 15

Description: The Fortran index into dspace for the first element of column scale factors. See the description of Nrowscales for more information about Ncolscales.
Npresolve
Sequence number: 16

Description: The Fortran index into mspace for the first element of the presolve region.
Nrowcc
Sequence number: 17

Description: The Fortran index into mspace for the first element of rows for matrix (column copy).
Ncolrc
Sequence number: 18

Description: The Fortran index into mspace for the first element of columns for matrix (row copy).
Nelemcc
Sequence number: 19

Description: The Fortran index into dspace for the first element of elements for matrix (column copy).
Nelemrc
Sequence number: 20

Description: The Fortran index into dspace for the first element of columns for matrix (row copy).
Nrowrc
Sequence number: 21

Description: The Fortran index into mspace for the first element of row starts (row copy).
Ncolcc
Sequence number: 22

Description: The Fortran index into mspace for the first element of column starts (column copy).
Nfirstfree
Sequence number: 23

Description: The Fortran index into dspace of the first element of free space.
Nlastfree
Sequence number: 24

Description: The Fortran index into dspace of the last element of free space.
Nblockcol
Sequence number: 25

Description: The Fortran index into mspace for the first element of column entries for the latest block of matrix elements stored. If the elements of the constraint matrix have been stored as one block, or if multiple blocks have been consolidated with a call to EKKNWMT, then Nblockcol gives the location of the first element of the "IA" array, described in the discussion of Storage Modes, for the entire constraint matrix.
Nblockrow
Sequence number: 26

Description: The Fortran index into mspace for the first element of row entries for the latest block of matrix elements stored. If the elements of the constraint matrix have been stored as one block, or if multiple blocks have been consolidated with a call to EKKNWMT, then Nblockrow gives the location of the first element of the "JA" array, described in the discussion of Storage Modes, for the entire constraint matrix.
Nblockelem
Sequence number: 27

Description: The Fortran index into dspace for the first element of the latest block of matrix elements stored. If the elements of the constraint matrix have been stored as one block, or if multiple blocks have been consolidated with a call to EKKNWMT, then Nblockelem gives the location of the first element of the "AR" array, described in the discussion of Storage Modes, for the entire constraint matrix.
Nintinfo
Sequence number: 28

Description: The Fortran index into mspace for the first element of integer information. Nintinfo is an index to information about each integer variable. For each integer variable there are four fields. For example, information for the sixth integer variable would start at mspace ×
(Nintinfo + (5 × 4)).

The fields for each integer variable are organized as follows:

Nrowaux
Sequence number: 29

Description: The Fortran index into dspace for the first element of row auxiliary solve information. Nrowaux and Ncolaux give the location of auxiliary solve information regions. These regions are only set up if:
  1. Your model is infeasible or unbounded.
  2. EKKSSLV has been stopped at your request and a perturbation is in effect. (Note that this could occur if EKKSSLV was called implicitly during EKKMSLV or EKKBSLV processing. The primal cases are also applicable to EKKNSLV.)
  3. EKKQSLV has encountered indefiniteness in the quadratic matrix Q.
Ncolaux
Sequence number: 30

Description: The Fortran index into dspace for the first element of column auxiliary solve information. See the description of Nrowaux for more information about Ncolaux.
Nsobjupc
Sequence number: 31

Description: The Fortran index into dspace created by EKKSOBJ for the first element of the array of cost upper limits. For each individual variable, this is the largest cost coefficient that maintains the current basis. An increase beyond this cost causes a change in basis.
Nsobjdnc
Sequence number: 32

Description: The Fortran index into dspace created by EKKSOBJ for the first element of the array of cost lower limits. For each individual variable, this is the smallest cost coefficient that maintains the current basis. A decrease below this cost causes a change in basis.
Nsobjupv
Sequence number: 33

Description: The Fortran index into dspace created by EKKSOBJ for the first element of ranges of the objective function values corresponding to the upper limits on cost coefficients indexed by Nsobjupc.
Nsobjdnv
Sequence number: 34

Description: The Fortran index into dspace created by EKKSOBJ for the first element of ranges of the objective function values corresponding to the lower limits on cost coefficients indexed by Nsobjdnc.
Nsobjupe
Sequence number: 35

Description: The Fortran index into mspace created by EKKSOBJ for the first element of the array of entering rows or columns corresponding to the increased cost coefficients indexed by Nsobjupc. If the cost of an individual variable increases beyond the corresponding entry in the array indexed by Nsobjupc, the row or column in the array indexed by Nsobjupe enters the basis.
Nsobjdne
Sequence number: 36

Description: The Fortran index into mspace created by EKKSOBJ for the first element of the array of entering rows or columns corresponding to the decreased cost coefficients indexed by Nsobjdnc. If the cost of an individual variable decreases below the corresponding entry in the array indexed by Nsobjdnc, the row or column in the array indexed by Nsobjdne enters the basis.
Nsobjupl
Sequence number: 37

Description: The Fortran index into mspace created by EKKSOBJ for the first element of the array of leaving rows or columns corresponding to the increased cost coefficients indexed by Nsobjupc. If the cost of an individual variable increases more than the corresponding entry in the array indexed by Nsobjupc, the row or column in the array indexed by Nsobjupl leaves the basis.
Nsobjdnl
Sequence number: 38

Description: The Fortran index into mspace created by EKKSOBJ for the first element of the array of leaving rows or columns corresponding to the decreased cost coefficients indexed by Nsobjdnc. If the cost of an individual variable decreases below the corresponding entry in the array indexed by Nsobjdnc, the row or column in the array indexed by Nsobjdnl leaves the basis.
Nsbndcupb
Sequence number: 39

Description: The Fortran index into dspace created by EKKSBND for the first element of the upper limits on column bounds. For each individual column, this represents the largest bound that maintains the current basis. Note that for basic variables, this is the upper limit of the lower bound. For nonbasic variables, this is the upper limit of the attained bound. An increase in each bound beyond this limit causes a change in basis.
Nsbndcdnb
Sequence number: 40

Description: The Fortran index into dspace created by EKKSBND for the first element of the lower limits on column bounds. For each individual column, this represents the smallest bound that maintains the current basis. Note that for basic variables, this is the lower limit of the upper bound. For nonbasic variables, this is the lower limit of the attained bound. A decrease in the bound beyond this limit causes a change in basis.
Nsbndcupv
Sequence number: 41

Description: The Fortran index into dspace created by EKKSBND for the first element of the ranges of the objective function values corresponding to the upper limits on column bounds indexed by Nsbndcupb.
Nsbndcdnv
Sequence number: 42

Description: The Fortran index into dspace created by EKKSBND for the first element of ranges of the objective function values corresponding to the lower limits on column bounds indexed by Nsbndcdnb.
Nsbndcupe
Sequence number: 43

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of entering rows or columns corresponding to the upper limits on column bounds indexed by Nsbndcupb. If an individual column bound increases beyond the corresponding entry in the array indexed by Nsbndcupb, the row or column in the array indexed by Nsbndcupe enters the basis.
Nsbndcdne
Sequence number: 44

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of entering rows or columns corresponding to the lower limits on column bounds indexed by Nsbndcdnb. If an individual column bound decreases beyond the corresponding entry in the array indexed by Nsbndcdnb, the row or column in the array indexed by Nsbndcdne enters the basis.
Nsbndcupl
Sequence number: 45

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of leaving rows or columns corresponding to the upper limits on column bounds indexed by Nsbndcupb. If an individual column bound increases beyond the corresponding entry in the array indexed by Nsbndcupb, the row or column in the array indexed by Nsbndcupl enters the basis.
Nsbndcdnl
Sequence number: 46

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of leaving rows or columns corresponding to the lower limits on column bounds indexed by Nsbndcdnb. If an individual column bound decreases below the corresponding entry in the array indexed by Nsbndcdnb, the row or column in the array indexed by Nsbndcdnl leaves the basis.
Nsbndrupb
Sequence number: 47

Description: The Fortran index into dspace created by EKKSBND for the first element of the upper limits on row bounds. For each individual row, this represents the largest bound that maintains the current basis. Note that for basic rows, this is the upper limit of the lower bound. For nonbasic rows, this is the upper limit of the attained bound. An increase in each bound beyond this limit causes a change in basis.
Nsbndrdnb
Sequence number: 48

Description: The Fortran index into dspace created by EKKSBND for the first element of the lower limits on row bounds. For each individual row, this represents the smallest bound that maintains the current basis. Note that for basic rows, this is the lower limit of the upper bound. For nonbasic rows, this is the lower limit of the attained bound. A decrease in each bound below this limit causes a change in basis.
Nsbndrupv
Sequence number: 49

Description: The Fortran index into dspace created by EKKSBND for the first element of the ranges of the objective function values corresponding to the upper limits on row bounds indexed by Nsbndrupb.
Nsbndrdnv
Sequence number: 50

Description: The Fortran index into dspace created by EKKSBND for the first element of ranges of the objective function values corresponding to the lower limits on row bounds indexed by Nsbndrdnb.
Nsbndrupe
Sequence number: 51

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of entering rows or columns corresponding to the upper limits on row bounds indexed by Nsbndrupb. If an individual row bound increases beyond the corresponding entry in the array indexed by Nsbndrupb, the row or column in the array indexed by Nsbndrupe enters the basis.
Nsbndrdne
Sequence number: 52

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of entering rows or columns corresponding to the lower limits on row bounds indexed by Nsbndrdnb. If an individual row bound decreases beyond the corresponding entry in the array indexed by Nsbndrdnb, the row or column in the array indexed by Nsbndrdne enters the basis.
Nsbndrupl
Sequence number: 53

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of leaving rows or columns corresponding to the upper limits on row bounds indexed by Nsbndrupb. If an individual row bound increases beyond the corresponding entry in the array indexed by Nsbndrupb, the row or column in the array indexed by Nsbndrupl leaves the basis.
Nsbndrdnl
Sequence number: 54

Description: The Fortran index into mspace created by EKKSBND for the first element of the array of leaving rows or columns corresponding to the lower limits on row bounds indexed by Nsbndrdnb. If an individual row bound decreases beyond the corresponding entry in the array indexed by Nsbndrdnb, the row or column in the array indexed by Nsbndrdnl leaves the basis.
Nsellistcol
Sequence number: 55

Description: The Fortran index into mspace for the column selection list.
Nsellistrow
Sequence number: 56

Description: The Fortran index into mspace for the row selection list.
Nsparcost
Sequence number: 57

Description: The Fortran index into dspace for the parametric cost (objective) change vector created for EKKSPAR.
Nsparrlo
Sequence number: 58

Description: The Fortran index into dspace for the row lower bounds parametric change vector created for EKKSPAR.
Nsparrup
Sequence number: 59

Description: The Fortran index into dspace for the row upper bounds parametric change vector created for EKKSPAR.
Nsparclo
Sequence number: 60

Description: The Fortran index into dspace for the column lower bounds parametric change vector created for EKKSPAR.
Nsparcup
Sequence number: 61

Description: The Fortran index into dspace for the column upper bounds parametric change vector created for EKKSPAR.
Narcid
Sequence number: 62

Description: The Fortran index into mspace for the first element of the indices of the arcs in the basis. If a value in this array is zero, then the corresponding arc is a slack arc.
Nlevel
Sequence number: 63

Description: The Fortran index into mspace for the first element of the array of node levels.
Nparent
Sequence number: 64

Description: The Fortran index into mspace for the first element of the array of parent nodes. If the parent node is greater than the number of nodes in the graph, the corresponding arc accommodates excess demand at the node.
Npreorder
Sequence number: 65

Description: The Fortran index into mspace for the first element of the preorder traversal array.
Nrevpreorder
Sequence number: 66

Description: The Fortran index into mspace for the first element of the reverse preorder traversal array.
Nqrow
Sequence number: 67

Description: The Fortran index into mspace for the first element of rows for quadratic matrix (column copy) or the Fortran index into mspace for the first element of row entries for quadratic matrix (index copy).
Nqcol
Sequence number: 68

Description: The Fortran index into mspace for the first element of column starts for quadratic matrix (column copy) or the Fortran index into mspace for the first element of column entries for quadratic matrix (index copy).
Nqelem
Sequence number: 69

Description: The Fortran index into dspace for the first element of elements for quadratic matrix (column or index copy).

Character Control Variables

 
Name no. Name no. Name no.
Cbasis6 Cbound5 Cchangebounds 10
Cchangeobj7 Cchangerange9 Cchangerhs8
Cname 1 Cobjective 2 Crange 4
Crhs 3 Csconstrts12 Csekksos114
Csekksos215 Csekksos316 Csekksos417
Csobjective13 Cssolution11   
Name
Comments
Cname
Sequence number: 1

Description: The problem name in the MPS file.
Cobjective
Sequence number: 2

Description: The objective function row name in the MPS file.
Crhs
Sequence number: 3

Description: The RHS name in the MPS file.
Crange
Sequence number: 4

Description: The range name in the MPS file.
Cbound
Sequence number: 5

Description: The bound name in the MPS file.
Cbasis
Sequence number: 6

Description: The basis name in the MPS file.
Cchangeobj
Sequence number: 7

Description: The name of the cost (objective) change row in the MPS file to be used by EKKSPAR. EKKMPS will look for this row in the ROWS section.
Cchangerhs
Sequence number: 8

Description: The name of the RHS change in the MPS file to be used by EKKSPAR. EKKMPS will look for this entry in the RHS section.
Cchangerange
Sequence number: 9

Description: The name of the range change in the MPS file to be used by EKKSPAR. EKKMPS will look for this entry in the RANGES section.
Cchangebounds
Sequence number: 10

Description: The name of the bounds change in the MPS file to be used by EKKSPAR. EKKMPS will look for this entry in the BOUNDS section.
Cssolution
Sequence number: 11

Description: The name of the spreadsheet range(s) containing the adjustable cells.
Csconstrts
Sequence number: 12

Description: The name of the spreadsheet range(s) containing the constraint cells.
Csobjective
Sequence number: 13

Description: The name of the spreadsheet range containing the objective cell.
Csekksos1
Sequence number: 14

Description: The name of the spreadsheet range(s) containing SOS sets of type 1.
Csekksos2
Sequence number: 15

Description: The name of the spreadsheet range(s) containing SOS sets of type 2.
Csekksos3
Sequence number: 16

Description: The name of the spreadsheet range(s) containing SOS sets of type 3.
Csekksos4
Sequence number: 17

Description: The name of the spreadsheet range(s) containing SOS sets of type 4 (general integer variables).

Footnotes:

(7) Isolmask replaced Iprtmtrxmask from OSL Release 1.

(8) Rcholtinytol replaced Rcholreltol from OSL Release 1. The interior-point algorithm has been changed to remove the Cholesky relative tolerance.

(9) Nrowduals replaced Nrowslacks from OSL Release 1.


[ Top of Page | Previous Page | Next Page | Table of Contents ]