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?
Verwenden Sie einen einbettbaren JIT-Compiler, wie luajit? –
Wie sie es tun, habe ich keine Ahnung, aber es ist in der C++ - Version des Acado-Toolkits getan. http://acado.github.io/ – DrDonut