Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions epde/integrate/deepxde_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ def solve(self, eq_list: List[Equation], var_names: List[str],
adapter: 'DeepXDEAdapter') -> Tuple[List[np.ndarray], float]:
pass


class Solver1D(SolverStrategy):
def solve(self, eq_list, var_names, grids, data_list, adapter):
t = grids[0]
Expand Down Expand Up @@ -68,9 +67,11 @@ def func(x):
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
try:
losshistory, train_state = model.train(epochs=adapter.epochs) # <-- ИСПРАВЛЕНО
final_loss = float(losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
losshistory, train_state = model.train(epochs=adapter.epochs)
final_loss = float(
losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
print(f"Exception: {e}")
y_pred = [np.full(data.shape, np.nan) for data in data_list]
return y_pred, np.nan

Expand Down Expand Up @@ -144,9 +145,10 @@ def func(x):
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
try:
losshistory, train_state = model.train(epochs=adapter.epochs) # <- исправлено
losshistory, train_state = model.train(epochs=adapter.epochs) # <-- ИСПРАВЛЕНО
final_loss = float(losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
print(f"Exception: {e}")
y_pred = [np.full(data.shape, np.nan) for data in data_list]
return y_pred, np.nan

Expand Down Expand Up @@ -236,9 +238,10 @@ def func(x):
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
try:
losshistory, train_state = model.train(epochs=adapter.epochs) # <- исправлено
losshistory, train_state = model.train(epochs=adapter.epochs) # <-- ИСПРАВЛЕНО
final_loss = float(losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
print(f"Exception: {e}")
y_pred = [np.full(data.shape, np.nan) for data in data_list]
return y_pred, np.nan

Expand Down Expand Up @@ -302,7 +305,10 @@ def pde(x, y):
for term_idx, term in enumerate(all_terms):
if term_idx == tgt:
continue
coeff = float(eq.weights_final[term_idx]) if use_weights else 1.0
if use_weights and len(eq.weights_final) > term_idx:
coeff = float(eq.weights_final[term_idx])
else:
coeff = 1.0
term_val = 1.0
for factor in term.structure:
fv = self._factor_value_with_map(dde, factor, x, y, self.coord_map, var_idx_map)
Expand All @@ -311,11 +317,12 @@ def pde(x, y):
if use_weights and len(eq.weights_final) > len(all_terms):
residual += float(eq.weights_final[-1]) * (y[:, 0:1] * 0.0 + 1.0)
target = eq.target
target_val = 1.0
for factor in target.structure:
fv = self._factor_value_with_map(dde, factor, x, y, self.coord_map, var_idx_map)
target_val *= fv
residual -= target_val
if target is not None:
target_val = 1.0
for factor in target.structure:
fv = self._factor_value_with_map(dde, factor, x, y, self.coord_map, var_idx_map)
target_val *= fv
residual -= target_val
residuals.append(residual)
return residuals

Expand Down
4 changes: 2 additions & 2 deletions epde/operators/common/fitness.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def set_adapter(self, net=None, pretrained_net=None):

def apply(self, objective: SoEq, arguments: dict, force_out_of_place: bool = False):
self_args, subop_args = self.parse_suboperator_args(arguments=arguments)
if force_out_of_place:
if force_out_of_place or not getattr(objective, 'weights_internal_evald', False):
self.suboperators['sparsity'].apply(objective, subop_args['sparsity'])
self.suboperators['coeff_calc'].apply(objective, subop_args['coeff_calc'])

Expand Down Expand Up @@ -340,7 +340,7 @@ def _apply_deepxde(self, objective, force_out_of_place):
penalty_coeff=self.params.get('penalty_coeff', 0.2),
for_rps=False)
# Pack per-eq masked (solution, data) for DeepXDEError.
masked_solutions = [solution_list[i][mask_flat] for i in range(len(eqs))]
masked_solutions = [solution_list[i][mask_flat] for i in range(len(eqs))] # был solution_list
masked_data = [data_list[i] for i in range(len(eqs))]
sctx = SolverContext(solution=masked_solutions, loss_add=loss,
g_fun_vals=masked_data,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@
"pinn_loss_mult" : 1e4,
"error_metric": "rmse",
"deepxde_config": {
"net": [95, 100, 95],
"net": [50, 50, 50],
"activation": "tanh",
"optimizer": "adam",
"lr": 1e-3,
"num_domain": 1000,
"num_boundary": 200,
"num_initial": 200,
"epochs": 2000
"epochs": 1000
}
},
"_comment_legacy_aliases": "Param-registry aliases kept ONLY so the functional test harness (tests/functional) can fetch params by the historical operator names; the production search builds the new SolverFreeFitness / SolverBasedFitness hosts.",
Expand Down
2 changes: 1 addition & 1 deletion projects/pic/data/lv/lv.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def lv_discovery(noise_level):
dimensionality=dimensionality)
grid_tokens = GridTokens(['x_0', ], dimensionality=dimensionality, max_power=2)

epde_search_obj = EpdeSearch(use_solver=False, multiobjective_mode=True, use_pic=True, boundary=15,
epde_search_obj = EpdeSearch(use_solver=True, multiobjective_mode=True, use_pic=True, boundary=15,
coordinate_tensors=(t,), verbose_params={'show_iter_idx': True},
device='cuda')

Expand Down
4 changes: 2 additions & 2 deletions projects/pic/data/ode/ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ def ODE_discovery(foldername, noise_level):
t = np.arange(start=0., stop=step * steps_num, step=step)
data = np.load(os.path.join(foldername, 'ode_data.npy'))
noised_data = noise_data(data, noise_level)
data_nn = load_pretrained_PINN(os.path.join(foldername, 'ode_0_ann.pickle')).cpu()
#data_nn = load_pretrained_PINN(os.path.join(foldername, 'ode_0_ann.pickle')).cpu()

dimensionality = 0

trig_tokens = TrigonometricTokens(freq=(2 - 1e-8, 2 + 1e-8),
dimensionality=dimensionality)
grid_tokens = GridTokens(['x_0', ], dimensionality=dimensionality, max_power=2)

epde_search_obj = EpdeSearch(use_solver=False, use_pic=True, boundary=20,
epde_search_obj = EpdeSearch(use_solver=True, use_pic=True, boundary=20,
coordinate_tensors=[t,], verbose_params={'show_iter_idx': True},
device='cuda')

Expand Down
4 changes: 2 additions & 2 deletions projects/pic/data/wave/wave.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ def wave_data(filename):
def wave_discovery(foldername, noise_level):
grid, data = wave_data(os.path.join(foldername, 'wave_sln_80.csv'))
noised_data = noise_data(data, noise_level)
data_nn = load_pretrained_PINN(os.path.join(foldername, 'ann_pretrained.pickle'))
#data_nn = load_pretrained_PINN(os.path.join(foldername, 'ann_pretrained.pickle'))

dimensionality = data.ndim - 1

epde_search_obj = EpdeSearch(use_solver=False, use_pic=True,
epde_search_obj = EpdeSearch(use_solver=True, use_pic=True,
boundary=20,
coordinate_tensors=(grid[..., 0], grid[..., 1]), device='cuda')

Expand Down
Loading