Solving Constraint Integer Programs

How to search the documentation for interface methods

If you are looking for a method in order to perform a specific task, the public SCIP C-API is the place to look.

  • It contains interface methods for all SCIP structs, both in the solver core or in one of the plugins.
  • Plugins are mostly independent from each other, so to use them it is usually enough to browse the Core API.
  • If you want to add your own plugins, see the How to add ... pages for exhaustive information for each plugin type.
  • If you are learning SCIP with a concrete project in mind, looking at the available Example projects page may help you getting started.
  • See also How to start a new project

Header file names of SCIP obey a consistent naming scheme: Type definitions and related objects such as enums are found in headers starting with "type_", such as type_var.h , which contains enums and type definitions related to SCIP problem variables. Definitions of the actual structs can be found in separate header files starting with "struct_". All method definitions of the public SCIP API are split across header files starting with "pub_" such as pub_cons.h or headers starting with "scip_" such as scip_cons.h . The latter headers starting with "scip_" contain more complex methods, which always receive a scip pointer as first argument. Those methods may affect several individual components controlled by SCIP. Such a method is SCIPbranchVar(), which affects the search tree, which is controlled by SCIP itself and not meant to be accessed by user plugins.

It should be sufficient to include scip/scip.h and scip/scipdefplugins.h for having all needed functionality available in a project.

If, for example, you are looking for information on how to create a problem instance, here are some steps you can take:

  1. Browse the SCIP Core API and follow the path Public API of SCIP > Core API > Problem Creation > Global Problem > SCIPcreateProb()
  2. Here you can find information on the function's return value, preconditions, postconditions, parameters, as well as related functions.
  3. If you are unsure of how to use some of the parameters, it is worth looking for a basic version of the function. This and other related functions may be found by either browsing neighboring functions and groups in the navigation tree to the left, or in the 'References' and 'Referenced by' section of the function documentation. In this case, you can find SCIPcreateProbBasic().

The opposite case is that you already know the name of a function as, e.g., SCIPbranchVar().

  1. Type the name of the function into the search bar to find the function documentation.
  2. In addition, you can find related methods by browsing the neighboring functions of the same group.
  3. In this example, you may now learn about SCIPgetNLPBranchCands() to query all integer variables with fractional LP solution value, which are good candidates for classical branching on variables.

Note that the private SCIP API contains more complex functions and data structures that fill specialized roles and is only for developers. Those functions are not exported to the library and are therefore not available in user projects using the public SCIP API.