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
- Install a Fortran Compiler
- Download IPOPT und entpacke es in das Installationsverzeichnis
- Installiere externe Bibliotheken
- Linearer Solver
HSL
, oderMUMPS
undMETIS
Blas
,LAPACK
undASL
(oder/undATLAs
)
- 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
- Configuration (Link)
$ 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
- Lapack: http://www.netlib.org/lapack/
$ 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:
- MA27
Als linearer Solver kann man anstelle von HSL auch nur MUMPS und METIS installieren.
MUMPS
- Hauptseite von 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
, andDYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/lib/libpardiso.dylib $ source ~/.profile
- Anleitung: http://pardiso-project.org/manual/manual.pdf
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
, oderMKL_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):
- Neustarten des Mac in Recovery Mode indem man beim Neustart Command+R gedrueckt haelt bis das Apple Symbol auf dem Bildschirm erscheint.
- Druecke Utilities > Terminal.
- Im Terminal Fenster, tippe “csrutil disable” und drücke Enter.
- 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
- Die verschiedenen Konfigurationsmöglichkeiten werden unter http://www.coin-or.org/Ipopt/documentation/node19.html#ExpertInstall beschrieben
- Aktuelle Probleme werden unter https://projects.coin-or.org/BuildTools/wiki/current-issues#Compilation beschrieben