Skip to content

Commit 7cc235d

Browse files
committed
adds documentation about using the decomposition structure for Benders
1 parent 01c7608 commit 7cc235d

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

doc/xternal.c

+37
Original file line numberDiff line numberDiff line change
@@ -7719,6 +7719,43 @@
77197719
* parameter is provided "reading/sto/usebenders" that will inform the STO reader to apply Benders' decomposition to the
77207720
* input stochastic program.
77217721
*
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+
*
77227759
* @section BENDERSDEFAULT Using the default Benders' decomposition plugin.
77237760
*
77247761
* A default implementation of a Benders' decomposition plugin has been included in \SCIP 6.0 (see

0 commit comments

Comments
 (0)