e04tcc and
e04tbc form a pair of functions which allow you to quickly remove parts of the model and add them back. This is particularly useful when a sequence of similar problems needs to be solved, to identify how a particular constraint or variable affects the solution, or to switch between previously defined constraints which are somewhat related to each other.
After the model has been fully or partially built by calling functions of the NAG optimization modelling suite,
e04tcc may be used to
disable some components (variables or constraints) from the model. To identify the part of the model to be disabled, the component type needs to be specified in
comp together with the appropriate component indices, such as variable or linear constraint numbers, in an index set
idx.
e04tbc may be used to bring them back (to
enable them). Note that a disabled component may still be edited but would not be automatically re-enabled; a disabled component can only be enabled by calling
e04tbc. By default, all newly created components of the model are enabled. Calling this function on disabled components is not an error but has no effect.
In general, disabled components are still present in the model with respect to the numbering of the variables and constraints (e.g., disabling a variable will not renumber the remaining variables) but the solver will ignore them and work internally with a smaller model formulation. The solver will communicate with you (e.g., return results) in arrays matching the full size of the model and the elements corresponding to the disabled components will be set to NaN, which can be tested for via a call to
x07abc. The effect of disabling components is described in detail as follows:
- Decision variables
-
As a rule, a disabled variable behaves as if the existing parts of the model were defined without the variable in the first place. Matching elements in all other model components are ignored. In particular, the following applies:
-
• elements in the linear or quadratic objective function corresponding to the disabled variables are ignored, as if they were set to 0;
-
• the same applies to the linear and quadratic constraints as well as to the matrix inequalities, however, note that this can generate infeasible constraints (for instance, with disabled and is interpreted as and thus would be infeasible);
-
• the box bounds of the disabled variables are ignored;
-
• if a disabled variable is present in a cone constraint and the cone constraint becomes invalid (e.g., the length of the cone is just one or the first cone variable is disabled), the whole constraint is disabled as well;
-
• any callbacks for nonlinear function evaluation will have on input the full vector, however, all disabled variables are set to NaN and the matching elements in the returned derivatives are not referenced.
An alternative approach is to fix the variable to a predefined value by changing its simple bounds using e04tdc instead of disabling it.
- Linear constraints, Quadratic constraints, Second-order cones, Matrix inequalities
- Disabled constraints do not restrict the feasible set, they are eliminated before the model is presented to the solver. As the constraints are not renumbered, the position for Lagrangian multipliers (u, uc, ua) is unchanged and NaNs are returned in place of disabled constraints.
- Nonlinear constraints
- The disabled nonlinear constraints do not affect the feasible set and their Lagrangian multipliers are returned as NaNs in their expected location. The values of the nonlinear constraints and their partial derivatives are passed to the solver via callbacks, such as, objfun and objgrd. The size of all array arguments in the callbacks remain the same, irrespective of the number of disabled constraints. On exit from the callback any elements in these arrays corresponding to the disabled constraints are not referenced.
- Nonlinear residuals
- The disabled residuals in the nonlinear least squares objective function are skipped in the sum and their values are not referenced.
See
Section 4.1 in the
E04 Chapter Introduction for more details about the NAG optimization modelling suite.
None.
-
1:
– void *
Input
-
On entry: the handle to the problem. It needs to be initialized (e.g., by
e04rac) and
must not be changed between calls to the NAG optimization modelling suite.
-
2:
– const char *
Input
-
On entry: the type of the component of the model to be disabled.
comp is case insensitive.
- , or
- Decision variables .
- or
- Linear constraints (see e04rjc).
- or
- Quadratic constraints (see e04rsc and e04rtc).
- or
- Nonlinear constraints (see e04rkc).
- or
- Quadratic or rotated quadratic cones (see e04rbc).
- or
- Matrix inequality constraints (see e04rnc).
- or
- Nonlinear residuals in the nonlinear least squares objective function (see e04rmc).
Constraint:
, , , , , , , , , , , , , or .
-
3:
– Integer
Input
-
On entry: the number of elements in the index set.
Constraint:
.
-
4:
– const Integer
Input
-
On entry: the index set of components
comp to be disabled. The elements may be supplied in any order.
Constraint:
, for , where is the total number of the given components (e.g., decision variables) in the problem.
-
5:
– NagError *
Input/Output
-
The NAG error argument (see
Section 7 in the Introduction to the NAG Library CL Interface).
- NE_ALLOC_FAIL
-
Dynamic memory allocation failed.
See
Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
- NE_BAD_PARAM
-
On entry, argument had an illegal value.
- NE_DELETED
-
On entry, and .
This component has been deleted.
This error can only occur when trying to enable a cone constraint that has been deleted by setting its size to with e04rbc.
- NE_HANDLE
-
The supplied
handle does not define a valid handle to the data structure for the NAG optimization modelling suite. It has not been properly initialized or it has been corrupted.
- NE_INDICES
-
On entry, , , and .
Constraint: .
- NE_INT
-
On entry, .
Constraint: .
- NE_INTERNAL_ERROR
-
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact
NAG for assistance.
See
Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
- NE_NO_LICENCE
-
Your licence key may have expired or may not have been installed correctly.
See
Section 8 in the Introduction to the NAG Library CL Interface for further information.
- NE_PHASE
-
The problem cannot be modified right now, the solver is running.
- NE_STR_UNKNOWN
-
On entry, .
Constraint: , , , , , or .
Not applicable.
Background information to multithreading can be found in the
Multithreading documentation.
Please consult the
X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this function. Please also consult the
Users' Note for your implementation for any additional implementation-specific information.
None.
This example shows how to use the NAG optimization modelling suite to edit a nonlinear least squares problem. In particular, outlier data is disabled in the NAG handle without having to redefine the full problem.
We use
e04ggc to fit a nonlinear least squares problem of the form
where
,
and
to some simulated data
.
We show how to solve three variants of the same problem:
-
•with the full data set;
-
•with the outlier residuals disabled;
-
•with the outlier corrected and enabled, and with the first parameter fixed to its known value 0.3.