RESET
options ;
SET
options ;
The RESET statement is used to change options after PROC NETFLOW has started execution. Any of the following options can appear in the PROC NETFLOW statement.
Another name for the RESET statement is SET. You can use RESET when you are resetting options and SET when you are setting options for the first time. The following options fall roughly into five categories:
output data set specifications
options that indicate conditions under which optimization is to be halted temporarily, giving you an opportunity to use PROC NETFLOW interactively
options that control aspects of the operation of the network primal simplex optimization
options that control the pricing strategies of the network simplex optimizer
miscellaneous options
If you want to examine the setting of any options, use the SHOW statement. If you are interested in looking at only those options that fall into a particular category, the SHOW statement has options that enable you to do this.
The execution of PROC NETFLOW has three stages. In stage zero the problem data are read from the NODEDATA=, ARCDATA=, and CONDATA= data sets. If a warm start is not available, an initial basic feasible solution is found. Some options of the PROC NETFLOW statement control what occurs in stage zero. By the time the first RESET statement is processed, stage zero has already been completed.
In the first stage, an optimal solution to the network flow problem neglecting any side constraints is found. The primal and dual solutions for this relaxed problem can be saved in the ARCOUT= data set and the NODEOUT= data set, respectively.
In the second stage, the side constraints are examined and some initializations occur. Some preliminary work is also needed to commence optimization that considers the constraints. An optimal solution to the network flow problem with side constraints is found. The primal and dual solutions for this side-constrained problem are saved in the CONOUT= data set and the DUALOUT= data set, respectively.
Many options in the RESET statement have the same name except that they have as a suffix the numeral 1 or 2. Such options have much the same purpose, but option1 controls what occurs during the first stage when optimizing the network neglecting any side constraints and option2 controls what occurs in the second stage when PROC NETFLOW is performing constrained optimization.
Some options can be turned off by the option prefixed by the word NO. For example, FEASIBLEPAUSE1 may have been specified in a RESET statement and in a later RESET statement, you can specify NOFEASIBLEPAUSE1. In a later RESET statement, you can respecify FEASIBLEPAUSE1 and, in this way, toggle this option.
The options available with the RESET statement are summarized by purpose in the following table.
Table 7.3: Functional Summary, RESET Statement
Description |
Statement |
Option |
---|---|---|
Output Data Set Options: |
||
Unconstrained primal solution data set |
||
Unconstrained dual solution data set |
||
Constrained primal solution data set |
||
Constrained dual solution data set |
||
Simplex Options: |
||
Use big-M instead of two-phase method, stage 1 |
||
Use Big-M instead of two-phase method, stage 2 |
||
Anti-cycling option |
||
Interchange first nonkey with leaving key arc |
||
Controls working basis matrix inversions |
||
Maximum number of L row operations allowed before refactorization |
||
Maximum number of LU factor column updates |
||
Anti-cycling option |
||
Use first eligible leaving variable, stage 1 |
||
Use first eligible leaving variable, stage 2 |
||
Negates INTFIRST |
||
Negates LRATIO1 |
||
Negates LRATIO2 |
||
Negates PERTURB1 |
||
Anti-cycling option |
||
Controls working basis matrix refactorization |
||
Use two-phase instead of big-M method, stage 1 |
||
Use two-phase instead of big-M method, stage 2 |
||
Pivot element selection parameter |
||
Zero tolerance, stage 1 |
||
Zero tolerance, stage 2 |
||
Zero tolerance, real number comparisons |
||
Pricing Options: |
||
Frequency of dual value calculation |
||
Pricing strategy, stage 1 |
||
Pricing strategy, stage 2 |
||
Used when P1SCAN=PARTIAL |
||
Controls search for entering candidate, stage 1 |
||
Used when P2SCAN=PARTIAL |
||
Controls search for entering candidate, stage 2 |
||
Initial queue size, stage 1 |
||
Initial queue size, stage 2 |
||
Used when Q1FILLSCAN=PARTIAL |
||
Controls scan when filling queue, stage 1 |
||
Used when Q2FILLSCAN=PARTIAL |
||
Controls scan when filling queue, stage 2 |
||
Queue size reduction factor, stage 1 |
||
Queue size reduction factor, stage 2 |
||
Frequency of refreshing queue, stage 1 |
||
Frequency of refreshing queue, stage 2 |
||
Optimization Termination Options: |
||
Pause after stage 1; do not start stage 2 |
||
Pause when feasible, stage 1 |
||
Pause when feasible, stage 2 |
||
Maximum number of iterations, stage 1 |
||
Maximum number of iterations, stage 2 |
||
Negates ENDPAUSE1 |
||
Negates FEASIBLEPAUSE1 |
||
Negates FEASIBLEPAUSE2 |
||
Pause every PAUSE1 iterations, stage 1 |
||
Pause every PAUSE2 iterations, stage 2 |
||
Interior Point Algorithm Options: |
||
Factorization method |
||
Allowed amount of dual infeasibility |
||
Allowed amount of primal infeasibility |
||
Allowed total amount of dual infeasibility |
||
Allowed total amount of primal infeasibility |
||
Cut-off tolerance for Cholesky factorization |
||
Density threshold for Cholesky processing |
||
Step-length multiplier |
||
Preprocessing type |
||
Print optimization progress on SAS log |
||
Interior Point Stopping Criteria Options: |
||
Maximum number of interior point iterations |
||
Primal-dual (duality) gap tolerance |
||
Stop because of complementarity |
||
Stop because of duality gap |
||
Stop because of complementarity |
||
Stop because of duality gap |
||
Stop because of complementarity |
||
Stop because of duality gap |
||
Stop because of complementarity |
||
Stop because of duality gap |
||
Miscellaneous Options: |
||
Output complete basis information to ARCOUT= and NODEOUT= data sets |
||
Output complete basis information to CONOUT= and DUALOUT= data sets |
||
Turn off infeasibility or optimality flags |
||
Negates FUTURE1 |
||
Negates FUTURE2 |
||
Negates SCRATCH |
||
Negates ZTOL1 |
||
Negates ZTOL2 |
||
Write optimization time to SAS log |
||
No stage 1 optimization; do stage 2 optimization |
||
Suppress similar SAS log messages |
||
Use zero tolerance, stage 1 |
||
Use zero tolerance, stage 2 |
In a RESET statement, you can specify an ARCOUT= data set, a NODEOUT= data set, a CONOUT= data set, or a DUALOUT= data set. You are advised to specify these output data sets early because if you make a syntax error when using PROC NETFLOW interactively or, for some other reason, PROC NETFLOW encounters or does something unexpected, these data sets will contain information about the solution that was reached. If you had specified the FUTURE1 or FUTURE2 option in a RESET statement, PROC NETFLOW may be able to resume optimization in a subsequent run.
You can turn off these current output data set specifications by specifying ARCOUT=NULL, NODEOUT=NULL, CONOUT=NULL, or DUALOUT=NULL.
If PROC NETFLOW is outputting observations to an output data set and you want this to stop, press the keys used to stop SAS procedures. PROC NETFLOW waits, if necessary, and then executes the next statement.
You can specify a NODEOUT= data set in any RESET statement before the unconstrained optimum is found (even at commencement). Once the unconstrained optimum has been reached, or during stage 1 optimization, use the SAVE statement to produce observations in a NODEOUT= data set. Once optimization that considers constraints starts, you will not be able to obtain a NODEOUT= data set. Instead use a DUALOUT= data set to get the current solution. See the section NODEOUT= and DUALOUT= Data Sets for more information.
The following options indicate conditions when optimization is to be halted. You then have a chance to use PROC NETFLOW interactively. If the NETFLOW procedure is optimizing and you want optimization to halt immediately, press the CTRL-BREAK key combination used to stop SAS procedures. Doing this is equivalent to PROC NETFLOW finding that some prespecified condition of the current solution under which optimization should stop has occurred.
If optimization does halt, you may need to change the conditions for when optimization should stop again. For example, if the number of iterations exceeded MAXIT2, use the RESET statement to specify a larger value for the MAXIT2= option before the next RUN statement. Otherwise, PROC NETFLOW will immediately find that the number of iterations still exceeds MAXIT2 and halt without doing any additional optimization.
The INVFREQ= option is relevant only if INVD_2D is specified in the PROC NETFLOW statement; that is, the inverse of the working basis matrix is being stored and processed as a two-dimensional array. The REFACTFREQ=, U=, MAXLUUPDATES=, and MAXL= options are relevant if the INVD_2D option is not specified in the PROC NETFLOW statement; that is, if the working basis matrix is LU factored.
There are three main types of pricing strategies:
PRICETYPE=NOQ
PRICETYPE=BLAND
PRICETYPE=Q
The one that usually performs better than the others is PRICETYPE=Q, so this is the default.
Because the pricing strategy takes a lot of computational time, you should experiment with the following options to find the optimum specification. These options influence how the pricing step of the simplex iteration is performed. See the section Pricing Strategies for further information.
PRICETYPE=BLAND or PTYPE=BLAND
PRICETYPE=NOQ or PTYPE=NOQ
PSCAN=BEST
PSCAN=FIRST
PSCAN=PARTIAL and PNPARTIAL=p
PRICETYPE=Q or PTYPE=QQSIZE=q or Q=q REFRESHQ=rREDUCEQSIZE=r REDUCEQ=r
PSCAN=BEST
PSCAN=FIRST
PSCAN=PARTIAL and PNPARTIAL=p
QFILLSCAN=BEST
QFILLSCAN=FIRST
QFILLSCAN=PARTIAL and QFILLNPARTIAL=q
For stage 2 optimization, you can specify P2SCAN=ANY, which is used in conjunction with the DUALFREQ= option.
Consider the following example:
proc netflow nodedata=noded /* supply and demand data */ arcdata=arcd1 /* the arc descriptions */ condata=cond1 /* the side constraints */ conout=solution; /* output the solution */ run; /* Netflow states that the problem is infeasible. */ /* You suspect that the zero tolerance is too large */ reset zero2=1.0e-10 moreopt; run; /* Netflow will attempt more optimization. */ /* After this, if it reports that the problem is */ /* infeasible, the problem really might be infeasible */
If PROC NETFLOW finds an optimal solution, you might want to do additional optimization to confirm that an optimum has really been reached. Specify the MOREOPT option in a RESET statement. Reset options, but in this case tighten zero tolerances.
You control how much preprocessing to do by specifying PRSLTYPE=p, where p can be –1, 0, 1, 2, or 3.
–1 |
Do not perform preprocessing. For most problems, specifying PRSLTYPE= –1 is not recommended. |
0 |
Given upper and lower bounds on each variable, the greatest and least contribution to the row activity of each variable is computed. If these are within the limits set by the upper and lower bounds on the row activity, then the row is redundant and can be discarded. Try to tighten the bounds on any of the variables it can. For example, if all coefficients in a constraint are positive and all variables have zero lower bounds, then the row’s smallest contribution is zero. If the rhs value of this constraint is zero, then if the constraint type is or , all the variables in that constraint can be fixed to zero. These variables and the constraint can be removed. If the constraint type is , the constraint is redundant. If the rhs is negative and the constraint is , the problem is infeasible. If just one variable in a row is not fixed, use the row to impose an implicit upper or lower bound on the variable and then eliminate the row. The preprocessor also tries to tighten the bounds on constraint right-hand sides. |
1 |
When there are exactly two unfixed variables with coefficients in an equality constraint, solve for one in terms of the other. The problem will have one less variable. The new matrix will have at least two fewer coefficients and one less constraint. In other constraints where both variables appear, two coefs are combined into one. PRSLTYPE=0 reductions are also done. |
2 |
It may be possible to determine that an equality constraint is not constraining a variable. That is, if all variables are nonnegative, then does not constrain , since it must be nonnegative if all the ’s are nonnegative. In this case, eliminate by subtracting this equation from all others containing . This is useful when the only other entry for is in the objective function. Perform this reduction if there is at most one other nonobjective coefficient. PRSLTYPE=0 reductions are also done. |
3 |
All possible reductions are performed. PRSLTYPE=3 is the default. |
Preprocessing is iterative. As variables are fixed and eliminated, and constraints are found to be redundant and they too are eliminated, and as variable bounds and constraint right-hand sides are tightened, the LP to be optimized is modified to reflect these changes. Another iteration of preprocessing of the modified LP may reveal more variables and constraints that can be eliminated.