Ich möchte Ceres Solver aus Python verwenden

ceres solver ceres solver (http://ceres-solver.org/) ist ein nichtlinearer Solver mit kleinsten Quadraten, der von Google veröffentlicht wird. Es scheint benannt zu sein, nachdem der Planet Ceres nach der Methode der kleinsten Quadrate entdeckt wurde.

Nichtlineare Methode der kleinsten Quadrate

Ich werde die detaillierte Erklärung anderen überlassen. Die Methode der minimalen Quadrate ist das Problem, $ x \ in \ Re ^ n $ zu finden, das den Ausdruck minimiert, der durch die Summe der Quadrate wie folgt ausgedrückt wird.

Minimize: \sum_i ||f_i(x)||^2_2

Wenn zum Beispiel $ x = [a, b]; a, b \ in \ Re $, $ f_i (a, b) = y_i- (at_i + b) $

Minimize: \sum_i ||y_i - (a t_i + b)||^2

Es wird. Dies ist das Problem, die gerade Linie $ y = ax + b $ zu finden, die am besten zu $ (t_i, y_i) $ passt. Dieses Beispiel ist eine lineare Minimum-Quadrat-Methode, aber ceres ist ein Löser, der dieses $ f_i (x) $ auch mit einer nichtlinearen Funktion verarbeiten kann.

Probleme, die von Ceres Solver behandelt werden können

Ceres ist ein Löser, der sich auf die Lösung der Methode der kleinsten Quadrate spezialisiert hat. Sie können jeder Variablen Ober- und Untergrenzen zuweisen, aber Sie können keine weiteren Einschränkungsbedingungen angeben (z. B. Gleichheitsbeschränkungen und Ungleichheitsbeschränkungen). Wenn Einschränkungen angegeben werden müssen, muss ein Löser verwendet werden, der sekundäre Planungsprobleme (oder Lagrange-Relaxation) lösen kann. Natürlich ist eine globale Optimierung für nicht konvexe Probleme nicht garantiert, aber es ist möglich, (lokale) Lösungen zu finden. Es ist auch möglich, einen beliebigen Anfangswert anzugeben.

Ich möchte es aus Python verwenden

Nun, ich spreche davon, es aus Python verwenden zu wollen, was das Hauptthema ist, aber gibt es einen besseren Weg? Dies ist ein Artikel. Weil ** ich keine Wrapper-Bibliothek finden konnte, die ich verwenden konnte. ** (Es scheint, dass es einige gibt, die auf Cython veröffentlicht werden, aber ich hatte keine Erfahrung mit der unbekannten Bibliothek & Cython) Das Folgende ist also eine Einführung in die Methode, die ich derzeit verwende. ** Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt. ** ** **

Verwenden Sie vorerst von Python

** Meine Lösung ist die Verwendung von Boost.numpy. ** ** ** Ich schäme mich zu sagen, dass ich in C ++ nicht viel getan habe, also habe ich nur den Namen gehört, aber Boost scheint eine Sammlung verschiedener Bibliotheken zu sein. Ich verstehe, dass Boost.python eine Wrapper-Bibliothek zum Aufrufen von C ++ - Funktionen und -Klassen aus Python ist, und Boost.numpy ist eine Wrapper-Bibliothek, mit der Sie das ndarray und die Matrix von numpy an C ++ - Funktionen übergeben können. Um ehrlich zu sein, wenn Sie die Existenz dieser Bibliothek kennen, ist der Rest einfach. Da der native (?) Code im C ++ - Teil geschrieben werden kann, sind die Lernkosten nahezu Null. Ich muss sowohl C-Code als auch Python-Code schreiben, daher ist es zweifelhaft, dass ich Ceres aus Python verwenden kann ...

Ich selbst definiere den minimalen Optimierungsteil mit C-Funktionen und implementiere den Rest mit Python. Persönlich bin ich mit der aktuellen Implementierungsmethode vorerst zufrieden. Sie ist sehr umfangreich, da sie grundsätzlich jede Funktion von C ++ (obwohl es den Anschein hat, dass Klassen usw. in die Bibliothek eingeschlossen werden können) sowie ceres aufrufen kann. Ich denke, das hat sich ausgebreitet.

Referenzseite

Für Boost.numpy habe ich Folgendes erwähnt. Es gab auch ein Beispiel für CMakeLists, das sehr hilfreich war.

Das Tutorial allein ist leicht genug, um Ceres zu verstehen.

Recommended Posts

Ich möchte Ceres Solver aus Python verwenden
Ich möchte ein Glas aus Python verwenden
Ich möchte MATLAB feval mit Python verwenden
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich möchte R-Datensatz mit Python verwenden
Ich möchte mit Python debuggen
Ich möchte viele Prozesse von Python aus starten
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich möchte eine Python-Umgebung erstellen
Ich möchte Linux auf dem Mac verwenden
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich möchte IPython Qt Console verwenden
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Verwenden Sie thingspeak aus Python
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich möchte Dunnetts Test in Python machen
Verwenden Sie fließend Python
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Studie aus Python Hour7: Verwendung von Klassen
Ich möchte mit Python ein Fenster erstellen
Verwenden Sie MySQL aus Python
Ich möchte ein Spiel mit Python machen
[Python-Memo] Ich möchte eine zweistellige Hexadezimalzahl aus einer Dezimalzahl erhalten
[Bash] Holen Sie sich die Kraft von Python aus Bash mithilfe der folgenden Dokumentation
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich möchte Passungen aus meinem Kopf machen
Verwenden Sie MySQL aus Python
Ich möchte -inf nicht mit np.log verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte ip vrf mit SONiC verwenden
Ich möchte APG4b mit Python lösen (Kapitel 2)
Verwenden Sie BigQuery aus Python.
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
Ich möchte die Produkte verkaufen, die ich durch Python Scraping Mercari aufgelistet habe
Ich möchte mit Python in eine Datei schreiben
Ich möchte die Aktivierungsfunktion Mish verwenden
Ich möchte den Fortschritt in Python anzeigen!
Verwenden Sie Tor, um eine Verbindung von urllib2 [Python] [Mac] herzustellen.
Python: Entpacken Sie die Standardeingabe mit zipfile
Verwenden Sie mecab-ipadic-neologd von Python
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Verwenden Sie PIL in Python, um nur die gewünschten Daten aus Exif zu extrahieren
Ich möchte Variablen / Funktionen / Klassen externer Dateien von Python abrufen / ausführen
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich möchte den Dateinamen von DataLoader sehen
Selbst Anfänger möchten sagen "Ich verstehe Python voll und ganz"
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte Bilder von Katzen von Instagram erkennen
Ich möchte einen Python-Generator viele Male iterieren