This chapter provides you with information about the Optimization Library subroutines that may help debug your application program. See also "Handling Problems" for debugging suggestions.
EKKSMAP may be used to determine if you are out of, or soon to be out of, storage. EKKSMAP informs you of the first and last indices of low storage and high storage that are used. For example, a call to EKKSMAP could produce the following output:
EKK0075I 1 to 5456 and 97476 to 100000 are used in storage
This indicates that dspace from 1 to 5456 and from 97476 to 100000 is in use. Therefore, dspace from 5457 to 97475 is available. Also, the index control variables Nfirstfree and Nlastfree are set to 5457 and 97475 respectively.
EKKSMAP can be called several times in your program to check storage allocation for debugging purposes. If your program is running out of dspace, a call to EKKSMAP after every Optimization Library subroutine call can pinpoint operations that are using lots of storage.
EKKSMAP generates message EKK0075I (amount of storage used). Using EKKMSET you can cause a similar message to be issued after each Optimization Library subroutine completes. This message, EKK0083I, provides information that is similar to EKK0075I; however, EKK0083I is only printed when the storage map has changed between entry and exit from a subroutine. A call to EKKMSET is required to enable printing of EKK0083I, because the default is not to print it.
EKKSTAT provides statistics about the element values and the row and column bounds of the current model. It is particularly valuable for determining whether the model data is correct without having to print the entire constraint matrix. For example, you can call EKKSTAT after calling EKKLMDL to check that the data was passed correctly. Also, you can get information on the ranges of the row and column activities, the row slack variables and column reduced costs, and the original column costs.
The information provided by EKKSTAT is similar to that provided by EKKPRTS. EKKPRTS allows you to select various different parts of the matrix by setting the integer control variable Iprtinfomask. EKKSTAT does not give information on row and column names and the status of each variable. Instead, it provides a convenient summary of the information given by EKKPRTS.
For example, if you insert a call to EKKSTAT after the call to EKKLMDL in "Sample FORTRAN Program EXLMDL", you will get the following output for EKKSTAT:
Entering OSL subroutine EKKSTAT Description of Problem Matrix has 5 rows, 8 columns and 14 entries Lower Bound region and Rows section have 5 elements Breakdown of 1 negative entries 1.000000D+30 < 1 entries Breakdown of 4 positive entries 1.000000 < 4 entries < 10.00000 Lower Bound region and Columns section have 8 elements 6 of the entries in the region had a value of zero Breakdown of 2 positive entries 0.1000000 < 1 entries < 1.0000000 1.000000 < 1 entries < 10.00000 Solution region and Rows section have 5 elements 5 of the entries in the region had a value of zero Solution region and Columns section have 8 elements 6 of the entries in the region had a value of zero Breakdown of 2 positive entries 0.1000000 < 1 entries < 1.0000000 1.000000 < 1 entries < 10.00000 Upper Bound region and Rows section have 5 elements Breakdown of 5 positive entries 1.000000 < 3 entries < 10.00000 10.00000 < 1 entries < 100.0000 1.000000D+30 < 1 entries Upper Bound region and Columns section have 8 elements Breakdown of 8 positive entries 1.000000 < 3 entries < 10.00000 1.000000D+30 < 5 entries Dual/Reduced costs region and Rows section have 5 elements 5 of the entries in the region had a value of zero Dual/Reduced costs region and Columns section have 8 elements 8 of the entries in the region had a value of zero Original Costs region and Columns section have 8 elements Breakdown of 1 negative entries 1 entries = 1.0 5 of the entries in the region had a value of zero Breakdown of 2 positive entries 1 entries = 1.0 1.000000 < 1 entries < 10.00000 Matrix type 2, Column base 0, Row base 0 There are 14 elements in the matrix block Breakdown of 4 negative entries 2 entries = 1.0 1.000000 < 2 entries < 10.00000 Breakdown of 10 positive entries 4 entries = 1.0 1.000000 < 6 entries < 10.00000
The following section of output from EKKSTAT shows the name of the problem and the number of rows, columns, and elements in the matrix.
EKK0050I Entering OSL subroutine EKKSTAT EKK0008I Description of Problem EKK0016I Matrix has 5 rows, 8 columns and 14 entries
This is the same information that you would get if you called EKKPRTS with the integer control variable Iprtinfomask set to any value.
The following section of output from EKKSTAT shows the number of lower bounds for rows and columns and the number of lower bounds in a given range:
EKK0121I Lower Bound region and Rows section have 5 elements EKK0122I Breakdown of 1 negative entries EKK0128I 1.000000D+30 < 1 entries EKK0123I Breakdown of 4 positive entries EKK0126I 1.000000 < 4 entries <= 10.00000 EKK0121I Lower Bound region and Columns section have 8 elements EKK0124I 6 of the entries in the region had a value of zero EKK0123I Breakdown of 2 positive entries EKK0126I 0.1000000 < 1 entries <= 1.0000000 EKK0126I 1.000000 < 1 entries <= 10.00000
For the rows and columns, the number of lower bounds is printed, followed by a breakdown of the lower bound values. In this breakdown, the following information is printed:
If there are no lower bounds of a given type, no information is printed.
The ranges that are checked for the existence of lower bounds are:
Range start |
Range end |
Range start |
Range end |
Range start |
Range end |
||
-infinity |
|
10 -3 |
< 10-2 |
104 |
|
||
10-12 |
|
10-2 |
|
105 |
|
||
10-8 |
|
10-1 |
|
106 |
|
||
10-7 |
|
= 101 |
= 101 |
107 |
|
||
10-6 |
|
101 |
|
108 |
|
||
10-5 |
|
102 |
|
1012 |
|
||
10-4 |
|
103 |
|
1030 |
|
You may retrieve the lower bounds directly from dspace by using the index control variables Nrowlower and Ncollower. See "EKKNGET - Request Current Start Indices of OSL Information" for more information on using index control variables.
The following section of output from EKKSTAT shows the number of row and column activities and the number of activities in a given range:
EKK0121I Solution region and Rows section have 5 elements EKK0124I 5 of the entries in the region had a value of zero EKK0121I Solution region and Columns section have 8 elements EKK0124I 6 of the entries in the region had a value of zero EKK0123I Breakdown of 2 positive entries EKK0126I 0.1000000 < 1 entries <= 1.0000000 EKK0126I 1.000000 < 1 entries <= 10.00000
For the rows and columns, a breakdown similar to the breakdown for lower bounds is printed. The order of information and the ranges checked is exactly the same.
In this example, the activities are at initial values because EKKSSLV had not been called yet. If EKKSTAT were called after EKKSSLV in this program, the solution information from EKKSTAT would be as follows:
EKK0121I Solution region and Rows section have 5 elements EKK0124I 1 of the entries in the region had a value of zero EKK0123I Breakdown of 4 positive entries EKK0126I 1.000000 < 3 entries <= 10.00000 EKK0126I 10.00000 < 1 entries <= 100.0000 EKK0121I Solution region and Columns section have 8 elements EKK0124I 4 of the entries in the region had a value of zero EKK0123I Breakdown of 4 positive entries EKK0126I 0.1000000 < 1 entries <= 1.0000000 EKK0127I 1 entries = 1.0 EKK0126I 1.000000 < 2 entries <= 10.00000
You can retrieve the activity values directly from dspace by using the index control variables Nrowacts and Ncolsol. See "EKKNGET - Request Current Start Indices of OSL Information" for more information on using index control variables.
The following section of output from EKKSTAT shows the number of upper bounds for rows and columns and the number of upper bounds in a given range:
EKK0121I Upper Bound region and Rows section have 5 elements EKK0123I Breakdown of 5 positive entries EKK0126I 1.000000 < 3 entries <= 10.00000 EKK0126I 10.00000 < 1 entries <= 100.0000 EKK0128I 1.000000D+30 < 1 entries EKK0121I Upper Bound region and Columns section have 8 elements EKK0123I Breakdown of 8 positive entries EKK0126I 1.000000 < 3 entries <= 10.00000 EKK0128I 1.000000D+30 < 5 entries
For the rows and columns, a breakdown similar to the breakdown for lower bounds is printed. The order of information and the ranges checked is exactly the same.
You can retrieve the activity values directly from dspace by using the index control variables Nrowupper and Ncolupper. See "EKKNGET - Request Current Start Indices of OSL Information" for more information on using index control variables.
The following section of output from EKKSTAT shows the number of slack variables for rows, the reduced costs for columns, and the slack variables and reduced costs in a given range:
EKK0121I Dual/Reduced costs region and Rows section have 5 elements EKK0124I 5 of the entries in the region had a value of zero EKK0121I Dual/Reduced costs region and Columns section have 8 elements EKK0124I 8 of the entries in the region had a value of zero
For the rows and columns, a breakdown similar to the breakdown for lower bounds will be printed. The order of information and the ranges checked are exactly the same.
In this example, the slack variables and reduced costs are at initial values, because EKKSSLV had not yet been called. If EKKSTAT were called after EKKSSLV in this program, the solution information from EKKSTAT would be as follows:
EKK0121I Dual/Reduced costs region and Rows section have 5 elements EKK0124I 4 of the entries in the region had a value of zero EKK0123I Breakdown of 1 positive entries EKK0126I 1.000000 < 1 entries <= 10.00000 EKK0121I Dual/Reduced costs region and Columns section have 8 elements EKK0124I 6 of the entries in the region had a value of zero EKK0123I Breakdown of 2 positive entries EKK0126I 1.000000 < 1 entries <= 10.00000 EKK0126I 10.00000 < 1 entries <= 100.0000
You can retrieve the slack variables and reduced costs directly from dspace by using the index control variables Nrowduals and Ncolrcosts, respectively. See "EKKNGET - Request Current Start Indices of OSL Information" for more information on using index control variables.
The following section of output from EKKSTAT shows the number of original costs for columns and the original costs in a given range. This is equivalent to providing information about the objective function coefficients.
EKK0121I Original Costs region and Columns section have 8 elements EKK0122I Breakdown of 1 negative entries EKK0127I 1 entries = 1.0 EKK0124I 5 of the entries in the region had a value of zero EKK0123I Breakdown of 2 positive entries EKK0127I 1 entries = 1.0 EKK0126I 1.000000 < 1 entries <= 10.00000
For columns, a breakdown similar to the breakdown for lower bounds is printed. The order of information and the ranges checked are exactly the same.
You can retrieve the original costs directly from dspace by using the index control variable Nobjective. See "EKKNGET - Request Current Start Indices of OSL Information" for more information on using index control variables.
The following section of output from EKKSTAT shows the type, offset, and number of elements for each block of the matrix, followed by a breakdown of the element values:
EKK0007I Block storage type 2, Column base 0, Row base 0 EKK0051I There are 14 elements in the matrix block EKK0122I Breakdown of 4 negative entries EKK0127I 2 entries = 1.0 EKK0126I 1.000000 < 2 entries <= 10.00000 EKK0123I Breakdown of 10 positive entries EKK0127I 4 entries = 1.0 EKK0126I 1.000000 < 6 entries <= 10.00000
For each block, a breakdown similar to the breakdown for lower bounds is printed. The order of information and the ranges checked are exactly the same.
This is the same information that you would get if you called EKKPRTS with the integer control variable Iprtinfomask set to a value greater than or equal to 512.
Remember that a call to EKKCOPY or EKKNWMT consolidates all blocks of the matrix in the copy, so that there will be only one block of information on matrix elements from EKKSTAT if either of those subroutines has been called.
[ Top of Page | Previous Page | Next Page | Table of Contents ]