Exemplo de reparametrização#

Arquivo de configuração do módulo de estimação

[1]:
from modules.estimation.config.estimation_config import EstimationConfigModel
import pathlib

cfg_path = pathlib.Path("./fixtures/estimation_config.yaml")
cfg = EstimationConfigModel.from_file(cfg_path)

cfg
[1]:
EstimationConfigModel(parameters=EstimationParameters(k0=EstimationParameterConfig(bounds=(20.0, 100.0), fixed_value=None), delta=EstimationParameterConfig(bounds=(0.2, 0.8), fixed_value=None), beta=EstimationParameterConfig(bounds=(0.01, 0.5), fixed_value=None), p_ref=EstimationParameterConfig(bounds=(10.0, 90.0), fixed_value=None), ref_conc=EstimationParameterConfig(bounds=(0.12, 0.145), fixed_value=None)), PSO=PSOConfig(n_particles=500, n_iterations=50, inertia_weight=0.6, topology='random', optimizer='global', cognitive_parameter=2.0, social_parameter=2.0), reference_profiles=[ReferenceProfileConfig(name='Probe 0 (z = 0.5cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=0,5cm.csv'), height=0.005), ReferenceProfileConfig(name='Probe 1 (z = 2.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=2,0cm.csv'), height=0.02), ReferenceProfileConfig(name='Probe 2 (z = 3.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=3,0cm.csv'), height=0.03), ReferenceProfileConfig(name='Probe 3 (z = 4.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=4,0cm.csv'), height=0.04), ReferenceProfileConfig(name='Probe 4 (z = 6.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=6,0cm.csv'), height=0.06), ReferenceProfileConfig(name='Probe 5 (z = 8.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=8,0cm.csv'), height=0.08), ReferenceProfileConfig(name='Probe 6 (z = 12.0cm)', path=WindowsPath('fixtures/validation/RochaData/exp/z=12,0cm.csv'), height=0.12)], simulation=SimulationRecipe(sim_name='estimation_simulation', domain=DomainModel(height=0.21, spatial_divisions=220, annular_domain=None), suspension=SuspensionModel(initial_conc=0.1391, max_conc=0.2), solid_phase=SolidPhaseModel(particle_diam=4.08e-05, particle_esphericity=0.8, density=2709.0), fluid_phase=FluidPhaseModel(density=891.4, power_law=PowerLawFluidModel(M=30.13, n=0.21)), simulation_parameters=SimulationParameters(timestep=1000.0, total_time=31536000.0), export=FrequencyConfig(frequency=100), report=FrequencyConfig(frequency=1000), HPHT=None))

Caminho output dos resultados das simulações

[2]:
from modules.estimation.simulation_manager import SimulationManager

output_path = pathlib.Path("./out/estimation_exp_large_range")
sim_manager = SimulationManager(cfg=cfg, output_path=output_path)

Caminho para os resultados de calibração (experimental)

[3]:
from modules.estimation.results import TargetResults

target_results = TargetResults.from_cfg(cfg.reference_profiles)

Rodar otimizador

[ ]:
from modules.estimation.optimizer import Optimizer
from modules.estimation.objective_function import compute_objective_function

optimizer = Optimizer(pso_cfg=cfg.PSO, estimation_params=cfg.parameters)
cost, pos = optimizer.compute_cost_and_pos(objective_function=compute_objective_function, sim_manager=sim_manager, target_results=target_results)

df = optimizer.export_estimation_data(output_folder=sim_manager.output_path, target_results=target_results)
df.to_csv(sim_manager.output_path / "estimation_results.csv", index=False)