2016-05-10 8 views
1

Betrachten Sie das folgende Ziel:Effiziente Auswertung von beliebigen Funktionen wie Daten gegeben, in C++

Erstellen Sie ein Programm, das löst: minimize f(x) für eine beliebige f und x als Eingang zugeführt.

Wie könnte man ein C++ - Programm entwerfen, das eine Beschreibung von f und x empfangen und effizient verarbeiten könnte?

Wenn das Programm tatsächlich eine C++ Bibliothek ist dann könnte man explizit den Code für f schreiben und x (wahrscheinlich von einer Basisfunktionsklasse für f und Zustandsklasse für x vererben). Was sollte man jedoch tun, wenn das Programm zum Beispiel ein Dienst ist und der Benutzer die Beschreibung von f und x in einer höheren Darstellung, z.B. ein JSON-Objekt?

Ideen, die Ihnen einfallen 1- Konvertieren Sie f in eine interne Funktionsdarstellung (z. B. eine Liste grundlegender Operationen). Wenden Sie diese an, wann immer f ausgewertet wird. Probleme: ineffizient, es sei denn, jede Operation ist eine Stapeloperation (z. B. wenn Vektor- oder Matrixoperationen mit großen Vektoren/Matrizen durchgeführt werden).

2- Irgendwie generieren Sie C++ - Code und kompilieren Sie den Code für die Darstellung x und Computing f. Gibt es eine Möglichkeit, die Kompilierung zu beschränken, sodass nur dieser Code kompiliert werden muss, aber der Rest des Codes bereits "vorkompiliert" ist?

+0

Verwenden Sie einen einbettbaren JIT-Compiler, wie luajit? –

+0

Wie sie es tun, habe ich keine Ahnung, aber es ist in der C++ - Version des Acado-Toolkits getan. http://acado.github.io/ – DrDonut

Antwort

1

Der übliche Ansatz, der von der mp library und anderen verwendet wird, ist eine Ausdrucksbaumstruktur (oder DAG) zu erstellen und eine Art von nonlinear optimization Methode verwenden, die normalerweise derivative Informationen, die mit automatischer oder numerischer Differenzierung berechnet werden können.

Ein Ausdrucksbaum kann zur Auswertung mit einem Muster generic visitor effizient durchlaufen werden. Die Verwendung von JIT könnte ein Overkill sein, es sei denn, die für die Auswertung einer Funktion benötigte Zeit nimmt einen wesentlichen Teil der Optimierungszeit in Anspruch.

Verwandte Themen