Solving Constraint Integer Programs

Interface changes between SCIP 2.0 and SCIP 2.1

New and changed callbacks

  • Constraint Handler:

    • The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion. This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means, you are generating new variables during the search. If you are not doing that just define the function pointer to be NULL.
      If this method gets implemented you should iterate over all constraints of the constraint handler and delete all variables that were marked for deletion by SCIPdelVar().
  • Problem Data:

  • Conflict Analysis:

    • Added parameter "separate" to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict constraint should be separated or not.

Changed interface methods

  • Plugin management:

    • SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters related to calling the propagator in presolving.
    • SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for propagation.
  • Constraint Handlers:

    • Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter "cutoff", which is a pointer to store whether a cutoff was found.
    • Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter "active" to indicate whether the upgrading method is active by default.
  • Nonlinear expressions, relaxation, and solver interface:

    • The methods SCIPexprtreeEvalSol(), SCIPexprtreeEvalIntLocalBounds(), and SCIPexprtreeEvalIntGlobalBounds() have been renamed to SCIPevalExprtreeSol(), SCIPevalExprtreeLocalBounds(), and SCIPevalExprtreeGlobalBounds() and are now located in scip.h.
    • Various types and functions dealing with polynomial expressions have been renamed to use the proper terms "monomial" and "polynomial".
    • The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(), SCIPvarGetNLPSol() and SCIPcreateNLPSol() to retrieve NLP solution values instead.
    • Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities are present.
    • SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
    • The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
    • The method SCIPgetNLPI() got a new parameter "nlpiproblem", which is a pointer to store the NLP solver interface problem.
  • Others:

    • SCIPgetVarCopy() got a new parameter "success" that will be FALSE if method is called after problem creation stage and no hash map is given or no image for the given variable is contained in the given hash map.
    • Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
    • SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous type to an integer type.
    • SCIPdelVar() got a new parameter "deleted", which stores whether the variable was successfully marked to be deleted.
    • SCIPcalcNodeselPriority() got a new parameter "branchdir", which defines the type of branching that was performed: upwards, downwards, or fixed.
    • The parameters "timelimit" and "memorylimit" were removed from SCIPapplyRens().


  • The result value SCIP_NEWROUND has been added, it allows a separator/constraint handler to start a new separation round (without previous calls to other separators/conshdlrs).
  • All timing flags are now defined type_timing.h.
  • The variable deletion event is now a variable specific event and not global, anymore.
  • The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off), which are changed by SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip, feasibility, hardlp, optimality, counter), which can be set using SCIPsetEmphasis().

For further release notes we refer to the Release notes.