The INTPOINT Procedure |
There are several reasons why PROC INTPOINT stops interior point optimization. Optimization stops when
The reasons to stop optimization outlined in the previous paragraph will be termed the usual stopping conditions in the following explanation.
However, when solving some problems, especially if the problems are large, the usual stopping criteria are inappropriate. PROC INTPOINT might stop optimizing prematurely. If it were allowed to perform additional optimization, a better solution would be found. On other occasions, PROC INTPOINT might do too much work. A sufficiently good solution might be reached several iterations before PROC INTPOINT eventually stops.
You can see PROC INTPOINT's progress to the optimum by specifying PRINTLEVEL2=2. PROC INTPOINT will produce a table on the SAS log. A row of the table is generated during each iteration and consists of values of the affine step complementarity, the complementarity of the solution for the next iteration, the total bound infeasibility (see the array in the section "Interior Point: Upper Bounds"), the total constraint infeasibility (see the array in the section "Interior Point Algorithmic Details"), and the total dual infeasibility (see the array in the section "Interior Point Algorithmic Details"). As optimization progresses, the values in all columns should converge to zero.
To tailor stopping criteria to your problem, you can use two sets of parameters: the STOP_x and the KEEPGOING_x parameters. The STOP_x parameters (STOP_C, STOP_DG, STOP_IB, STOP_IC, and STOP_ID) are used to test for some condition at the beginning of each iteration and if met, to stop optimizing immediately. The KEEPGOING_x parameters (KEEPGOING_C, KEEPGOING_DG, KEEPGOING_IB, KEEPGOING_IC, and KEEPGOING_ID) are used when PROC INTPOINT would ordinarily stop optimizing but does not if some conditions are not met.
For the sake of conciseness, a set of options might be referred to as the part of the option name they have in common followed by the suffix x. For example, STOP_C, STOP_DG, STOP_IB, STOP_IC, and STOP_ID will collectively be referred to as STOP_x.
At the beginning of each iteration, PROC INTPOINT will test whether complementarity is STOP_C (provided you have specified a STOP_C parameter) and if it is, PROC INTPOINT will stop optimizing. If the duality gap is STOP_DG (provided you have specified a STOP_DG parameter), PROC INTPOINT will stop optimizing immediately. This is true as well for the other STOP_x parameters that are related to infeasibilities, STOP_IB, STOP_IC, and STOP_ID.
For example, if you want PROC INTPOINT to stop optimizing for the usual stopping conditions, plus the additional condition, complementarity 100 or duality gap 0.001, then use
proc intpoint stop_c=100 stop_dg=0.001
If you want PROC INTPOINT to stop optimizing for the usual stopping conditions, plus the additional condition, complementarity 1000 and duality gap 0.001 and constraint infeasibility 0.0001, then use
proc intpoint and_stop_c=1000 and_stop_dg=0.01 and_stop_ic=0.0001
Unlike the STOP_x parameters that cause PROC INTPOINT to stop optimizing when any one of them is satisfied, the corresponding AND_STOP_x parameters (AND_STOP_C, AND_STOP_DG, AND_STOP_IB, AND_STOP_IC, and AND_STOP_ID) cause PROC INTPOINT to stop only if all (more precisely, all that are specified) options are satisfied. For example, if PROC INTPOINT should stop optimizing when
proc intpoint stop_c=100 stop_dg=0.001 and_stop_c=1000 and_stop_dg=0.01 and_stop_ic=0.0001
Just as the STOP_x parameters have AND_STOP_x partners, the KEEPGOING_x parameters have AND_KEEPGOING_x partners. The role of the KEEPGOING_x and AND_KEEPGOING_x parameters is to prevent optimization from stopping too early, even though a usual stopping criteria is met.
When PROC INTPOINT detects that it should stop optimizing for a usual stopping condition, it will perform the following tests:
If all these tests to decide whether more optimization should be performed are false, optimization is stopped.
The following PROC INTPOINT example is used to illustrate how several stopping criteria options can be used together:
proc intpoint stop_c=1000 and_stop_c=2000 and_stop_dg=0.01 and_stop_ib=1 and_stop_ic=1 and_stop_id=1 keepgoing_c=1500 and_keepgoing_c=2500 and_keepgoing_dg=0.05 and_keepgoing_ib=1 and_keepgoing_ic=1 and_keepgoing_id=1
At the beginning of each iteration, PROC INTPOINT will stop optimizing if
Copyright © 2008 by SAS Institute Inc., Cary, NC, USA. All rights reserved.