int user_logical_fixing(void *user, int varnum, var_desc **vars, 
                        double *x, char *status, int *num_fixed)


Logical fixing is modifying the stati of variables based on logical implications derived from problem-specific information. In this function the user can modify the status of any variable. Valid stati are: NOT_FIXED, TEMP_FIXED_TO_LB, PERM_FIXED_TO_LB, TEMP_FIXED_TO_UB and PERM_FIXED_TO_UB. Be forewarned that fallaciously fixing a variable in this function can cause the algorithm to terminate improperly. Generally, a variable can only be fixed permanently if the matrix is full at the time of the fixing (i.e. all variables that are not fixed are in the matrix). There are no default options.


void *user IN Pointer to the user-defined LP data structure.
int varnum IN The number of variables currently in the LP relaxation. (The length of the *vars and x arrays.)
var_desc **vars IN The variables currently in the LP relaxation.
double *x IN Values of the above variables.
char *status INOUT Stati of variables currently in the LP relaxation.
int *num_fixed OUT Number of fixed variables.

Return values:

USER_ERROR Error. Ignored by SYMPHONY.
USER_SUCCESS User changed the stati of the variables she wanted.
USER_DEFAULT No logical fixing rules are implemented.

Wrapper invoked from:
fix_variables() after doing reduced cost fixing, but only when a specified number of variables have been fixed by reduced cost (see LP parameter settings).

Ted Ralphs