PINN: risolve problemi minori — sigma in config, scale precompilate, closure fuori loop

- config.py: aggiunge GAUSS_SIGMA = 0.02 nella sezione parametri fisici
- model.py: T_char, grad_char, pde_scale diventano costanti di modulo (_T_char,
  _grad_char, _pde_scale) calcolate una sola volta all'import
- engine.py: closure L-BFGS definita una volta sola fuori dal loop

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 14:23:33 +02:00
parent bca829bd7e
commit 9e77deffd5
3 changed files with 26 additions and 19 deletions
+12 -12
View File
@@ -117,19 +117,19 @@ def train_model(data, epochs=None, patience=None):
_last = {}
for step in range(config.LBFGS_STEPS):
def closure():
lbfgs.zero_grad()
loss, L_pde, L_ic, L_bc = heat_pinn_loss(
model, data['x_f'], data['t_f'], data['x_ic'], data['t_bc']
)
loss.backward()
_last['loss'] = loss.item()
_last['pde'] = L_pde.item()
_last['ic'] = L_ic.item()
_last['bc'] = L_bc.item()
return loss
def closure():
lbfgs.zero_grad()
loss, L_pde, L_ic, L_bc = heat_pinn_loss(
model, data['x_f'], data['t_f'], data['x_ic'], data['t_bc']
)
loss.backward()
_last['loss'] = loss.item()
_last['pde'] = L_pde.item()
_last['ic'] = L_ic.item()
_last['bc'] = L_bc.item()
return loss
for step in range(config.LBFGS_STEPS):
lbfgs.step(closure)
if _last['loss'] < best_loss:
best_loss = _last['loss']