|
7719 | 7719 | * parameter is provided "reading/sto/usebenders" that will inform the STO reader to apply Benders' decomposition to the
|
7720 | 7720 | * input stochastic program.
|
7721 | 7721 | *
|
| 7722 | + * @section BENDERSDECSTRUCTURE Inputting a user-defined decomposition structure |
| 7723 | + * |
| 7724 | + * Benders' decomposition can be applied from a user-provided decomposition structure. Details about the decomposition |
| 7725 | + * structure and how to provide it to SCIP can be found at @ref DECOMP. Prior to reading the decomposition structure |
| 7726 | + * into SCIP, it is necessary to inform SCIP that the variables and constraints must be labelled for Benders' |
| 7727 | + * decomposition. This is achieved by setting the parameter "decomposition/benderslabels" to "TRUE". Following this, |
| 7728 | + * Benders' decomposition will be applied if the parameter "decomposition/applybenders" is set to "TRUE". |
| 7729 | + * |
| 7730 | + * When Benders' decomposition is applied using the decomposition structure, the Benders' decomposition algorithm is |
| 7731 | + * executed within a relaxator (see @ref RELAX). The relaxator is called when processing the root node of the original |
| 7732 | + * SCIP instance, before the first LP solve. Within the relaxator, a sub-SCIP is created, upon which the Benders' |
| 7733 | + * decomposition is applied. The default Benders' decomposition plugin (see @ref BENDERSDEFAULT) is used for applying |
| 7734 | + * the decomposition. The master problem sub-SCIP is solved and then the solution from the Benders' decomposition |
| 7735 | + * algorithm is returned. |
| 7736 | + * |
| 7737 | + * If the problem is solved to optimality by the Benders' decomposition algorithm, then the original SCIP instance |
| 7738 | + * terminates. There are cases where the Benders' decomposition algorithm terminates without an optimal solution. As a |
| 7739 | + * result, the original SCIP instance would continue solving. These cases are: reaching node, memory or solution limits, |
| 7740 | + * or numerical issues meaning that the Benders' solution is not optimal for the original problem. The parameter |
| 7741 | + * "relaxing/benders/continueorig" is provided to inform SCIP whether the original SCIP instance should continue solving |
| 7742 | + * following the completion of the Benders' algorithm. By default, solving in the original SCIP instance is interrupted |
| 7743 | + * when the relaxator finishes. |
| 7744 | + * |
| 7745 | + * The parameter setting and limits from the original SCIP instance are copied across to the master problem |
| 7746 | + * sub-SCIP in the Benders' decomposition relaxator. It is possible to set a separate node limit for the Benders' |
| 7747 | + * algorithm within the relaxator. This is achieved by using the parameter "relaxing/benders/nodelimit". A possible use |
| 7748 | + * case for a separate Benders' node limit is that the Benders' algorithm could be used as an initial heuristics for the |
| 7749 | + * original SCIP instance. |
| 7750 | + * |
| 7751 | + * An advantage over using the decomposition structure compared to an instance in the SMPS format is that the solution |
| 7752 | + * to the original problem is easily accessible. At the completion of the Benders' decomposition algorithm, the best |
| 7753 | + * know solution is copied back to the original SCIP instance. Note that using a decomposition structure is not the only |
| 7754 | + * way to get the original problem solution from the Benders' decomposition algorithm. Whichever method you use, it is |
| 7755 | + * possible to solve the Benders' decomposition subproblems by calling SCIPsetupBendersSubproblem() and then |
| 7756 | + * SCIPsolveBendersSubproblem() for each subproblem using the best solution from the master problem. An example of this |
| 7757 | + * can be found in solveBendersSubproblems() of `src/scip/relax_benders.c`. |
| 7758 | + * |
7722 | 7759 | * @section BENDERSDEFAULT Using the default Benders' decomposition plugin.
|
7723 | 7760 | *
|
7724 | 7761 | * A default implementation of a Benders' decomposition plugin has been included in \SCIP 6.0 (see
|
|
0 commit comments