Institut für Theoretische Informatik, Algorithmik

IPOPT

IPOPT ist ein Interior Point OPTimizer und ist eine Software Library für große nichtlineare Optimierungsprobleme. Die Installationshinweise sind zum einen unter Coin-OR zu finden oder eine alternative Beschreibung befindet sich auch unter Beschreibung.

Requirements sind unter folgendem Link zu finden Coin-OR-Requirements.

Schritte

  1. Install a Fortran Compiler
  2. Download IPOPT und entpacke es in das Installationsverzeichnis
  3. Installiere externe Bibliotheken
    • Linearer Solver HSL, oder MUMPS und METIS
    • Blas, LAPACK und ASL (oder/und ATLAs)
  4. Lege die Umgebungsvariable an
	$ mkdir <Path to directory of IPOPT>
	$ vi ~/.profile     
	export IPOPTDIR=<Path to directory of IPOPT>
	$ source ~/.profile

5. Baue IPOPT

Schritt 3: Externe Bibliotheken

Alle OS spezifischen Besonderheiten sind unten zu finden.

ATLAs

	$ cd <Path to directory of ATLAs>	(SRCdir)
	$ mkdir build				(BLDdir)
	$ cd BLDdir/
	$ <Path to directory of ATLAs>/configure -b 64 -D c -DPentiumCPS=2600 --prefix=<Path to directory of ATLAs> --with-netlib-lapack-tarfile=<Path to tar file of lapack>/lapack-3.6.0.tar
	$ make build                   # tune & build lib
	$ make check                   # sanity check correct answer
	$ make ptcheck                 # sanity check parallel

(http://math-atlas.sourceforge.net/atlas_install/node40.html) Bemerkung: Der angezeigte Fehler 'Error 1 (ignored)' kommt von make und bedeutet, dass 'fgrep' keine Fehler in der Ausgabedatei findet.

	$ make time                    # check if lib is fast
	$ make install                 # copy libs to install dir

HSL

Die Hauptseite ist unter folgendem Link zu finden HSL Software Index. Für IPOPT existiert ein gebündeltes Paket, welches man anfordern kann unter HSL for IPOPT. Für die Installationen werden die Libraries benötigt:

Als linearer Solver kann man anstelle von HSL auch nur MUMPS und METIS installieren.

MUMPS

PARDISO

  • Hauptseite von PARDISO
  • Setzen der Anzahl der Threads, d.h. 8 Kerne, bevor man ipopt.mexa64 in Matlab laufen lässt.
	$ vi ~/.profile     
	export OMP_NUM_THREADS=8
  • Set environment variable LD_LIBRARY_PATH to PARDISO library
	export LD_LIBRARY_PATH=<Path to directory of PARDISO>
  • Standardort für dynamische Bibliotheken ist ~/lib, /usr/local/lib, und /usr/lib
    • Auf dem Mac OS X: libhsl.dylib, libpardiso.dylib, and DYLD_LIBRARY_PATH
        export DYLD_LIBRARY_PATH=/usr/lib/libpardiso.dylib
	$ source ~/.profile
        gcc <source/objects files> -o <executable> -L <Path to directory of PARDISO> -lpardiso500-MACOS-X86-64.dylib -L <Path to directory of LAPACK/BLAS> -l <Fast LAPACK and BLAS libraries> -liomp5.dylib 
        gfortran <source/objects files> -o <executable> -L <Path to directory of PARDISO> -lpardiso500-MACOS-X86-64.dylib -L <Path to directory of LAPACK/BLAS> -l <fast LAPACK and BLAS libraries> -liomp5.dylib

WSMP

  • Hauptseite von WSMP
        $ vi ~/.profile
        export WSMPLICPATH=<Path to directory of WSMP>
        $ source ~/.profile
  • Mit einigen BLAS Bibliotheken kann es nötig sein die folgende Umgebungsvariable zu setzten
        export OMP_NUM_THREADS=1
        gfortran -o <executable> <user source or object files> -m32 -lwsmp -L<path of libwsmp.a> -lm -lpthread -framework Accelerate 
        gfortran -o <executable> <user source or object files> -m64 -lwsmp64 -L<path of libwsmp64.a> -lm -lpthread - framework Accelerate
  • Es ist wichtig, dass die BLAS Bibliothek im Single-Thread-Modus arbeitet, wenn es mit WSMP gelinked wird. Dies kann mittels der Umgebungsvariable OMP_NUM_THREADS, MKL_NUM_THREADS, oder MKL_SERIAL sichergestellt werden.

Schnelle Variante

  • Kopiere Bibliotheken in das richtige Verzeichnis
        $ cd $IPOPTDIR/ThirdParty/Blas 
        $ ./get.Blas 
        $ cd ../Lapack 
        $ ./get.Lapack 
        $ cd ../ASL 
        $ ./get.ASL
  • Füge HSL-Bibliothek zu dem folgenden Verzeichnis $IPOPTDIR/ThirdParty/HSL/coinhsl hinzu
  • Füge MUMPS-Bibliothek zu dem folgenden Verzeichnis $IPOPTDIR/ThirdParty/Mumps/MUMPS hinzu

IPOPT for Linux (openSUSE Release 13.2, Harlequin)

Überprüfe, ob ein gfortran oder ein mpif77 auf deinem System installiert ist. In meinem Fall ist ein gfortran-4.8 und ein mpif77 installiert. Damit können von PARADISO die folgenden Bibliotheken verwendet werden libpardiso500-GNU481-X86-64.so und libpardiso500-MPI-GNU472-X86-64.so.

$ vi ~/.profile
  
  ...
  # IPOPT Directory 
  export IPOPTDIR="/home/i11/fwegner/lib/Ipopt/Ipopt-3.12.6"

  # Number of Threads for ipopt.mexa64
  export OMP_NUM_THREADS=8

  # Paradiso for gfortran Compiler
  export DYLD_LIBRARY_PATH="<PATH TO IPOPT>/ThirdParty/Paradiso/libpardiso500-GNU481-X86-64.so:$DYLD_LIBRARY_PATH"
  export LD_LIBRARY_PATH="<PATH TO IPOPT>/ThirdParty/Paradiso/libpardiso500-GNU481-X86-64.so:$LD_LIBRARY_PATH"
  
  # Paradiso MPI Fortran Compiler
  export DYLD_LIBRARY_PATH="<PATH TO IPOPT>/ThirdParty/Paradiso/libpardiso500-MPI-GNU472-X86-64.so:$DYLD_LIBRARY_PATH"
  export LD_LIBRARY_PATH="<PATH TO IPOPT>/ThirdParty/Paradiso/libpardiso500-MPI-GNU472-X86-64.so:$LD_LIBRARY_PATH"
$ source ~/.profile
$ ../configure --with-pardiso="<PATH TO PARADISO>/libpardiso500-GNU481-X86-64.so"

IPOPT for OS X (El Capitan)

Fortran Compiler

Fortran wird für einige Libraries benötigt und muss für IPOPT installiert werden. Mögliche Fortran-Compiler:

ATLAs

Mittels MacPorts

	$ sudo port selfupdate
	$ sudo port upgrade outdated
	$ sudo port install atlas

ATLAs selbstbauen

  • Ausschalten von CPU throttling für die Installation von ATLAS
    • Folgende Anweisung funktioniert nicht: sudo nvram boot-args=„rootless=0“;sudo reboot
    • Folgende Schritte funktionieren: (http://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity- protection-sip-aka-rootless-on-os-x-10-11):
      1. Neustarten des Mac in Recovery Mode indem man beim Neustart Command+R gedrueckt haelt bis das Apple Symbol auf dem Bildschirm erscheint.
      2. Druecke Utilities > Terminal.
      3. Im Terminal Fenster, tippe “csrutil disable” und drücke Enter.
      4. Starte deinen Mac neu.
    • Sichere den Ordner 'IOPlatformPluginFamily.kext', welcher im Verzeichnis '/System/Library/Extensions' zu finden ist, in ein anderes Verzeichnis bspw. ein externes Medium. Lösche den Ordner und leere den Papierkorb. Starte das System neu. Wenn du ATLAs installiert hast, kannst du den Ordner wieder reinziehen und damit reaktivieren.
  • Die restlichen Konfigurationen sind oben zu finden.

METIS via MacPorts

$ sudo port selfupdate
$ sudo port update-outdated
$ sudo port install METIS

Installation

  • Installiere gcc 4.9 damit wird alles Standardmäßig mit stdc++ gebaut
  • Hinweis: Achte darauf, dass deine Projekte mit dem gleichen Compiler gebaut werden
  • ACHTUNG: Nutze bei Gurobi die Bibliothek libgurobi_stdc++.a, die es ab Gurobi 6.5 gibt und unter /Library/gurobi<version>/<os>/lib zufinden ist. Denn Gurobi nutzt Standardmäßig NICHT stdc++. Passe gegebenenfalls deine CMAKE Konfiguration an.
        $ sudo port selfupdate
        $ sudo port update-outdated
        $ sudo port install gcc49
        $ sudo port select --set gcc mp-gcc49
        $ cd $IPOPTDIR 
        $ mkdir build
        $ cd build
        $ ../configure  CC=gcc CXX=g++
        $ make
        $ make test
        $ make install
        $ make install-doxydoc