## Detailed Description

type definitions for separators

Definition in file type_sepa.h.

`#include "scip/def.h"`

`#include "scip/type_retcode.h"`

`#include "scip/type_result.h"`

`#include "scip/type_sol.h"`

`#include "scip/type_scip.h"`

Go to the source code of this file.

## Macros | |

#define | SCIP_DECL_SEPACOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAINITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAEXITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

#define | SCIP_DECL_SEPAEXECLP(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth) |

#define | SCIP_DECL_SEPAEXECSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_SOL* sol, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth) |

## Typedefs | |

typedef struct SCIP_Sepa | SCIP_SEPA |

typedef struct SCIP_SepaData | SCIP_SEPADATA |

## Macro Definition Documentation

## ◆ SCIP_DECL_SEPACOPY

#define SCIP_DECL_SEPACOPY | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

copy method for separator plugins (called when SCIP copies plugins)

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 52 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAFREE

#define SCIP_DECL_SEPAFREE | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

destructor of separator to free user data (called when SCIP is exiting)

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 60 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAINIT

#define SCIP_DECL_SEPAINIT | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

initialization method of separator (called after problem was transformed)

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 68 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAEXIT

#define SCIP_DECL_SEPAEXIT | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

deinitialization method of separator (called before transformed problem is freed)

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 76 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAINITSOL

#define SCIP_DECL_SEPAINITSOL | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

solving process initialization method of separator (called when branch and bound process is about to begin)

This method is called when the presolving was finished and the branch and bound process is about to begin. The separator may use this call to initialize its branch and bound specific data.

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 87 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAEXITSOL

#define SCIP_DECL_SEPAEXITSOL | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa) |

solving process deinitialization method of separator (called before branch and bound process data is freed)

This method is called before the branch and bound process is freed. The separator should use this call to clean up its branch and bound data.

input:

- scip : SCIP main data structure
- sepa : the separator itself

Definition at line 98 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAEXECLP

#define SCIP_DECL_SEPAEXECLP | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth) |

LP solution separation method of separator

Searches for cutting planes that separate the current LP solution. The method is called in the LP solving loop, which means that a valid LP solution exists.

input:

- scip : SCIP main data structure
- sepa : the separator itself
- result : pointer to store the result of the separation call
- allowlocal : should the separator allow local cuts?
- depth : preteneded depth of current node

- Note
- The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc. These limits should be checked against depth and not against the actual depth of the current node.

possible return values for *result (if more than one applies, the first in the list should be used):

- SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
- SCIP_CONSADDED : an additional constraint was generated
- SCIP_REDUCEDDOM : a variable's domain was reduced
- SCIP_SEPARATED : a cutting plane was generated
- SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
- SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
- SCIP_DIDNOTRUN : the separator was skipped
- SCIP_DELAYED : the separator was skipped, but should be called again

Definition at line 127 of file type_sepa.h.

## ◆ SCIP_DECL_SEPAEXECSOL

#define SCIP_DECL_SEPAEXECSOL | ( | x | ) | SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_SOL* sol, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth) |

arbitrary primal solution separation method of separator

Searches for cutting planes that separate the given primal solution. The method is called outside the LP solution loop (e.g., by a relaxator or a primal heuristic), which means that there is no valid LP solution.

input:

- scip : SCIP main data structure
- sepa : the separator itself
- sol : primal solution that should be separated
- result : pointer to store the result of the separation call
- allowlocal : should the separator allow local cuts?
- depth : preteneded depth of current node

- Note
- The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc. These limits should be checked against depth and not against the actual depth of the current node.

possible return values for *result (if more than one applies, the first in the list should be used):

- SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
- SCIP_CONSADDED : an additional constraint was generated
- SCIP_REDUCEDDOM : a variable's domain was reduced
- SCIP_SEPARATED : a cutting plane was generated
- SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
- SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
- SCIP_DIDNOTRUN : the separator was skipped
- SCIP_DELAYED : the separator was skipped, but should be called again

Definition at line 157 of file type_sepa.h.

## Typedef Documentation

## ◆ SCIP_SEPA

separator

Definition at line 42 of file type_sepa.h.

## ◆ SCIP_SEPADATA

typedef struct SCIP_SepaData SCIP_SEPADATA |

locally defined separator data

Definition at line 43 of file type_sepa.h.