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
2 changes: 1 addition & 1 deletion .github/workflows/test-functional.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
fail-fast: false
matrix:
python-version: ["3.11"]
operator: ["L2LRFitness"]
operator: ["DeepXDEBasedFitness"]
split: [1, 2, 3, 4]

steps:
Expand Down
42 changes: 26 additions & 16 deletions epde/integrate/deepxde_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,9 @@ def func(x):
num_boundary=adapter.num_boundary,
num_test=500)

layer_size = [1] + adapter.net + [len(var_names)]
net = dde.nn.FNN(layer_size, adapter.activation, adapter.kernel_initializer)
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
model = adapter._get_or_create_model(data_obj, dim=1, var_count=len(var_names))
try:
losshistory, train_state = model.train(epochs=adapter.epochs)
losshistory, train_state = model.train(iterations=adapter.iterations, verbose=adapter.verbose)
final_loss = float(
losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
Expand Down Expand Up @@ -140,12 +137,9 @@ def func(x):
num_initial=adapter.num_initial,
num_test=500)

layer_size = [geomtime.dim] + adapter.net + [len(var_names)]
net = dde.nn.FNN(layer_size, adapter.activation, adapter.kernel_initializer)
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
model = adapter._get_or_create_model(data_obj, dim=2, var_count=len(var_names))
try:
losshistory, train_state = model.train(epochs=adapter.epochs) # <-- ИСПРАВЛЕНО
losshistory, train_state = model.train(iterations=adapter.iterations, verbose=adapter.verbose) # <-- ИСПРАВЛЕНО
final_loss = float(losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
print(f"Exception: {e}")
Expand Down Expand Up @@ -233,12 +227,9 @@ def func(x):
num_initial=adapter.num_initial,
num_test=500)

layer_size = [geomtime.dim] + adapter.net + [len(var_names)]
net = dde.nn.FNN(layer_size, adapter.activation, adapter.kernel_initializer)
model = dde.Model(data_obj, net)
model.compile(adapter.optimizer, lr=adapter.lr)
model = adapter._get_or_create_model(data_obj, dim=3, var_count=len(var_names))
try:
losshistory, train_state = model.train(epochs=adapter.epochs) # <-- ИСПРАВЛЕНО
losshistory, train_state = model.train(iterations=adapter.iterations, verbose=adapter.verbose) # <-- ИСПРАВЛЕНО
final_loss = float(losshistory.loss_train[-1][0]) if losshistory.loss_train else np.nan
except Exception as e:
print(f"Exception: {e}")
Expand All @@ -263,10 +254,12 @@ def __init__(self, pretrained_net=None, **config):
self.num_domain = int(self.config.get('num_domain', 2000))
self.num_boundary = int(self.config.get('num_boundary', 500))
self.num_initial = int(self.config.get('num_initial', 500))
self.epochs = int(self.config.get('epochs', 10000))
#self.epochs = int(self.config.get('epochs', 10000))
self.iterations = int(self.config.get('iterations', 10000))
# self.iterations = int(self.config.get('epochs', 5))
self.bc_type = self.config.get('bc_type', 'Dirichlet')
self.fallback_bc_value = self.config.get('fallback_bc_value', 0.0)
self.verbose = config.get('verbose', False)

self.coordinate_mapping = self.config.get('coordinate_mapping', None)
self.coord_names = None
Expand All @@ -278,6 +271,23 @@ def __init__(self, pretrained_net=None, **config):
3: Solver3D(),
}

self._model = None

def _get_or_create_model(self, data_obj, dim, var_count):
if self._model is None:
layer_size = [dim] + self.net + [var_count]
net = dde.nn.FNN(layer_size, self.activation, self.kernel_initializer)
model = dde.Model(data_obj, net)
model.compile(self.optimizer, lr=self.lr, verbose=self.verbose)
self._model = model
else:
def reset_weights(m):
if hasattr(m, 'reset_parameters'):
m.reset_parameters()
self._model.net.apply(reset_weights)
self._model.data = data_obj
return self._model

def _set_coordinate_info(self, coord_names):
self.coord_names = coord_names
if self.coordinate_mapping is not None:
Expand Down
2 changes: 1 addition & 1 deletion epde/operators/common/fitness.py
Original file line number Diff line number Diff line change
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))] # был solution_list
masked_solutions = [solution_list[i][mask_flat] for i in range(len(eqs))]
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 @@ -31,7 +31,9 @@
"num_domain": 1000,
"num_boundary": 200,
"num_initial": 200,
"epochs": 1000
"iterations": 1000,
"epochs": 1000,
"verbose": false
}
},
"_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
Loading