Changes between Version 7 and Version 8 of WikiStart


Ignore:
Timestamp:
Jun 16, 2018 2:08:56 PM (2 years ago)
Author:
aykut
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart

    v7 v8  
    66framework.
    77
    8 DisCO does branch and bound search to solve MISOCP problems. DisCO depends on
    9 many other projects. It depends [https://github.com/aykutbulut/OSI-CONIC OsiConic]
    10 on communicating with its relaxation solvers. It depends on
    11 [https://github.com/aykutbulut/CGL-CONIC CglConic] to cut infeasible
    12 solutions. DisCO shares some commit history with COIN-OR project
    13 [https://github.com/coin-or/CHiPPS-BLIS CHiPPS-Blis]. Current master was
    14 re-written from scratch, however, and does not share any commits with BLIS.
    15 
    16 DisCO is distributed under the Eclipse Public License and is
    17 freely redistributable. All source code and documentation is Copyright
    18 2001-2017 by Lehigh University, Aykut Bulut and Ted Ralphs. This
    19 README may be distributed freely.
    20 
     8Please check [[https://github.com/aykutbulut/DisCO DisCO github page]] for more information.
    219
    2210=== Master Branch Build Status ===
     
    3523
    3624
    37 = Installation =
    38 
    39 == Basic Installation ==
    40 
    41 DisCO depends on many other projects. You should compile the dependant projects
    42 if they are not installed in your system. The easiest way of installing DisCO
    43 is using [https://projects.coin-or.org/BuildTools BuildTools] fetch and build
    44 script. For this you can use the following commands in Linux environment.
    45 After cloning DisCO, use
    46 
    47 {{{
    48 #!sh
    49 git clone --branch=stable/0.8 https://github.com/coin-or-tools/BuildTools
    50 bash BuildTools/get.dependencies.sh fetch > /dev/null
    51 bash BuildTools/get.dependencies.sh build
    52 }}}
    53 
    54 This compiles DisCO with Outer Approximation (OA) algorithm. This algorithm
    55 relaxes integrality constraints and conic constraints. Performs a branch and
    56 bound search to find a solution that satisfy both of these constraints.
    57 
    58 There are other algorithms implemented in DisCO. You can use a typical branch
    59 and bound algorithm where at each node only integrality constraints are
    60 relaxed. For this you need to provide a Second Order Conic Optimization (SOCO)
    61 solver. For now DisCO supports 3 solvers, Ipopt, Mosek and Cplex. To use DisCO
    62 with Ipopt you need to add {{{--with-soco-solver=ipopt}}} flag to configure
    63 script. This can be achieved with the following command.
    64 
    65 {{{
    66 #!sh
    67 ./configure --with-soco-solver=ipopt
    68 }}}
    69 
    70 Afterward you can call {{{make install}}} to build and install DisCO.
    71 
    72 == For advanced users ==
    73 
    74 Make sure all dependencies are accessible through pkg-config. Then DisCO's
    75 configure script will find them through pkg-config. Alternatively DisCO
    76 configure script can locate other projects if {{{--prefix}}} configure flag is
    77 set right. Assume other projects are installed at {{{install_dir}}}. Then use
    78 
    79 {{{
    80 #!sh
    81 ./configure --prefix=install_dir && make install
    82 }}}
    83 
    84 == Specifying an !Algorithm/Solver ==
    85 
    86 DisCO implements an Outer Approximation algorithm and it is the default
    87 behavior you will get. If you want to use DisCO with a typical branch and bound
    88 algorithm (only integrality constraints are relaxed in nodes and corresponding
    89 problems are solved with a SOCO solver) you need to specify this during
    90 configure. DisCO depends on [https://github.com/aykutbulut/OSI-CONIC OsiConic]
    91 in communicating with its solver. There are three solvers available,
    92 [https://projects.coin-or.org/Ipopt Ipopt], [https://mosek.com/ Mosek] and
    93 [https://www-01.ibm.com/software/commerce/optimization/cplex-optimizer/ Cplex].
    94 [https://github.com/aykutbulut/OsiIpopt OsiIpopt],
    95 [https://github.com/aykutbulut/OSI-MOSEK OsiMosek] and
    96 [https://github.com/aykutbulut/OsiCplex OsiCplex] implement
    97 [https://github.com/aykutbulut/OSI-CONIC OsiConic] interface for the corresponding
    98 solvers.
    99 
    100 To compile DisCO with !Mosek/Cplex you should first compile OSI with
    101 !Mosek/Cplex. Then you should compile !OsiMosek/OsiCplex. Please check OSI and
    102 !OsiMosek/OsiCplex documentations for details.
    103 
    104 Once !OsiMosek is compiled and installed, You can configure DisCO as follows.
    105 
    106 {{{
    107 #!sh
    108 ./configure --with-soco-solver=mosek
    109 }}}
    110 
    111 For Cplex just replace {{{mosek}}} with {{{cplex}}}. Similarly for Ipopt just
    112 use {{{ipopt}}}.
    113 
    114 To specify !CglConic IPM solver, you need to give {{{--with-ipm-solver}}} flag to
    115 configure script. For example, following command configures !CglConic to use Mosek
    116 in warm starting OA method.
    117 
    118 {{{
    119 #!sh
    120 ./configure --with-ipm-solver=mosek
    121 }}}
    122 
    123 Similarly you can use {{{cplex}}}, {{{ipopt}}} or {{{cola}}} instead of
    124 {{{mosek}}}. If no IPM solver is specified !CglConic will use Ipopt.
    125 
    126 
    127 == 1.4 Compiling with MPI ==
    128 
    129 To compile with MPI you need to give the following options to configure
    130 for DisCO and dependands projects.
    131 
    132 {{{
    133 #!sh
    134 ./configure --disable-shared --enable-static --with-mpi-lib=/usr/lib/libmpich.so.3.2 --with-mpi-incdir=/usr/lib/mpich/include MPICC=mpicc.mpich MPICXX=mpic++.mpich"
    135 }}}
    136 
    137 You should update directory locations and executable names acording to your
    138 system and MPI implementation you intend to use. DisCO is tested with and works for
    139 both mpich2 and openmpi.
    140 
    141 = Using DisCO =
    142 
    143 DisCO can read problems in Mosek's extended MPS format (it can handle CSECTION
    144 in mps files, see http://docs.mosek.com/7.1/capi/The_MPS_file_format.html) for
    145 SOCO problems. Once you compiled DisCO you can use is as follows.
    146 
    147 {{{
    148 #!sh
    149 path_to_disco/disco input.mps
    150 }}}
    151 
    152 This uses the default parameters (cut generation/branching/search etc.). You
    153 can modify its default behavior by specifying parameters. See src/disco.par.in
    154 file for available parameters. For example following solves input problem using
    155 strong branching with generating gomory cuts (available in OA algorithm only)
    156 in the root node.
    157 
    158 {{{
    159 #!sh
    160 path_to_disco/disco input.mps Alps_instance input.mps Dco_branchStrategy 3 Dco_cutGomoryStrategy 1
    161 }}}
    162 
    163 
    164 = Current Testing Status =
    165 
    166   * Operating Systems
    167     - Linux: Well tested.
    168     - Mac OS: I did not test DisCO in OS. In theory this should work.
    169     - Windows: Not tested.
    170   * Algorithms
    171     - OA: Well tested and works fine.
    172     - Ipopt: Works fine. There are missing functions in the [interface][5].
    173       Tested on CBLIB 2014 and random problems. Ipopt fails to converge on some
    174       instances.  We beleive this is due to nonsmooth formulation of the conic
    175       constraints.
    176     - Cola: Well tested, works fine.
    177     - Mosek: Works fine. There are missing functions in the interface. It is
    178       complete enough to work with DisCO. Well tested on CBLIB 2014 and random
    179       problems. Mosek might fail on numerically challanging instances.
    180     - Cplex: Missing functions in the interface. Interface is complete enough
    181       to work with DisCO. Tested on CBLIB 2014 and random problems. Cplex
    182       rarely fails on some instances.
    183   * !Branching/Cutting
    184     - When OA algorithm is used and Ipopt is chosen as an IPM solver in
    185       !CglConic, Ipopt might fail, on some problems, at the root node. You can
    186       use Mosek or Cplex for this if it is available to you.
    187   * MPI testing,
    188     - MPICH2: Tested and works fine.
    189     - OpenMPI: Tested up to 128 processors and works fine. Good parallelization
    190       performance when the tree is well balanced.
    191 
    192 = Documentation =
    193 
    194 You can refer to documentations of the dependant projects. DisCO uses doxygen
    195 for documentation purposes. {{{make doxygen}}} will produce a documentation
    196 of DisCO.
    197 
    198 = SUPPORT =
    199 
    200 == Authors ==
    201 
    202 Aykut Bulut (aykutblt@gmail.com), Ted Ralphs (ted@lehigh.edu).
    203 
    204 == Bug Reports ==
    205 
    206 Bug reports should be reported at the DisCO repository at
    207 https://github.com/aykutbulut/DisCO/issues/new