Es wird dringend empfohlen, durch Eingabe eine neue virtuelle Umgebung einzurichten
virtualenv -p python3 feyn source feyn/bin/activate
Zuerst installieren Sie numpy mit pip install numpy
. Das Paket „aifeynman“ ist auf PyPI verfügbar und kann mit pip install aifeynman
installiert werden.
Beachten Sie, dass AI Feynman derzeit nur für Linux- und Mac-Umgebungen unterstützt wird.
Wechseln Sie in ein sauberes Verzeichnis und führen Sie die folgenden Python-Befehle aus:
import aifeynman aifeynman.get_demos("example_data") # Download examples from server aifeynman.run_aifeynman("./example_data/", "example1.txt", 60, "14ops.txt", polyfit_deg=3, NN_epochs=500)
Dieses Beispiel wird in etwa 10 bis 30 Minuten gelöst, je nachdem, welchen Computer Sie haben und ob Sie über eine GPU verfügen.
Hier enthält „example.txt“ die Datentabelle, für die eine symbolische Regression durchgeführt werden soll, wobei die Spalten durch Leerzeichen, Kommas oder Tabulatoren getrennt sind. Die anderen Parameter steuern die Suche: Hier probieren die Brute-Force-Module bis zu 60 Sekunden lang Kombinationen der 14 Grundoperationen in „14ops.txt“ aus, Polynomanpassungen werden bis zum Grad 3 ausprobiert und das interpolierende neuronale Netz wird für bis zu 60 Sekunden lang trainiert bis 500 Epochen.
Dieser Code ist eine verbesserte Implementierung von AI Feynman: a Physics-Inspired Method for Symbolic Regression, Silviu-Marian Udrescu und Max Tegmark (2019) [Science Advances] und AI Feynman 2.0: Pareto-optimale symbolische Regression unter Ausnutzung der Graphmodularität, Udrescu SM et al. (2020) [arXiv].
Bitte lesen Sie diesen Medium-Artikel für eine detailliertere Erklärung, wie Sie den Code zum Laufen bringen.
Führen Sie zunächst „compile.sh“ aus, um die für den Brute-Force-Code verwendeten Fortran-Dateien zu kompilieren.
ai_feynman_example.py enthält ein Beispiel für die Ausführung des Codes für einige Beispiele (im Verzeichnis example_data). Die Beispiele entsprechen den Gleichungen I.8.14, I.10.7 und I.50.26 in Tabelle 4 der Arbeit. Weitere Datendateien, mit denen der Code getestet werden kann, finden Sie in der Feynman Symbolic Regression Database.
Die vom Benutzer aufgerufene Hauptfunktion des Codes hat die folgenden Parameter:
pathdir – Pfad zum Verzeichnis, das die Datendatei enthält
Dateiname – der Name der Datei, die die Daten enthält
BF_try_time – Zeitlimit für jeden Brute-Force-Aufruf (standardmäßig auf 60 Sekunden eingestellt)
BF_ops_file_type – Datei mit den Symbolen, die im Brute-Force-Code verwendet werden sollen (standardmäßig auf „14ops.txt“ eingestellt)
polyfit_deg – maximaler Grad des von der Polynomanpassungsroutine versuchten Polynoms (standardmäßig auf 4 eingestellt)
NN_epochs – Anzahl der Epochen für das Training (standardmäßig auf 4000 eingestellt)
vars_name – Name der Variablen, die in der Gleichung erscheinen (einschließlich des Namens der Ausgabevariablen). Dies sollte als Liste von Zeichenfolgen übergeben werden, wobei die Namen der Variablen in derselben Reihenfolge erscheinen wie in der Datei, die die Daten enthält
test_percentage – Prozentsatz der Eingabedaten, die beiseite gehalten und als Testsatz verwendet werden sollen
Die zu analysierende Datendatei sollte eine Textdatei sein, in der jede Spalte die numerischen Werte jeder (abhängigen und unabhängigen) Variablen enthält. Die Lösungsdatei wird im Verzeichnis „results“ unter dem Namen „solution_{filename}“ gespeichert. Die Lösungsdatei enthält mehrere Zeilen (entsprechend jedem Punkt auf der Pareto-Grenze), wobei jede Zeile Folgendes zeigt:
der mittlere Logarithmus in Basis 2 des Fehlers der entdeckten Gleichung, der auf die Eingabedaten angewendet wird (dies kann als durchschnittlicher Fehler in Bits angesehen werden)
der kumulative Logarithmus in Basis 2 des Fehlers der entdeckten Gleichung, der auf die Eingabedaten angewendet wird (dies kann als kumulativer Fehler in Bits angesehen werden)
die Komplexität der entdeckten Gleichung (in Bits)
der Fehler der entdeckten Gleichung, angewendet auf die Eingabedaten
der symbolische Ausdruck der entdeckten Gleichung
Wenn test_percentage ungleich Null ist, wird am Anfang jeder Zeile eine weitere Zahl hinzugefügt, die den Fehler der entdeckten Gleichung im Testsatz anzeigt.
ai_feynman_terminal_example.py ermöglicht den Aufruf der aiFeynman-Funktion über die Befehlszeile. (z. B. Python ai_feynman_terminal_example.py --pathdir=../example_data/ --filename=example1.txt). Verwenden Sie python ai_feynman_terminal_example.py --help, um alle verfügbaren Parameter anzuzeigen, die an die Funktion übergeben werden können.
Wenn Sie Aspekte der KI-Feynman-Arbeit vergleichen, darauf aufbauen oder Aspekte davon verwenden, zitieren Sie bitte Folgendes:
@article{udrescu2020ai, title={AI Feynman: A physics-inspired method for symbolic regression}, author={Udrescu, Silviu-Marian and Tegmark, Max}, journal={Science Advances}, volume={6}, number={16}, pages={eaay2631}, year={2020}, publisher={American Association for the Advancement of Science} }
@article{udrescu2020ai, title={AI Feynman 2.0: Pareto-optimal symbolic regression exploiting graph modularity}, author={Udrescu, Silviu-Marian and Tan, Andrew and Feng, Jiahai and Neto, Orisvaldo and Wu, Tailin and Tegmark, Max}, journal={arXiv preprint arXiv:2006.10782}, year={2020} }