Skip to content

Commit

Permalink
Merge pull request #66 from iraikov/fix/constraints_filter
Browse files Browse the repository at this point in the history
Fix for constraint handling
  • Loading branch information
iraikov committed Dec 13, 2023
2 parents b483b4a + 2c4206e commit b565845
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
4 changes: 2 additions & 2 deletions dmosopt/MOASMO.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
22 changes: 17 additions & 5 deletions dmosopt/dmosopt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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 = []
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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 <ivan.g.raikov@gmail.com>"]
license = "GPL-3.0-or-later"
Expand Down

0 comments on commit b565845

Please sign in to comment.