SCIPaggregateVars

Function SCIPaggregateVars 

Source
pub unsafe extern "C" fn SCIPaggregateVars(
    scip: *mut SCIP,
    varx: *mut SCIP_VAR,
    vary: *mut SCIP_VAR,
    scalarx: f64,
    scalary: f64,
    rhs: f64,
    infeasible: *mut c_uint,
    redundant: *mut c_uint,
    aggregated: *mut c_uint,
) -> SCIP_RETCODE
Expand description

From a given equality ax + by == c, aggregates one of the variables and removes it from the set of active problem variables. This changes the vars array returned from SCIPgetVars() and SCIPgetVarsData(), and also renders the arrays returned from the SCIPvarGetImpl…() methods for the two variables invalid. In the first step, the equality is transformed into an equality with active problem variables a’*x’ + b’*y’ == c’. If x’ == y’, this leads to the detection of redundancy if a’ == -b’ and c’ == 0, of infeasibility, if a’ == -b’ and c’ != 0, or to a variable fixing x’ == c’/(a’+b’) (and possible infeasibility) otherwise. In the second step, the variable to be aggregated is chosen among x’ and y’, prefering a less strict variable type as aggregation variable (i.e. continuous variables are preferred over implicit integers, implicit integers over integers, and integers over binaries). If none of the variables is continuous, it is tried to find an integer aggregation (i.e. integral coefficients a’’ and b’‘, such that a’‘*x’ + b’‘*y’ == c’‘). This can lead to the detection of infeasibility (e.g. if c’’ is fractional), or to a rejection of the aggregation (denoted by aggregated == FALSE), if the resulting integer coefficients are too large and thus numerically instable.

The output flags have the following meaning:

  • infeasible: the problem is infeasible
  • redundant: the equality can be deleted from the constraint set
  • aggregated: the aggregation was successfully performed (the variables were not aggregated before)

@return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref SCIP_Retcode “SCIP_RETCODE” for a complete list of error codes.

@pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING