int user_is_feasible(void *user, double lpetol, int varnum, int *indices, double *values, int *feasible, double *objval, int branching, double *heur_solution)
The user can test the feasibility status of the solution to the current LP relaxation and/or return a feasible solution generated by a primal heuristic. This function is primarily used in cases where a solution satisfying integrality restrictions may not be feasible, i.e., it may violate an inequality not present in the current relaxation that will be generated by the user during the cut generation phase. In such a case, it is not possible for SYMPHONY to determine this and the user should set *feasible to IP_INFEASIBLE and return USER_SUCCESS. If the user tests the feasibility status of the solution and determines that the current solution is feasible, then *feasible should be set to IP_FEASIBLE instead. IN this case, the user can set *objval to the true objective function value of the feasible solution to account for any round-ff error introduced by the solver if desired. If all integral solution must be feasible, the user can ask SYMPHONY to simply test the integrality status by returning USER_DEFAULT.
If the user is able to generate a feasible solution using a primal heuristic, then the solution can be returned in a dense format in the array heur_solution. In this case, *objval should be set to the value of the solution and *feasible should be set to IP_HEUR_FEASIBLE.
|void *user||INOUT||Pointer to the user-defined LP data structure.|
|double lpetol||IN||The tolerance of the LP solver.|
|int varnum||IN||The length of the indices and values arrays.|
|int *indices||IN||User indices of variables at nonzero level in the current solution.|
|double *values||IN||Values of the variables listed in indices.|
|int *feasible||OUT||Feasibility status of the solution (IP_INFEASIBLE, IP_FEASIBLE, or IP_HEUR_FEASIBLE).|
|double *objval||INOUT||The user can return the ``true'' objective function value of the solution in the case it is feasible, i.e., eliminating the round-off error. This variable should also be set to the value of the heuristic solution, if one is found.|
|int branching||In||Indicates whether the function is being invoked during strong branching (from select_branching_object()) or after solving an Lp relaxation (from fathom_branch()).|
|double *heur_solution||OUT||Used to return a solution determined heuristically.|
|USER_ERROR||Error. Solution is considered to be not feasible.|
|USER_SUCCESS||User checked IP feasibility.|
|USER_DEFAULT||SYMPHONY should test the integrality of the solution to determine if it is feasible.|