2012-04-20 8 views
8

Ich bin auf der Suche nach Empfehlungen für C++ - Bibliotheken für nicht-lineare Programmierung (nicht nur für ganze Zahlen!).Nicht-lineare Programmierbibliothek in C++

Vorzug ist für aktiv gehaltene F/OSS-Lösungen, aber aktiv gehaltene kommerzielle Lösungen, die kostenlose Evaluierungsversionen anbieten, sind akzeptabel.

Vielen Dank im Voraus!

Edit: Wie gewünscht, sind hier weitere Details:

Die Anwendung arbeite ich an ist einfach, und es geht um Polynome vom Grad 4 und höher (bis zu 11) mit einem kleinen Satz zu minimieren (~ 20) von Constraints ausgedrückt als Ungleichungen (wiederum als Polynome, Grad < = 4). Gelegentlich muss ich aber auch eine trigonometrische Funktion einbauen. Auf jeden Fall sind es immer fortlaufende, differenzierbare Funktionen, mit denen ich es zu tun habe. Die Anzahl der Variablen reicht von 1 bis 12, und wird nicht viel darüber hinaus gehen.

Schließlich brauche ich eine Lösung, die auf Windows funktioniert, aber plattformübergreifende wäre vorzuziehen.

+0

Können Sie uns Beispiele für Berechnungen geben, die Sie ausführen möchten? In welchem ​​Bereich (Finanzen? Physik?)? Auf welchem ​​Betriebssystem? (eher * nix oder Windows?) –

+0

Bitte werfen Sie einen Blick auf meine Bearbeitung – em70

Antwort

2

NLopt hat festen C-Code für ein gutes Dutzend Algorithmen, einschließlich COBYLA, Constrained Optimierung durch lineare Approximationen für Derivates freier Optimierung mit nichtlinearen Ungleichheit und Gleichheitsbedingungen, von M. J. D. Powell.
Hinzugefügt: here sind Läufe von mehreren der nicht-derivativen Optimierer in NLopt.
Für Rosenbrock und Powell Testfunktionen in 5d und 10d sind sie alle sehr empfindlich auf zufällige Startpunkte; Ymmv.

6

Ich bin mir nicht sicher, aber vielleicht ROOT von CERN wird für Sie geeignet sein. Dies ist wirklich große Bibliothek (ROOT::Math::Polynomial Klasse zum Beispiel) von CERN selbst.

Ich muß sagen, es ist kein ‚One-Minute-zu-lernen‘ Bibliothek in der Tat, hat aber beide: Konsole mit allen Mathe Sachen in Echtzeit zu arbeiten (sieht ähnlich aus wie MathCAD cmd Linie) und Libs und dlls können Sie statisch mit Ihrem Code verknüpfen. Und es ist eine plattformübergreifende Bibliothek. Mehr zu sagen, die mächtigste Eigenschaft der ROOT ist, dass Sie fast alle Arten von Charts und Plots erstellen können.

+0

Könnten Sie bitte einen Link (in Ihrer Antwort) zu den Klassen geben, die nichtlineare Programmierung machen? – Ali

4

Die robusteste solche Bibliothek, die ich kenne, ist IPOPT.

Es ist erstaunlich robust, es gab mir Ergebnisse für chemisch-technische Probleme, die ich selbst mit kommerziellen Lösern nicht lösen konnte. Weitere Anwendungsbeispiele finden Sie unter success stories.

+0

@Denis Ich habe keinen Zugang zu einem Mac, so kann ich nicht sicher sagen. Allerdings [diese Anleitung] (https://projects.coin-or.org/Ipopt/wiki/Ipopt_on_Mac_OS_X) scheint gut gepflegt und sie sind vom 14. März 2012. Ich denke, es ist einen Versuch wert. – Ali

Verwandte Themen