diff --git a/dmosopt/MOASMO.py b/dmosopt/MOASMO.py index 7adf3ac..57da2e4 100644 --- a/dmosopt/MOASMO.py +++ b/dmosopt/MOASMO.py @@ -231,7 +231,7 @@ def epoch( N_resample = int(pop * pct) if Xinit is None: - Xinit, Yinit = yield + Xinit, Yinit, C = yield x = Xinit.copy().astype(np.float32) y = Yinit.copy().astype(np.float32) @@ -337,7 +337,7 @@ def epoch( if sm is not None: y_gen = sm.evaluate(x_gen) else: - _, y_gen = yield x_gen + _, y_gen, c_gen = yield x_gen try: res = opt_gen.send(y_gen) diff --git a/dmosopt/dmosopt.py b/dmosopt/dmosopt.py index 82821a9..277dace 100644 --- a/dmosopt/dmosopt.py +++ b/dmosopt/dmosopt.py @@ -192,10 +192,12 @@ def _update_evals(self): y_completed = np.vstack([x.objectives for x in self.completed]) n_objectives = y_completed.shape[0] y_predicted = np.vstack( - tuple(map( - lambda x: [np.nan] * n_objectives if x is None else x, - [x.prediction for x in self.completed], - )) + tuple( + map( + lambda x: [np.nan] * n_objectives if x is None else x, + [x.prediction for x in self.completed], + ) + ) ) f_completed = None @@ -341,12 +343,13 @@ def update_epoch(self, resample=False): else: x_gen = completed_evals[0] y_gen = completed_evals[1] + c_gen = completed_evals[4] try: if isinstance(self.opt_gen, dict): raise StopIteration(self.opt_gen) else: - item = self.opt_gen.send((x_gen, y_gen)) + item = self.opt_gen.send((x_gen, y_gen, c_gen)) except StopIteration as ex: if isinstance(self.opt_gen, GeneratorType): self.opt_gen.close() @@ -1146,6 +1149,15 @@ def run_epoch(self): x_completed = completed_evals[0] y_completed = completed_evals[1] pred_completed = completed_evals[2] + c_completed = completed_evals[4] + if c_completed is not None: + feasible = np.argwhere(np.all(c_completed > 0.0, axis=1)) + if len(feasible) > 0: + feasible = feasible.ravel() + x_completed = x_completed[feasible, :] + y_completed = y_completed[feasible, :] + pred_completed = pred_completed[feasible, :] + if x_completed.shape[0] > 0: n_objectives = y_completed.shape[1] mae = [] diff --git a/pyproject.toml b/pyproject.toml index 4e72e9b..815d868 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "dmosopt" -version = "0.45.2" +version = "0.45.3" description = "Distributed multi-objective surrogate optimization algorithm." authors = ["Ivan Raikov "] license = "GPL-3.0-or-later"