Módulo de software especializado em análise preditiva para planejamento e gestão de reservatórios de petróleo.
Utiliza técnicas de aprendizado de máquina para prever a curva de declínio de produção de óleo.
[...]
As funções essenciais do programa são:
Treinamento de Modelos: Processar um vasto conjunto de dados históricos de simulação de reservatórios (séries temporais de produção de óleo, gás, água, saturação, etc.) para treinar múltiplos modelos de aprendizado de máquina, incluindo Redes Neurais Multicamadas (MLPs), Redes Neurais Recorrentes (LSTMs) e Redes Neurais Convolucionais (CNNs).
Análise Preditiva: Utilizar os modelos treinados para gerar projeções futuras da curva de produção de óleo para reservatórios, grupos de poços ou poços individuais, baseando-se em seus dados históricos de produção.
Cálculo de Incerteza: Estimar o grau de confiança e os intervalos de incerteza associados às previsões geradas, oferecendo uma métrica quantitativa sobre a confiabilidade da projeção.
Integração e Visualização: Fornecer os resultados (curva projetada e grau de confiança) de forma estruturada para que o sistema cliente possa exibi-los graficamente aos usuários finais.
[...]
Desenvolvido utilizando o framework FastAPI em Python 3.12
A API segue os padrões RESTful e OpenAPI, garantindo a documentação automática e a fácil integração com outras aplicações. As buscas são realizadas utilizando modelos de IA específicos, e a arquitetura modular permite a fácil extensão e manutenção do sistema.
-
Instalação do miniconda
mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh ~/miniconda3/bin/conda init bash ~/miniconda3/bin/conda init zsh
-
Criar environment python 3.12:
conda create -n python3.12 python=3.12
-
Ativar o environment:
conda activate python3.12
-
Instalar o pipenv no conda environment:
$ python -m pip install pipenv
-
Instale as dependências do projeto usando Pipenv:
$ python -m pipenv install --dev
As tarefas comuns do projeto são automatizadas através de scripts definidos no Pipfile. Toda a execução deve ser feita através do pipenv.
-
Listar scripts disponíveis: Para ver todos os scripts definidos, execute:
$ pipenv scripts
-
Executar um script: Para executar um script específico, use o comando
pipenv run:$ pipenv run <nome_do_script>
Por exemplo, para iniciar o treinamento:
$ pipenv run train
Estes são os dois passos principais para processar os dados e treinar os modelos.
-
model-1-generate-dataframes- O que faz: Este é o primeiro passo (ETL). Ele lê os arquivos de simulação brutos (ex:
.sr3), processa os dados, calcula propriedades derivadas e salva o resultado em um formato otimizado (Parquet) no diretório especificado emDATAFRAMES_DIRECTORY. - Comando:
$ pipenv run model-1-generate-dataframes
- O que faz: Este é o primeiro passo (ETL). Ele lê os arquivos de simulação brutos (ex:
-
model-2-train- O que faz: Este é o segundo e principal passo do pipeline. Ele carrega os dataframes gerados na etapa anterior, pré-processa os dados (normalização, criação de sequências), treina todos os modelos de Machine Learning configurados (MLP, LSTM, etc.) e, ao final, gera e salva os dashboards com os resultados e métricas de avaliação.
- Comando:
$ pipenv run model-2-train
api-server: Inicia o servidor da API web usando FastAPI/Uvicorn.model-debug-export-dataframes: Script utilitário que converte os dataframes Parquet para o formato CSV, facilitando a inspeção e depuração dos dados.model-debug-trainment: Executa o pré-processamento passo a passo para uma única simulação, exibindo informações detalhadas para ajudar a depurar problemas deKeyErrorou falta de dados para o treinamento.tests: Executa a suíte de testes automatizados do projeto compytest.tests-coverage: Executa os testes e gera um relatório de cobertura de código no terminal.
A seleção do ambiente (ex: TESTING, PRODUCTION) é controlada pela variável de ambiente ENV, que determina qual arquivo .env será carregado.
O projeto utiliza arquivos .env para gerenciar as configurações de cada ambiente. A seleção do ambiente é controlada pela variável de ambiente ENV.
- Produção (padrão): Se a variável
ENVnão for definida, o sistema carregará as configurações do arquivo/config/Environment.py. - Desenvolvimento: Para usar as configurações de desenvolvimento, defina a variável
ENVcomoDEVELOPMENT. O sistema carregará o arquivo.env.developmente aplicará sobre as configurações padrão. - Teste: Para usar as configurações de teste, defina a variável
ENVcomoTEST. O sistema carregará o arquivo.env.teste aplicará sobre as configurações padrão.
Você pode combinar a definição da variável de ambiente com a execução do script.
Exemplos:
- Iniciar a API em ambiente de desenvolvimento (Linux/macOS):
$ ENV=DEVELOPMENT pipenv run api-server- Iniciar o treinamento em ambiente de teste (Windows PowerShell):
$ $env:ENV="TESTING"; pipenv run model-2-train- Para acessar a API, abra
localhost:8000/docsno seu navegador.
- Execute o seguinte comando para iniciar os testes:
$ pipenv run tests
- Para incluir também o Relatório de Cobertura:
$ pipenv run tests-coverage
- Para visualizar o Relatório de Cobertura:
Instale o pacote coverage, se ainda não tiver instalado
Peça para gerar o relatório em html, por exemplo:
$ pip install coverage
Abra o arquivo gerado (htmlcov/index.html)$ coverage html
Este projeto utiliza o Alembic para gerenciar as migrações do banco de dados. As migrações são uma maneira de manter o esquema do banco de dados atualizado conforme as mudanças no modelo de dados.
Para gerar novas migrações, utilize o comando do Alembic via CLI:
$ pipenv run alembic revision --autogenerate -m "migration_description_2024.12.31"Isso gerará um novo arquivo de migração baseado nas mudanças detectadas nos modelos.
Para aplicar as migrações no banco de dados, o Alembic também pode ser utilizado via CLI:
$ pipenv run alembic upgrade headEste comando irá aplicar todas as migrações pendentes até a mais recente.
Além do uso via linha de comando, as migrações são automaticamente aplicadas durante o ciclo de vida da aplicação FastAPI. O seguinte código foi adicionado à função lifespan da aplicação para garantir que, ao iniciar, a aplicação sempre aplique as migrações mais recentes:
@asynccontextmanager
async def lifespan(app: FastAPI):
# Create an Alembic configuration object
alembic_cfg = Config("alembic.ini")
# Run the Alembic upgrade command to apply migrations
command.upgrade(alembic_cfg, "head")
yield
# Core Application Instance
app = FastAPI(
title=env.APP_NAME,
version=env.API_VERSION,
openapi_tags=Tags,
lifespan=lifespan
)Esse código garante que, ao iniciar a aplicação, todas as migrações pendentes sejam aplicadas automaticamente ao banco de dados, sem a necessidade de executar o comando pipenv run alembic upgrade head manualmente.