PINN: allinea output a results/pinn/ e centralizza parametri in config

- visualizer.py: sostituisce animations/ con results/pinn/TIMESTAMP/,
  nomi fissi (heatmap.html, animation.html, comparison.html) come FDM
- config.py: aggiunge sezioni architettura, sampling, Adam, L-BFGS, loss weights
- model.py: costruisce HeatPINN dinamicamente da HIDDEN_SIZE/N_HIDDEN_LAYERS;
  heat_pinn_loss legge pesi W_PDE/W_IC/W_BC da config
- engine.py: tutti i parametri di training letti da config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 14:14:11 +02:00
parent 4f050e80df
commit fbb0458f69
4 changed files with 62 additions and 32 deletions
+11 -8
View File
@@ -6,13 +6,12 @@ import config
class HeatPINN(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(2, 128), nn.Tanh(),
nn.Linear(128, 128), nn.Tanh(),
nn.Linear(128, 128), nn.Tanh(),
nn.Linear(128, 128), nn.Tanh(),
nn.Linear(128, 1),
)
h = config.HIDDEN_SIZE
layers = [nn.Linear(2, h), nn.Tanh()]
for _ in range(config.N_HIDDEN_LAYERS - 1):
layers += [nn.Linear(h, h), nn.Tanh()]
layers.append(nn.Linear(h, 1))
self.net = nn.Sequential(*layers)
def forward(self, x):
# Output scaled to physical range: T_AMB + (Q*L/K) * net
@@ -21,7 +20,11 @@ class HeatPINN(nn.Module):
return T_scale
def heat_pinn_loss(model, x_f, t_f, x_ic, t_bc, w_pde=1.0, w_ic=1.0, w_bc=10.0):
def heat_pinn_loss(model, x_f, t_f, x_ic, t_bc,
w_pde=None, w_ic=None, w_bc=None):
if w_pde is None: w_pde = config.W_PDE
if w_ic is None: w_ic = config.W_IC
if w_bc is None: w_bc = config.W_BC
# Characteristic scales for normalization
T_char = config.Q_VAL * config.L / config.K # ~50 °C — temperature scale
grad_char = (config.Q_VAL / config.K) ** 2 # ~2500 — gradient scale²