Módulo de Estimação#
Essa seção aborda os parâmetros e como utilizar o módulo de estimação.
O módulo de estimação serve para calcular os parâmetros numéricos, \(\beta\) e \(p_{ref}\) da equação para a pressão nos sólidos, e \(\Lambda\) e \(k_0\) da equação para a permeabilidade, constituintes da teoria constitutiva.
O cálculo dos parâmetros depende de um resultado conhecido da evolução temporal do perfil de sedimentação \(\varphi(z,t)\), normalmente obtidos a partir de experimentos.
PSO#
Para estimar os parâmetros foi utilizado o algoritmo de Particle Swarm Optimization (PSO).
O método consiste em criar um arranjo inicial de partículas, e calcular um erro individual denominado de função objetivo.
E iterar progressivamente em busca da minimização da função objetivo.
Parâmetros do PSO#
Número de partículas: O número de partículas no enxame. Mais partículas podem ajudar a explorar o espaço de busca de forma mais abrangente, mas também podem aumentar o tempo de computação.
Número de dimensões: O número de dimensões no espaço de busca, que corresponde ao número de parâmetros no seu problema de otimização.
Peso de inércia: Um parâmetro que equilibra o trade-off entre exploração e exploração. Um peso de inércia mais alto permite que as partículas se movam mais rapidamente pelo espaço de busca, promovendo a exploração, enquanto um peso de inércia mais baixo incentiva a exploração ao focar nas melhores soluções atuais.
Parâmetro cognitivo: Um parâmetro que controla a influência da melhor posição pessoal de uma partícula em seu movimento. Ele governa a tendência da partícula de se mover em direção à sua melhor posição pessoal.
Parâmetro social: Um parâmetro que controla a influência da melhor posição global no movimento de cada partícula. Ele governa a tendência da partícula de se mover em direção à melhor posição global encontrada pelo enxame.
Topologia: Especifica a estrutura do enxame, determinando quais partículas influenciam o movimento de outras partículas. As topologias comuns incluem estrela, anel e aleatória.
Limites: Define os limites para cada parâmetro no espaço de busca, restringindo o movimento das partículas a regiões viáveis.
Número máximo de iterações: O número máximo de iterações ou gerações que o algoritmo executará antes de parar.
Arquivo de configuração#
O único input para executar a rotina de estimação, é a descrição dos parâmetros de simulação e estimação, no mesmo arquivo. Isso é feito através do arquivo de configuração, como por exemplo:
parameters:
k0:
bounds: [20, 35]
delta:
bounds: [0.5, 0.65]
beta:
bounds: [0.04, 0.24]
p_ref:
bounds: [10, 90]
ref_conc:
fixed_value: 0.14
PSO:
n_particles: 300 # Increases computation time
n_iterations: 20 # Increases computation time
inertia_weight: 0.6 # Common values are in the range of [0.4, 0.9].
topology: random # star, ring
optimizer: global # global, local
cognitive_parameter: 2
social_parameter: 2
reference_profiles:
# Define the probes to use in the objective function calculation
- name: Probe 0 (z = 0.5cm)
path: ./fixtures/validation/RochaData/exp/z=0,5cm.csv
height: 0.005 # meters
- name: Probe 1 (z = 2.0cm)
path: ./fixtures/validation/RochaData/exp/z=2,0cm.csv
height: 0.02 # meters
simulation:
sim_name: estimation_simulation
domain:
height: 0.21
spatial_divisions: 220
suspension:
initial_conc: 0.1391
max_conc: 0.2
solid_phase:
particle_diam: 0.0000408
particle_esphericity: 0.8
density: 2709
fluid_phase:
density: 891.4
power_law:
M: 30.13
n: 0.21
simulation_parameters:
timestep: 1000
total_time: 31536000
export:
frequency: 100
report:
frequency: 1000
Uso#
Todos os exemplos deste manual serão baseados no uso a partir de Jupyter notebooks. Consultar o notebook referente ao exemplo para estimação de parâmetros.
Para automações de casos de teste, é conveniente poder rodar o software a partir da linha comando. O comando para rodar o módulo de estimação a partir do terminal é:
poetry run python -m modules.estimation --c <CONFIG_PATH> --d <DATA_PATH> --o <OUTPUT_PATH>
O argumento –c indica o caminho para o arquivo de configuração da estimação, –d indica o caminho até os resultados de calibração, e –o indica o caminho de saída.
Estrutura dos resultados de calibração#
Para que seja corretamente carregado, os dados para os perfis de referência devem seguir algumas regras de formatação.
Utilizar o formato .csv, com duas colunas: “t” para os intervalos de tempo, em segundos, e “concentration” para a coluna da concentração.
API suporta diferentes tipos de separador, entretanto por padrão utiliza-se “,” como separador entre colunas.
Separar cada perfil em um arquivo
Depois de formatados, os arquivos são carregados a partir da especificação do arquivo de configuração.
Dados de saída#
Os dados de saída da estimação se encontram no caminho fornecido ao programa na variável <OUTPUT_PATH>.
Nessa pasta, são salvos os parâmetros utilizados por cada partícula em cada iteração do ciclo do PSO. O formato de saída é uma tabela .csv, que contém a relação entre identificador da partícula, parâmetros utilizados e valor da função objetivo.
O resultado esperado segue o formato:
sim_lbl |
sim_id |
f_obj |
k0 |
delta |
beta |
p_ref |
|---|---|---|---|---|---|---|
sim_0 |
0 |
0.037079 |
20.750728 |
0.502287 |
0.126178 |
11.816403 |
sim_1 |
1 |
0.032316 |
24.709681 |
0.598801 |
0.155802 |
69.425181 |
sim_2 |
2 |
0.091844 |
32.317797 |
0.649955 |
0.091361 |
44.646439 |
sim_3 |
3 |
0.025147 |
26.961249 |
0.512466 |
0.144410 |
85.989529 |
sim_4 |
4 |
0.105951 |
23.780054 |
0.621423 |
0.121908 |
59.328319 |