42 * \UG is originally a framework to parallelize state-of-the-art branch-and-bound based solvers to solve optimization problems such
43 * as constraint integer programs (CIPs) and mixed-integer (non-)linear programs. In particular
44 *
45 * - \UG incorporates a mixed-integer programming (MIP) solver as well as
46 * - an LP based mixed-integer nonlinear programming (MINLP) solver, and
47 * - is a framework for branch-and-cut-and-price programs.
48 *
49 * \UG is a high-level task parallelization framework that is generalized, that means it can also handle both branch-and-bound-based and non-branch-and-bound based solvers starting from \UG version 1.0.
50 *
51 * See the web site <a href="http://ug.zib.de">ug.zib.de</a> for more information about licensing and to download the recent release.
52 *
53 *
54 * @section TABLEOFCONTENTS Structure of this manual
55 *
56 * This manual gives an accessible introduction to the functionality of the UG code in the following chapters
57 *
58 * - @subpage GETTINGSTARTED Installation and license information and an interactive shell tutorial
59 * - @subpage PARAMETERS List of all UG parameters
60 * - @subpage PROGRAMMING Important programming concepts for working with(in) UG.
91 * In the \b Master-Worker paradigm, the communication is very simple, the key messages are:
92 * - \b Task : contains task information, such as a (sub-)problem representation and current best incumbent value
93 * - \b Result : contains all information regarding the task execution. In the case of a parallel MIP solver, the best incumbent solution and all open nodes as examples.
94 *
95 * \image html Master-Worker.png "A parallel MIP solver based on the Master-Worker paradigm" width=500px
96 * \image latex Master-Worker.png "A parallel MIP solver based on the Master-Worker paradigm" width=500px
97 *
98 * The \b granularity of a Task can be controlled in the Worker by a termination criterion for a (sub-)problem computation,
99 * such as the number of open nodes generated.
100 * Note that all open branch-and-bound nodes are managed by the Master side and the number of transferred nodes is huge in case the solution process
101 * generates a huge search tree.
102 * In order to reduce the number of open nodes, usually depth-first search is used in the Worker side.
103 * An advantage is that the all nodes in the Master are independent, that is, all nodes can be a (sub-)problem root.
104 * This fact allows for a simple checkpoint and restart mechanism, that can fully save and resume the tree search.
105 * This loosely coupled Master-Worker paradigm is very well suitable for high-throughput computing,
106 * but is not so efficient in large-scale high-performance computing.
241 * An Easy Way to Build Parallel State-of-the-art Combinatorial Optimization Problem Solvers:
242 * A Computational Study on Solving Steiner Tree Problems and Mixed Integer Semidefinite Programs
243 * by using ug[SCIP-*,*]-Libraries</a>)
244 *
245 * In the \UG framework, the underlying base solver is abstracted.
246 * By adding the \UG wrapper code etc. for a specific optimization problem,
247 * a massively parallel solver for the problem can be built.
248 * Ongoing projects are the following:
249 * - Quadratic Assignment Problem (\b QAP):
250 * DNN relaxation with Newton Bracket method based branch-and-bound solver is parallelized
251 * (see, <a href="https://arxiv.org/abs/2101.09629">Solving Challenging Large Scale QAPs</a>).
252 * - Traveling Salesman Problem (\b TSP): <a href="http://www.math.uwaterloo.ca/tsp/concorde.html">
253 * Concorde TSP solver</a> has been parallelized by \UG.
254 * - \b MIP: Another MIP solver, in which multi-threaded FICO Xpress solver is used as underlying base solver
255 * (see, <a href="https://www.tandfonline.com/doi/abs/10.1080/10556788.2018.1428602?journalCode=goms20">ParaXpress: an experimental extension of the FICO Xpress-Optimizer to solve hard MIPs on supercomputers</a>).
256 *
257 * Also, \UG version 1.0 can be used to parallelize non-branch-and-bound based solvers:
258 * A Shortest Vector Problem (\b SVP : see <a href="https://www.latticechallenge.org/svp-challenge/">
259 * SVP Challenge</a>) solver has been parallelized by \UG.
260 *
261 *
262 *
263 *
264 *
265 */
266
267/**@page LICENSE License
268 *
269 * \verbinclude COPYING
270 */
271
272/**@page INSTALL Installing UG
273 *
274 * This chapter is a detailed guide to the installation procedure of UG.
275 *
276 * UG lets you freely choose between its own, manually maintained Makefile system
277 * or the CMake cross platform build system generator. For new users, we strongly
278 * recommend to use CMake, if available on their targeted platform.
279 *
280 * - @subpage CMAKE "Installation information using CMake (recommended for new users)"
281 * - @subpage MAKE "Installation information using Makefiles (deprecated)"
282 */
283
284/**@page CMAKE Building UG with CMake
285 *
286 * <a href=https://cmake.org/>CMake</a> is a build system generator that can create, e.g., Makefiles for UNIX and Mac
287 * or Visual Studio project files for Windows.
288 *
289 * CMake provides an <a href="https://cmake.org/cmake/help/latest/manual/cmake.1.html">extensive documentation</a>
290 * explaining available features and use cases as well as an <a href="https://cmake.org/Wiki/CMake_FAQ">FAQ section</a>.
291 * It's recommended to use the latest stable CMake version available. `cmake --help` is also a good first step to see
385 * - UG base classes: Classes for high-level task parallelization features
386 * - B&B Base classes: Classes for general parallel Branch-and-Bound features
387 * - UG_SCIP classes: Classes to parallelize the SCIP solver
388 *
389 * To add code to a specific baseSolver locate the source code files to parallelize the baseSolver in
390 *
391 * - src/ug_baseSolver
392 *
393 * The code specific to baseSolver can be inherited from B&B base classes or from UG base classes depending on the solver being based on B&B or non-B&B.
394 *
395 */
396
397/**@page CODE Coding style guidelines
398 *
399 * We follow the following coding style guidelines and recommend them for all developers in coding-style-guidelines.md.
400 * \verbinclude coding-style-guidelines.md
401 *
402 * If you want to contribute to UG development, please check out the contribution-guidelines.md.
403 * \verbinclude contribution-guidelines.md
404 *
405 * @section CODESPACING Spacing:
406 *
407 * - Indentation is 3 spaces. No tabs anywhere in the code.
408 * - Every opening parenthesis requires an additional indentation of 3 spaces.
409 *
410 * @section CODENAMING Naming:
411 *
412 * - Use assert() to show preconditions for the parameters, invariants, and postconditions.
413 * - Make all functions that are not used outside the module 'static'.
414 * - Naming should start with a lower case letter.
415 *
416 * @section CODEDOC Documentation:
417 *
418 * - Document functions, parameters, and variables in a doxygen conformed way.
419 *
420 * @section ECLIPSE Customize eclipse
421 *
422 * Eclipse user can use the profile below. This profile does not match the \UG coding guideline completely.
423 *
424 * \include codestyle/eclipse_ug_codestyle.xml
425 *
426 */
427
428/**@page DEBUG Debugging
429 *
430 * If you need to debug your own code that uses UG, here are some tips and tricks:
431 *
432 * - Use <b>asserts</b> in your code to show preconditions for the parameters, invariants and postconditions.
433 * Assertions are boolean expressions which inevitably have to evaluate to <code>TRUE</code>.
434 *
435 * - Compile UG in debug mode and run it with <a href="https://github.com/rr-debugger/rr">RR (Record and Replay)</a> or your favourite debug tool.