Ensemble: Set custom seed.

scenario-dev-pa
Pierre-Antoine 2026-09-10 16:38:31 +02:00
parent 3325ba935b
commit d4bc9bdf75
2 changed files with 33 additions and 2 deletions

View File

@ -1609,10 +1609,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
parent=self parent=self
) )
if dlg.exec(): if dlg.exec():
run_number = dlg._number function = dlg.function
run_number = dlg.number
seed = dlg.seed
sol = SolverLogEnsWindow( sol = SolverLogEnsWindow(
run_number=run_number, run_number=run_number,
seed=seed, function=function,
study=self._study, study=self._study,
config=self.conf, config=self.conf,
solver=solver, solver=solver,

View File

@ -71,6 +71,10 @@ class EnsembleRunNumberDialog(PamhyrDialog):
parent=parent parent=parent
) )
self._function = "Random"
self._number = 100
self._seed = -1
self._init_default_values() self._init_default_values()
self._init_connection() self._init_connection()
@ -91,9 +95,21 @@ class EnsembleRunNumberDialog(PamhyrDialog):
def number(self): def number(self):
return self._number return self._number
@property
def seed(self):
return self._seed
@property
def function(self):
return self._function
def accept(self): def accept(self):
self._function = self.get_combobox_text("comboBox")
self._number = self.get_spin_box("spinBox") self._number = self.get_spin_box("spinBox")
if self._checkbox.isChecked():
self._seed = self.get_spin_box("spinBox_seed")
super().accept() super().accept()
def reject(self): def reject(self):
@ -475,14 +491,25 @@ class SolverLogEnsWindow(SolverLogWindow):
_pamhyr_name = "Solver Log Ensemble" _pamhyr_name = "Solver Log Ensemble"
def __init__(self, run_number=100, def __init__(self, run_number=100,
seed=-1, function="Random",
study=None, config=None, study=None, config=None,
solver=None, parent=None): solver=None, parent=None):
self._run_number = run_number self._run_number = run_number
self._last_run = 0 self._last_run = 0
if seed != -1:
np.random.seed(seed)
self._seed = np.random.get_state()[1][0]
logger.info(
"solver: Set ensemble with " +
f"{run_number} {function} and " +
f"{self._seed} as random seed"
)
self._samples = {} self._samples = {}
for ens in study.river._ensembles.lst: for ens in study.river._ensembles.lst:
if ens.function is None: if ens.distribution is None:
continue continue
self._samples[ens] = ens.random(self._run_number) self._samples[ens] = ens.random(self._run_number)
@ -571,6 +598,7 @@ class SolverLogEnsWindow(SolverLogWindow):
table["samples"] = results.new_table_data( table["samples"] = results.new_table_data(
"samples", np.array(self._run_samples) "samples", np.array(self._run_samples)
) )
results.set("seed", self._seed) # Keep random seed
results.set("table", table) results.set("table", table)