XPRSrepairweightedinfeasbounds (REPAIRINFEAS)
XPRSrepairweightedinfeasbounds |
REPAIRINFEAS |
Purpose
An extended version of
XPRSrepairweightedinfeas that allows for bounding the level of relaxation allowed.
Synopsis
int XPRS_CC XPRSrepairweightedinfeasbounds(XPRSprob prob, int * scode, const double lrp_array[], const double grp_array[], const double lbp_array[], const double ubp_array[], const double lrb_array[], const double grb_array[], const double lbb_array[], const double ubb_array[], char phase2, double delta, const char *optflags);
REPAIRINFEAS -[pflags] -[oflags] -[gflags] -[lrp value] -[grp value] -[lbp value] -[ubp value] -[lrb value] -[grb value] -[lbb value] -[ubb value] -[d value] -[r]
Arguments
prob
|
The current problem.
|
||||||||||||
scode
|
The status after the relaxation:
|
||||||||||||
lrp_array
|
Array of size
ROWS containing the preferences for relaxing the less or equal side of row. For the console use
-lrp value.
|
||||||||||||
grp_array
|
Array of size
ROWS containing the preferences for relaxing the greater or equal side of a row. For the console use
-grp value.
|
||||||||||||
lbp_array
|
Array of size
COLS containing the preferences for relaxing lower bounds. For the console use
-lbp value.
|
||||||||||||
ubp_array
|
Array of size
COLS containing preferences for relaxing upper bounds. For the console use
-ubp value.
|
||||||||||||
lrb_array
|
Array of size
ROWS containing the upper bounds on the amount the less or equal side of a row can be relaxed. For the console use
-lrb value.
|
||||||||||||
grb_array
|
Array of size
ROWS containing the upper bounds on the amount the greater or equal side of a row can be relaxed. For the console use
-grb value.
|
||||||||||||
lbb_array
|
Array of size
COLS containing the upper bounds on the amount the lower bounds can be relaxed. For the console use
-lbb value.
|
||||||||||||
ubb_array
|
Array of size
COLS containing the upper bounds on the amount the upper bounds can be relaxed. For the console use
-ubb value.
|
||||||||||||
phase2
|
Controls the second phase of optimization:
|
||||||||||||
delta
|
The relaxation multiplier in the second phase -1.
|
||||||||||||
optflags
|
Specifies flags to be passed to the Optimizer.
|
||||||||||||
r
|
If a summary of the violated variables and constraints should be printed after the relaxed solution is determined.
|
Related controls
Double
The weighted sum of violations if a solution is identified to the relaxed problem.
|
Further information
1. The console command
REPAIRINFEAS assumes that all preferences are 1 by default. Use the options
-lrp,
-grp,
-lbp or
-ubp to change them. The default limit on the maximum allowed relaxation per row or bound in plus infinity.
2. A row or bound is relaxed by introducing a new nonnegative variable that will contain the infeasibility of the row or bound. Suppose for example that row a
Tx = b is relaxed from below. Then a new variable ('infeasibility breaker')
s≥0 is added to the row, which becomes a
Tx +s = b. Observe that a
Tx may now take smaller values than b. To minimize such violations, the weighted sum of these new variables is minimized.
3. A preference of 0 results in the row or bound not being relaxed. The higher the preference, the more willing the modeller is to relax a given row or bound.
4. A negative preference indicates that a quadratic penalty cost should be applied. This can specified on a per constraint side or bound basis.
5. If a feasible solution is identified for the relaxed problem, with a sum of violations
p, then the sum of violations is restricted to be no greater than (
1+delta)
p, and the problem is optimized with respect to the original objective function. A nonzero delta increases the freedom of the original problem.
6. Note that on some problems, slight modifications of delta may affect the value of the original objective drastically.
7. The default value for delta in the console is 0.001.
8. Note that because of their special associated modeling properties, binary and semi-continuous variables are not relaxed.
9. Given any row
j with preferences
lrp=lrp_array[j] and
grp=grp_array[j], or variable
i with bound preferences
ubp=ubp_array[i] and
lbp=lbp_array[i], the following rules are applied while introducing the auxiliary variables:
Preference | Affects | Relaxation | Cost if pref.>0 | Cost if pref.<0 |
---|---|---|---|---|
lrp | = rows | aTx - aux_var = b | 1/lrp*aux_var | 1/lrp*aux_var2 |
lrp | <= rows | aTx - aux_var <= b | 1/lrp*aux_var | 1/lrp*aux_var2 |
grp | = rows | aTx + aux_var = b | 1/grp*aux_var | 1/grp*aux_var2 |
grp | >= rows | aTx + aux_var >= b | 1/grp*aux_var | 1/grp*aux_var2 |
ubp | upper bounds | xi - aux_var <= u | 1/ubp*aux_var | 1/ubp*aux_var2 |
lbp | lower bounds | xi + aux_var >= l | 1/lbp*aux_var | 1/lbp*aux_var2 |
10. Only positive bounds are applied; a zero or negative bound is ignored and the amount of relaxation allowed for the corresponding row or bound is not limited. The effect of a zero bound on a row or bound would be equivalent with not relaxing it, and can be achieved by setting its preference array value to zero instead, or not including it in the preference arrays.
11. If an irreducible infeasible set (IIS) has been identified, the generated IIS(s) are accessible through the IIS retrieval functions, see
NUMIIS and
XPRSgetiisdata.
Related topics