Se recomienda encarecidamente configurar un entorno virtual nuevo escribiendo
virtualenv -p python3 feyn source feyn/bin/activate
Primero instale numpy con pip install numpy
. El paquete 'aifeynman' está disponible en PyPI y se puede instalar con pip install aifeynman
.
Tenga en cuenta que, por ahora, AI Feynman solo es compatible con entornos Linux y Mac.
Vaya a un directorio limpio y ejecute los siguientes comandos de Python:
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)
Este ejemplo se resolverá en unos 10 a 30 minutos, dependiendo de la computadora que tengas y de si tienes una GPU.
Aquí 'example.txt' contiene la tabla de datos para realizar la regresión simbólica, con columnas separadas por espacios, comas o tabulaciones. Los otros parámetros controlan la búsqueda: aquí los módulos de fuerza bruta prueban combinaciones de las 14 operaciones básicas en '14ops.txt' durante hasta 60 segundos, se prueban ajustes polinomiales hasta el grado 3 y la red neuronal de interpolación se entrena durante hasta 60 segundos. a 500 épocas.
Este código es una implementación mejorada de AI Feynman: un método inspirado en la física para la regresión simbólica, Silviu-Marian Udrescu y Max Tegmark (2019) [Science Advances] y AI Feynman 2.0: regresión simbólica óptima de Pareto que explota la modularidad del gráfico, Udrescu SM et Alabama. (2020) [arXiv].
Consulte este artículo de Medium para obtener una explicación más detallada sobre cómo ejecutar el código.
Para comenzar, ejecute compilar.sh para compilar los archivos fortran utilizados para el código de fuerza bruta.
ai_feynman_example.py contiene un ejemplo de cómo ejecutar el código en algunos ejemplos (que se encuentran en el directorio example_data). Los ejemplos corresponden a las ecuaciones I.8.14, I.10.7 y I.50.26 en la Tabla 4 del artículo. Se pueden encontrar más archivos de datos en los que se puede probar el código en la base de datos de regresión simbólica de Feynman.
La función principal del código, llamada por el usuario, tiene los siguientes parámetros:
pathdir: ruta al directorio que contiene el archivo de datos
nombre de archivo: el nombre del archivo que contiene los datos
BF_try_time: límite de tiempo para cada llamada de fuerza bruta (establecido de forma predeterminada en 60 segundos)
BF_ops_file_type: archivo que contiene los símbolos que se utilizarán en el código de fuerza bruta (configurado de forma predeterminada en "14ops.txt")
polyfit_deg: grado máximo del polinomio probado por la rutina de ajuste de polinomios (establecido por defecto en 4)
NN_epochs: número de épocas para el entrenamiento (establecido de forma predeterminada en 4000)
vars_name: nombre de las variables que aparecen en la ecuación (incluido el nombre de la variable de salida). Esto debe pasarse como una lista de cadenas, con el nombre de las variables apareciendo en el mismo orden en que están en el archivo que contiene los datos.
test_percentage: porcentaje de los datos de entrada que se mantendrán a un lado y se utilizarán como conjunto de prueba
El archivo de datos a analizar debe ser un archivo de texto en el que cada columna contenga los valores numéricos de cada variable (dependiente e independiente). El archivo de la solución se guardará en el directorio llamado "resultados" con el nombre solución_nombre_archivo}. El archivo de solución contendrá varias filas (correspondientes a cada punto de la frontera de Pareto), cada fila mostrará:
el logaritmo medio en la base 2 del error de la ecuación descubierta aplicada a los datos de entrada (esto puede considerarse como el error promedio en bits)
el logaritmo acumulativo en base 2 del error de la ecuación descubierta aplicada a los datos de entrada (esto puede considerarse como el error acumulativo en bits)
la complejidad de la ecuación descubierta (en bits)
el error de la ecuación descubierta aplicada a los datos de entrada
la expresión simbólica de la ecuación descubierta
Si test_percentage es diferente de cero, se agrega un número más al principio de cada fila, lo que muestra el error de la ecuación descubierta en el conjunto de prueba.
ai_feynman_terminal_example.py permite llamar a la función aiFeynman desde la línea de comando. (por ejemplo, python ai_feynman_terminal_example.py --pathdir=../example_data/ --filename=example1.txt). Utilice python ai_feynman_terminal_example.py --help para mostrar todos los parámetros disponibles que se pueden pasar a la función.
Si compara, desarrolla o utiliza aspectos del trabajo de AI Feynman, cite lo siguiente:
@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} }