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:
@@ -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²
|
||||
|
||||
Reference in New Issue
Block a user