Implementação e estudo de métodos de otimização para problemas com restrições, com foco no acoplamento do Lagrangiano Aumentado (LA) a solvers internos sem derivadas — CMA-ES e TuRBO — aplicados a problemas de engenharia governados por simulações de elementos finitos (FEM).
O repositório reúne três eixos complementares:
- Notebooks de estudo de cada algoritmo de otimização (CMA-ES, TuRBO, FuRBO, PSO, COBYLA, Trust-Region, Lagrangiano Aumentado), usados para entender e validar cada método isoladamente.
- Benchmarking padronizado (
COCO/), em que as variantes com Lagrangiano Aumentado (AL-TuRBO, AL-CMA-ES) são comparadas a baselines puros (TuRBO, CMA-ES) sobre o conjunto bbob-constrained da plataforma COCO, avaliadas por perfis de desempenho. - Pipeline aplicado (
SIMULATION_SCRIPTS/), em que o Lagrangiano Aumentado conduz o laço externo e um solver interno (CMA-ES ou TuRBO) resolve cada subproblema sobre quatro problemas-teste resolvidos por FEM (FEniCSx).
O laço externo segue a formulação PHR (Powell–Hestenes–Rockafellar) com salvaguardas no estilo Birgin–Martínez. Dado o problema
o subproblema interno minimiza o Lagrangiano Aumentado
A cada iteração externa
-
Subproblema — minimiza
$L_\rho$ a partir de$x_{k-1}$ usando o solver interno (CMA-ES ou TuRBO). -
Multiplicadores — atualiza
$\lambda \leftarrow \lambda + \rho, h(x_k)$ e$\mu \leftarrow \max(0,; \mu + \rho, g(x_k))$ . -
Penalidade — aumenta
$\rho \leftarrow \gamma \rho$ apenas quando a medida de inviabilidade não decresce o suficiente (fator$\tau$ ); caso contrário mantém$\rho$ . -
Salvaguarda — trunca os multiplicadores em
$[\lambda_{\min}, \lambda_{\max}]$ e$[0, \mu_{\max}]$ . -
Convergência — para quando a inviabilidade
$\max\big(|h(x_k)|,; |V_k|\big) \le \varepsilon$ , com$V_k = \min(-g(x_k),; \mu/\rho)$ .
Os solvers internos operam sempre no domínio normalizado
optimization_algorithms/
│
├── algorithms/ # Notebooks de estudo por método
│ ├── cma_introduction.ipynb # Introdução ao CMA-ES
│ ├── cma_functions.ipynb # CMA-ES em funções de teste
│ ├── turbo_tuto.ipynb # TuRBO (Trust Region Bayesian Optimization)
│ ├── furbo_tuto.ipynb # FuRBO (variante com região de confiança por amostragem)
│ ├── pso_functions.ipynb # PSO (Particle Swarm Optimization)
│ ├── cobyla.ipynb # COBYLA (otimização restrita por interpolação linear)
│ ├── trust_region.ipynb # Método de Trust-Region
│ └── plot_painel_functions.py # Auxiliar de visualização de funções-teste
│
├── augmented_lagrangian/
│ └── augmented_lagrangian.ipynb # Estudo do Lagrangiano Aumentado (numpy/scipy)
│
├── COCO/ # Benchmarking no testbed bbob-constrained
│ └── augmented_lagrangian_coco.ipynb # Comparação AL-TuRBO / AL-CMA-ES / TuRBO / CMA-ES
│
├── SIMULATION_SCRIPTS/ # Pipeline aplicado: LA + solver interno + FEM
│ ├── lagrangian_aug_for_simulations.py # Núcleo do Lagrangiano Aumentado (PHR)
│ │
│ ├── viga.py # Problema 1: viga de Timoshenko (FEM)
│ ├── quadrupolo.py # Problema 2: quadrupolo magnético (FEM)
│ ├── difusion.py # Problema 3: difusão transiente (FEM)
│ ├── sanity.py # Problema 4: barra tracionada (ótimo analítico)
│ │
│ ├── run_optimization_viga_cma.py
│ ├── run_optimization_viga_turbo.py
│ ├── run_optimization_quadrupolo_cma.py
│ ├── run_optimization_quadrupolo_turbo.py
│ ├── run_sanity_cma.py
│ ├── run_sanity_turbo.py
│ │
│ ├── utils.py # Salvamento do histórico do LA em CSV
│ └── plot_historico.py # Plot do histórico (f, restrições, parâmetros físicos)
│
├── cma_functions.ipynb # (cópia do notebook na raiz)
├── LICENSE # MIT
└── README.md
Cada problema expõe a mesma interface (f, g, h, x0, x_to_params, verify_fem, exportar_resultados), o que permite trocar o solver interno sem alterar a definição do problema. Todos têm 2–3 variáveis de projeto normalizadas em
| Problema | Arquivo | Variáveis | Objetivo | Restrições |
|---|---|---|---|---|
| Viga de Timoshenko | viga.py |
|
minimizar massa |
|
| Quadrupolo magnético | quadrupolo.py |
|
maximizar gradiente de campo |
2 desigualdades geométricas/físicas |
| Difusão transiente | difusion.py |
|
maximizar massa retida em região-alvo | 2 desigualdades + 1 igualdade (conservação) |
| Barra tracionada (sanity) | sanity.py |
|
atingir deslocamento-alvo | restrição de rigidez; ótimo analítico |
O problema barra tracionada funciona como teste de sanidade: tem ótimo analítico conhecido, servindo para validar o acoplamento LA + solver antes de aplicá-lo aos problemas mais caros.
CMA-ES (via pycma) — estratégia evolutiva com adaptação da matriz de covariância.
TuRBO (via BoTorch/GPyTorch) — otimização Bayesiana com região de confiança. GP SingleTaskGP com kernel Matérn-5/2 ARD, candidatos por Thompson Sampling (MaxPosteriorSampling), inicialização Sobol, região de confiança adaptada por contadores de sucesso/falha.
Além da aplicação aos problemas FEM, o repositório inclui um estudo de benchmarking padronizado na plataforma COCO (Comparing Continuous Optimizers), usando o conjunto bbob-constrained. O objetivo é avaliar, de forma reprodutível e em larga escala, as vantagens de cada backbone para o Lagrangiano Aumentado.
Duas configurações são comparadas sob paridade de orçamento:
- AL-TuRBO e AL-CMA-ES — Lagrangiano Aumentado no laço externo, com o respectivo solver resolvendo cada subproblema (estado do solver reaproveitado entre iterações externas: comprimento da região de confiança no TuRBO, objeto da estratégia evolutiva no CMA-ES).
A avaliação usa perfis de desempenho (Dolan & Moré). O bbob-constrained contém restrições de desigualdade.
| Componente | Pacotes |
|---|---|
| Núcleo numérico | numpy, scipy, matplotlib |
| Otimização Bayesiana / TuRBO | torch, botorch, gpytorch |
| Estratégia evolutiva | cma, cmaes |
| PSO (notebook) | pyswarms |
| Benchmarking COCO | cocoex, cocopp |
| FEM (FEniCSx) | dolfinx, ufl, basix, mpi4py, petsc4py |
Os scripts de pipeline devem ser executados a partir de SIMULATION_SCRIPTS/ (os imports são relativos a essa pasta):
cd SIMULATION_SCRIPTS
# Viga de Timoshenko
python run_optimization_viga_cma.py
python run_optimization_viga_turbo.py
# Quadrupolo magnético
python run_optimization_quadrupolo_cma.py
python run_optimization_quadrupolo_turbo.py
# Teste de sanidade (ótimo analítico conhecido)
python run_sanity_cma.py
python run_sanity_turbo.pyCada execução: (0) verifica o FEM contra a solução analítica de referência, (1) reporta o ponto inicial, (2) roda o Lagrangiano Aumentado com o solver interno escolhido, (3) imprime a solução ótima e (4) exporta resultados.
python plot_historico.py <caminho_do_csv> <problema>
# exemplos
python plot_historico.py results/viga_cma_historico_LA.csv viga
python plot_historico.py results/quadrupolo_turbo_historico_LA.csv quadrupoloOs runners criam a pasta results/ com:
*_historico_LA.csv— histórico das iterações externas do LA (iteraçãok, objetivof, inviabilidadeviab, penalidaderho, variáveisx, restriçõesg/h), gerado porutils.salvar_historico_csv.- Arquivos
.bp(ADIOS2/VTX) e PNGs dos campos FEM (estado inicial e ótimo), gerados porexportar_resultadosde cada problema. - PNG do histórico com três painéis (objetivo, restrições e parâmetros físicos por iteração), via
plot_historico.py.
Material exploratório usado para entender cada método isoladamente antes da integração: introdução e aplicação do CMA-ES, tutoriais de TuRBO e FuRBO, PSO sobre funções de teste, COBYLA e Trust-Region. O notebook augmented_lagrangian/augmented_lagrangian.ipynb apresenta o método do Lagrangiano Aumentado de forma autocontida (numpy/scipy), servindo de base para a implementação.
- J. M. Martínez. Otimização prática usando o Lagrangiano Aumentado. Notas, IMECC/UNICAMP, 2006. — formulação PHR e laço externo com salvaguardas.
- N. Hansen. The CMA Evolution Strategy: A Comparing Review. 2006. — CMA-ES.
- D. Eriksson, M. Pearce, J. Gardner, R. Turner, M. Poloczek. Scalable Global Optimization via Local Bayesian Optimization (TuRBO). NeurIPS, 2019.
- M. Balandat et al. BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization. NeurIPS, 2020.
- E. D. Dolan, J. J. Moré. Benchmarking Optimization Software with Performance Profiles. Mathematical Programming, 2002.
- N. Hansen, A. Auger, R. Ros, O. Mersmann, T. Tušar, D. Brockhoff. COCO: A Platform for Comparing Continuous Optimizers in a Black-Box Setting. Optimization Methods and Software, 2021.
- P. Dufossé, N. Hansen, D. Brockhoff, P. R. Sampaio, A. Atamna, A. Auger. The bbob-constrained COCO Test Suite. 2022.
- G. R. Cowper. The Shear Coefficient in Timoshenko's Beam Theory. J. Appl. Mech., 1966. — referência da viga.
Distribuído sob a licença MIT. Ver LICENSE.
-
Edélio Gabriel Magalhães de Jesus (Ilum)
-
Matheus Pereira Velloso da Silveira (Ilum)