É altamente recomendável configurar um novo ambiente virtual digitando
virtualenv -p python3 feyn source feyn/bin/activate
Primeiro instale o numpy com pip install numpy
. O pacote 'aifeynman' está disponível no PyPI e pode ser instalado com pip install aifeynman
.
Observe que, por enquanto, AI Feynman é compatível apenas com ambientes Linux e Mac.
Vá para um diretório limpo e execute os seguintes comandos 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 exemplo será resolvido em cerca de 10 a 30 minutos, dependendo do computador que você possui e se possui uma GPU.
Aqui 'example.txt' contém a tabela de dados para realizar a regressão simbólica, com colunas separadas por espaços, vírgulas ou tabulações. Os outros parâmetros controlam a busca: aqui os módulos de força bruta tentam combinações das 14 operações básicas em '14ops.txt' por até 60 segundos, ajustes polinomiais são tentados até o grau 3, e a rede neural interpoladora é treinada para cima. até 500 épocas.
Este código é uma implementação aprimorada de AI Feynman: um método inspirado na física para regressão simbólica, Silviu-Marian Udrescu e Max Tegmark (2019) [Science Advances] e AI Feynman 2.0: regressão simbólica ideal de Pareto explorando a modularidade do gráfico, Udrescu SM et al. (2020) [arXiv].
Por favor, verifique este artigo do Medium para uma explicação mais detalhada de como executar o código.
Para começar, execute compile.sh para compilar os arquivos fortran usados para o código de força bruta.
ai_feynman_example.py contém um exemplo de execução do código em alguns exemplos (encontrados no diretório example_data). Os exemplos correspondem às equações I.8.14, I.10.7 e I.50.26 da Tabela 4 do artigo. Mais arquivos de dados nos quais o código pode ser testado podem ser encontrados no banco de dados de regressão simbólica Feynman.
A função principal do código, chamada pelo usuário, possui os seguintes parâmetros:
pathdir - caminho para o diretório que contém o arquivo de dados
filename - o nome do arquivo que contém os dados
BF_try_time - limite de tempo para cada chamada de força bruta (definido por padrão para 60 segundos)
BF_ops_file_type - arquivo contendo os símbolos a serem usados no código de força bruta (definido por padrão como "14ops.txt")
polyfit_deg - grau máximo do polinômio tentado pela rotina de ajuste polinomial (definido como padrão para 4)
NN_epochs - número de épocas para o treinamento (definido por padrão como 4000)
vars_name - nome das variáveis que aparecem na equação (incluindo o nome da variável de saída). Deve ser passado como uma lista de strings, com os nomes das variáveis aparecendo na mesma ordem em que estão no arquivo que contém os dados
test_percentage - porcentagem dos dados de entrada a serem mantidos de lado e usados como conjunto de teste
O arquivo de dados a ser analisado deverá ser um arquivo de texto com cada coluna contendo os valores numéricos de cada variável (dependente e independente). O arquivo da solução será salvo no diretório chamado "resultados" com o nome solução_{nome do arquivo}. O arquivo de solução conterá diversas linhas (correspondendo a cada ponto na fronteira de Pareto), cada linha mostrando:
o logaritmo médio na base 2 do erro da equação descoberta aplicada aos dados de entrada (isso pode ser considerado o erro médio em bits)
o logaritmo cumulativo na base 2 do erro da equação descoberta aplicada aos dados de entrada (isso pode ser considerado como o erro cumulativo em bits)
a complexidade da equação descoberta (em bits)
o erro da equação descoberta aplicada aos dados de entrada
a expressão simbólica da equação descoberta
Se test_percentage for diferente de zero, mais um número é adicionado no início de cada linha, mostrando o erro da equação descoberta no conjunto de teste.
ai_feynman_terminal_example.py permite chamar a função aiFeynman a partir da linha de comando. (por exemplo, python ai_feynman_terminal_example.py --pathdir=../example_data/ --filename=example1.txt). Use python ai_feynman_terminal_example.py --help para exibir todos os parâmetros disponíveis que podem ser passados para a função.
Se você comparar, desenvolver ou usar aspectos do trabalho de AI Feynman, cite o seguinte:
@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} }