1 | | = Welcome to the LaGO home page = |
2 | | |
3 | | == **Note**: The development of LaGO has ceased. == |
4 | | If you are looking for an open-source global solver for MINLPs, consider using [https://projects.coin-or.org/Couenne Couenne]. |
5 | | |
6 | | == Introduction == |
7 | | |
8 | | LaGO ('''La'''grangian '''G'''lobal '''O'''ptimizer) is a software-package for the global optimization of nonconvex mixed-integer nonlinear programs (MINLP). |
9 | | It is written in C++ and is released as open source code under the [http://www.opensource.org/licenses/cpl.php Common Public Licence (CPL)]. |
10 | | The code has been written by Ivo Nowak and [http://www.math.hu-berlin.de/~stefan Stefan Vigerske] (Humboldt-University Berlin), who is the COIN project leader for LaGO. |
11 | | |
12 | | LaGO is designed to find global solutions of mathematical optimization programs of the form |
13 | | {{{ |
14 | | min f(x) |
15 | | s.t. g(x) <= 0 |
16 | | h(x) = 0 |
17 | | x_L <= x <= x_U |
18 | | x_i integer i\in B |
19 | | }}} |
20 | | where {{{ f: R^n --> R }}} is the objective function and {{{ g: R^n --> R^m }}} and {{{ h: R^n --> R^k }}} are the constraint functions. |
21 | | {{{ x_L }}} and {{{ x_U }}} denote lower and upper bounds on the variables, and {{{ B }}} the indices of the discrete variables. |
22 | | The functions {{{ f(x), g(x),}}} and {{{ h(x) }}} can be nonlinear and nonconvex, but have to be twice continuously differentiable. |
23 | | |
24 | | LaGO can work with black-box formulations of the functions {{{ f(x), g(x),}}} and {{{ h(x).}}} |
25 | | Only methods for the evaluation of function values, gradients, and Hessian-vector-multiplications, and information about sparsity of the functions have to be provided.[[BR]] |
26 | | The bounds {{{ x_L }}} and {{{ x_U }}} should be finite. |
27 | | LaGO has some methods to deal with unbounded variables, but they are likely to fail on more difficult optimization problems. |
28 | | |
29 | | == Download / Installation == |
30 | | |
31 | | You can obtain the LaGO code by subversion, please refer to the [https://projects.coin-or.org/BuildTools/wiki/user-download Downloading the Source Code webpages]. |
32 | | Individual files can also be obtained from the [source: subversion web interface]. |
33 | | The LaGO distribution can be used to generate solver executables for the [http://www.ampl.com AMPL] or [http://www.gams.com GAMS] modeling environments. |
34 | | |
35 | | LaGO has only been used on Linux 32- and 64-bit systems with Intel compatible processors so far. |
36 | | The installation is likely to fail on other platforms since it has never been tested. |
37 | | |
38 | | === Latest stable version === |
39 | | |
40 | | The latest stable release is version 0.3. You can obtain it via subversion by |
41 | | {{{ |
42 | | svn checkout https://projects.coin-or.org/svn/LaGO/stable/0.3 COIN-LaGO |
43 | | }}} |
44 | | |
45 | | The build system can be used as documented on the [https://projects.coin-or.org/BuildTools BuildTools webpage]. |
46 | | If you have problems with it, don't hesitate to ask me by using the [http://list.coin-or.org/mailman/listinfo/lago mailing list] or [https://projects.coin-or.org/LaGO/newticket reporting a bug] (after [https://projects.coin-or.org/LaGO/login login]). |
47 | | |
48 | | When you checkout LaGO, you will also get the following COIN-OR packages: |
49 | | |
50 | | * [https://projects.coin-or.org/BuildTools/wiki BuildTools] |
51 | | * [https://projects.coin-or.org/CoinUtils/wiki CoinUtils] |
52 | | * [https://projects.coin-or.org/Clp/wiki Clp] |
53 | | * [https://projects.coin-or.org/Cgl/wiki Cgl] |
54 | | * [https://projects.coin-or.org/Osi/wiki Osi] |
55 | | * [https://projects.coin-or.org/Ipopt/wiki Ipopt] |
56 | | * !ThirdParty/HSL or !ThirdParty/Mumps, !ThirdParty/Blas, !ThirdParty/Lapack (required by Ipopt) |
57 | | * !ThirdParty/ASL and !ThirdParty/GAMSIO (one or the other) |
58 | | |
59 | | === Third Party packages === |
60 | | |
61 | | Further, LaGO depends on the following third party packages: |
62 | | |
63 | | * [http://www.gams.com GAMS] I/O libraries (alternative to ASL) |
64 | | * NIST Template Numerical Toolkit: [http://math.nist.gov/tnt TNT] |
65 | | * Serial Graph Partitioning and Fill-reducing Matrix Ordering: [http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS] |
66 | | * Random Number Generation: [http://www.netlib.org/random RANLIB.C] |
67 | | * Interval Arithmetic Library: [http://www.math.uni-wuppertal.de/wrswt/software/filib.html FILIB++] (optional) |
68 | | * ILOG LP Solver: [http://www.ilog.com/products/cplex CPLEX] (optional) |
69 | | |
70 | | For the first five packages and the ASL, scripts are provided (in {{{trunk/ThirdParty}}}) which download and install these packages. |
71 | | These scripts have to be executed before {{{configure}}} is called. |
72 | | Alternatively, you can give the location of the compiled packages as parameters in your {{{configure}}} call. |
73 | | |
74 | | ==== GAMS interface ==== |
75 | | |
76 | | If you want to use LaGO with GAMS interface, you can download the required GAMS I/O libraries using the {{{get.LX3}}} (32-bit Linux) or {{{get.LEI}}} (64-bit Linux) script in !ThirdParty/GAMS_IO. |
77 | | |
78 | | Furthermore, LaGO requires some libraries from an installed GAMS distribution for linking. |
79 | | Hence, the {{{configure}}} script searches for a GAMS system in your {{{PATH}}} environment variable. |
80 | | Alternatively, you can give the path to a GAMS system as a parameter to the {{{configure}}} script. |
81 | | A GAMS system can be downloaded [http://www.gams.com/download here]. |
82 | | |
83 | | To make GAMS known of LaGO, you copy the file {{{bin/gmsla_.zip}}} into your GAMS distribution. |
84 | | To inform GAMS about the new solver, you now need to call the program {{{gamsinst}}} of your GAMS distribution. |
85 | | From now on you can use LaGO by giving the argument {{{MINLP=LAGO}}} when solving a MINLP via GAMS. |
86 | | |
87 | | ==== AMPL interface ==== |
88 | | |
89 | | If the {{{configure}}} script does not find GAMS I/O libraries or a GAMS system, it will check whether the AMPL Solver Library is installed. |
90 | | If so, a LaGO binary with AMPL interface will be generated. |
91 | | You use this binary by first generating a {{{.nl}}} file from you AMPL model and then parsing the name of the .nl file as argument to LaGO. |
92 | | |
93 | | ==== FILIB++ ==== |
94 | | |
95 | | If you make the FILIB++ available to LaGO, features based on interval arithmetic are activated. |
96 | | Note, that if you use the FILIB++, also the interface to the optimization problem need to provide methods to evaluate functions over an interval. |
97 | | This is only the case for the GAMS interface. |
98 | | Thus, the interval arithmetic features in LaGO will not work when you use the AMPL interface (exception: If your MINLP is purely linear and quadratic (MIQQP), then it will work, since quadratic and linear functions are handled separately by LaGO.). |
99 | | |
100 | | ==== CPLEX ==== |
101 | | |
102 | | If you want to use CPLEX, you have to provide the linker flag and the path of the include file {{{cplex.h}}} to the configure script ({{{--with-cplex-lib}}} and {{{-with-cplex-incdir}}}), e.g., |
103 | | {{{ |
104 | | --with-cplex-incdir=<path-to-cplex.h> --with-cplex-lib="-L<path-to-cplex-library> -lcplex -lpthread" |
105 | | }}} |
106 | | If CPLEX is not available for LaGO, COIN/Clp is used. |
107 | | |
108 | | == Usage / Documentation == |
109 | | |
110 | | LaGO can be used with either AMPL or GAMS, depending on your configuration.[[BR]] |
111 | | If you use GAMS, you can install LaGO as MINLP solver in your GAMS system, see the documentation above.[[BR]] |
112 | | If you use AMPL, you have to pass the name of a {{{.nl}}} file as argument to LaGO. Optional you can pass the name of parameter file as second argument. |
113 | | |
114 | | Due to the early state of the LaGO project, documentation is available only in a very limited form. |
115 | | The directory doc contains a makefile which calls flex to generate a program that generates a parameter documentation. |
116 | | The easiest is to call make in the doc directory. Then point your webbrower to one of the files {{{doc/paramdoc.html}}}, {{{doc/shortparamdoc.html}}}, {{{doc/veryshortparamdoc.html}}}. |
117 | | These files differ in the amount of LaGO parameters that are listed. |
118 | | * {{{doc/veryshortparamdoc.html}}} documents those parameters which might be most interesting for you when you are starting to use LaGO. |
119 | | * {{{doc/shortparamdoc.html}}} documents those parameters that can also be useful to influence the behaviour of LaGO. |
120 | | * {{{doc/paramdoc.html}}} documents all parameters of LaGO. |
121 | | This documentation is more directed to developers, since many features that you can switch on there are not tested and are in a very early state. |
122 | | |
123 | | The parameters in a LaGO optionfile have the format {{{parametername : parametervalue}}}. |
124 | | An exemplary {{{lago.opt}}} has the form |
125 | | {{{ |
126 | | MinlpBCP max iter: 1000 |
127 | | BCP subdiv type: Violation |
128 | | #nlp solver for local minimization |
129 | | GAMS LocOpt solver : snopt |
130 | | }}} |
131 | | |
132 | | A doxygen documentation of the classes in LaGO can be generated by calling {{{make doxydoc}}} in the main directory of the LaGO package (after configure has been called). |
133 | | |
134 | | The recent paper [http://www.mathematik.hu-berlin.de/publ/pre/2006/P-06-24.ps LaGO - a (heuristic) Branch and Cut algorithm for nonconvex MINLPs] and the slides |
135 | | [http://www.math.hu-berlin.de/~eopt/papers/ago07.pdf LaGO - Branch and Cut for nonconvex MINLPs] illustrate the Branch and Cut algorithm implemented in LaGO. |
136 | | |
137 | | We have also a [http://list.coin-or.org/mailman/listinfo/lago mailing list] where you can subscribe to get notifications about updates and to post questions and comments regarding LaGO. |
138 | | If you believe you found a bug in the code, please use the bug report system (see the [report: View Tickets], [https://projects.coin-or.org/LaGO/login Login], and [https://projects.coin-or.org/LaGO/newticket New Ticket] tabs on put of this page); please include as much information as possible, and if possible some (ideally simple) example code so that we can reproduce the error. |
139 | | |
140 | | == Tests == |
141 | | |
142 | | The LaGO distribution contains a directory {{{test}}}. |
143 | | After installation, you find in this directory the script {{{run_tests}}}. |
144 | | This script runs LaGO with several models that are taken from the [http://www.gamsworld.org/minlp/minlplib.htm GAMS MINLPLib]. |
145 | | All these tests should work. |
146 | | If you experience that some test is not working, you can [https://projects.coin-or.org/LaGO/newticket submit a bug report] (after [https://projects.coin-or.org/LaGO/login login]), preferably together with the LaGO output. |
147 | | |
148 | | == Project Links == |
149 | | |
150 | | * [http://www.coin-or.org COIN-OR Initiative] |
151 | | |
152 | | * [https://projects.coin-or.org/BuildTools/wiki/user-download Documentation for the download of the source code] |
153 | | |
154 | | * [http://list.coin-or.org/mailman/listinfo/lago mailing list] |
155 | | |
156 | | * [https://projects.coin-or.org/LaGO/login Login] and [https://projects.coin-or.org/LaGO/newticket report a bug] |
| 1 | = LaGO has been moved to https://github.com/coin-or/LaGO = |