Ich habe mich entschieden, meine Antwort basierend auf einigen Kommentaren radikal zu bearbeiten.
Ich habe TAO nicht benutzt. Aus Durchsicht die Dokumentation, wie es scheint , die einzige Möglichkeit , dass TAO erzwungener Optimierungsprobleme behandeln kann ( mit Ausnahme des Sonderfalls nur Box Einschränkungen) ist das Problem in eine Variationsungleichung mit den konvertieren Karush-Kuhn-Tucker (KKT) Bedingungen , die sind unter der Einschränkungsqualifikation erforderlich (der Typ, den ich normalerweise sehe, ist die Slater-Punkt-Bedingung ) und ausreichend unter der Konvexität des Ziels und der Einschränkungen (allgemeiner Typ 1-Invexität). Wennfist nicht konvex, die Variationsungleichungsformulierung unter Verwendung der KKT-Bedingungen entspricht NICHT dem ursprünglichen Optimierungsproblem. Wenn Sie also ein globales Optimum für das Optimierungsproblem wünschen, sollten Sie es nicht als Variationsungleichung ausdrücken. Es ist ohnehin schwierig, ein globales Optimum für die PDE-beschränkte Optimierung zu finden (siehe unten). Vielleicht ist es in Ordnung, dieses Detail zu ignorieren. Angesichts dessen, was Wolfgang gesagt hat, wäre ich skeptisch, TAO einzusetzen. Ich bin bereits skeptisch, weil es keine Methoden zum Lösen nichtlinearer Programme (NLPs) als NLPs implementiert, sondern Variationsungleichungen.
Ich bin kein Experte für PDE-beschränkte Optimierung. Mitarbeiter und Mitarbeiter von mir arbeiten an ODE-beschränkten Optimierungsproblemen. Ich weiß, dass Larry Biegler (und andere) für aufdringliche Formulierungen Kollokationsmethoden verwenden wird, um die PDE zu diskretisieren und sie zu einem sehr großen, spärlichen NLP zu machen, und dann wird er sie mithilfe von Innenpunktmethoden lösen. Um das Problem der globalen Optimalität wirklich zu lösen, müssten Sie auch konvexe Relaxationen erzeugen, aber meines Wissens wird dieser Ansatz nicht gewählt, da Optimierungsprobleme aufgrund von PDE zu so großen NLPs führen, dass es schwierig ist, sie zu lösen globale Optimalität. Ich erwähne diese Details nur, weil die Problemformulierung die Wahl des Lösungspakets stark beeinflusst. Bei nichtintrusiven Formulierungen ergeben wiederholte PDE-Lösungen Gradienteninformationen für Optimierungsalgorithmen.
Einige Personen, die ODE-beschränkte Optimierungsprobleme untersuchen, verwenden einen ähnlichen Ansatz zur Diskretisierung des Problems mithilfe der Kollokation und einer numerischen Methode. Anschließend wird der resultierende NLP gelockert, um eine konvexe Formulierung zu erhalten, die in einem globalen Optimierungsalgorithmus verwendet wird. Ein alternativer Ansatz für die ODE-beschränkte Optimierung besteht darin, das Problem zu lösen und dann die ODE zu diskretisieren. Dies ist der Ansatz, den ich in meinem Labor gewählt habe. Es könnte möglich sein, bestimmte Klassen von Optimierungsproblemen mit PDE-Einschränkungen zu lockern, aber ich kenne keine noch ausstehenden Arbeiten, die an diesem Problem vorgenommen wurden. (Es war einmal ein potentielles Projekt in meinem Labor.)
Entscheidend ist letztendlich nicht die Differenzierbarkeit der ursprünglichen PDE, sondern die Differenzierbarkeit der Diskretisierung in Bezug auf die Entscheidungsvariablen.
Wenn das diskretisierte Problem in Bezug auf die Entscheidungsvariablen doppelt differenzierbar ist, berechnen die folgenden Pakete eine lokale Lösung:
- IPOPT ist ein Open Source- Innenpunktlöser, der von Andreas Wächter bei IBM entwickelt wurde. Es ist ein sehr hochwertiger Code. Als Innerer-Punkt-Löser ist es besser für objektive Funktionen mit großen, spärlichen Jacobi-Matrizen und für die PDE-beschränkte Optimierung geeignet
- SNOPT ist ein kommerzieller Löser für sequentielle quadratische Programmierung, bei dem es sich ebenfalls um einen hochwertigen Code handelt. Es ist besser für objektive Funktionen mit kleinen, dichten Jacobi-Matrizen, daher würde ich nicht erwarten, dass es für die PDE-beschränkte Optimierung nützlich ist, aber Sie könnten es versuchen.
- NLopt ist ein kleiner Open-Source-Code, der von Steven Johnson am MIT geschrieben wurde und grundlegende Implementierungen einer Reihe nichtlinearer Optimierungsalgorithmen enthält. Alle Algorithmen sollten für die Lösung von Problemen mit beschränkten Bedingungen geeignet sein.
fmincon
in Matlab implementiert eine Reihe von Algorithmen (einschließlich Innenpunkt- und sequentieller quadratischer Programmierung) für die nichtlineare Optimierung
- GAMS und AMPL sind beide kommerzielle Modellierungssprachen zur Formulierung von Optimierungsproblemen und enthalten Schnittstellen zu einer großen Anzahl nichtlinearer Programmierlöser. Ich weiß, dass GAMS eine Testversion hat, die für kleinere Probleme verwendet werden kann. Probleminstanzen können auch zur Lösung an den NEOS-Server gesendet werden.
Es ist jedoch möglich, dass die Diskretisierung in Bezug auf die Entscheidungsvariablen nur einmal differenzierbar ist. In diesem Fall sollten Sie bei der Berechnung einer lokalen Lösung den projizierten steilsten Abstieg oder eine andere Optimierungsmethode erster Ordnung verwenden. Da sich viele Studien auf Probleme konzentrieren, bei denen Methoden zweiter Ordnung verwendet werden können (und wenn Sie sie verwenden können, sind sie aufgrund ihrer überlegenen Konvergenzeigenschaften eine bessere Wahl), konnte ich nicht viele Implementierungen steilster Abstammung finden, die keine Lösungen waren zu Hausaufgabenproblemen. Die GNU Scientific Library hat eine Implementierung, die jedoch nur zu Demonstrationszwecken dient. Sie müssten wahrscheinlich Ihre eigene Implementierung programmieren.
Wenn das Problem nur in Bezug auf die Entscheidungsvariablen kontinuierlich ist, können Sie es lokal mit direkten Methoden lösen. Es gibt eine hervorragende Übersicht über direkte Methoden von Kolda, Lewis und Torczon . Die bekannteste dieser Methoden ist der Nelder-Mead-Simplex-Algorithmus . Es ist nicht garantiert, dass es in mehreren Dimensionen zu einem lokalen Minimum konvergiert, aber es hat trotzdem beträchtlichen praktischen Nutzen gefunden.
Die Wahl des Pakets hängt wirklich von der Sprache ab, die Sie zur Lösung des Problems verwenden möchten. Wenn die Lösung des Problems mit gebundenen Bedingungen nur ein Teil eines Algorithmus ist, den Sie implementieren möchten (oder wenn dies der einzige Schritt in Ihrem Algorithmus ist, in diesem Fall Modellierungssprachen) werden für den Produktionscode praktikabler), die Art und Größe des Problems und wenn Sie Parallelität benötigen.