Skip to content

Commit

Permalink
fix pending candidates for universal constraint sampler
Browse files Browse the repository at this point in the history
  • Loading branch information
Osburg committed Jan 9, 2024
1 parent 229d2d0 commit 006ac58
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
6 changes: 5 additions & 1 deletion bofire/strategies/samplers/universal_constraint.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ def _ask(self, candidate_count: int) -> pd.DataFrame:
samples = find_local_max_ipopt(
domain=self.domain,
model_type="linear", # dummy model
n_experiments=int(candidate_count / self.sampling_fraction),
n_experiments=self.num_candidates
+ int(candidate_count / self.sampling_fraction),
ipopt_options=self.ipopt_options,
objective=OptimalityCriterionEnum.SPACE_FILLING,
fixed_experiments=self.candidates,
)

samples = samples.iloc[
self.num_candidates :,
]
samples = samples.sample(
n=candidate_count,
replace=False,
Expand Down
13 changes: 13 additions & 0 deletions tests/bofire/strategies/test_samplers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import pytest
from pandas import concat

import bofire.data_models.strategies.api as data_models
import bofire.strategies.api as strategies
Expand Down Expand Up @@ -51,6 +52,18 @@ def test_UniversalConstraintSampler(domain, num_samples):
assert len(samples) == num_samples


def test_UniversalConstraintSampler_pending_candidates():
data_model = data_models.UniversalConstraintSampler(domain=domains[0])
sampler = strategies.UniversalConstraintSampler(data_model=data_model)
pending_candidates = sampler.ask(2, add_pending=True)
samples = sampler.ask(1)
assert len(samples) == 1
all_samples = concat(
[samples, pending_candidates], axis=0, ignore_index=True
).drop_duplicates()
assert len(all_samples) == 3


inputs = Inputs(
features=[ContinuousInput(key=f"if{i}", bounds=(0, 1)) for i in range(1, 4)]
)
Expand Down

0 comments on commit 006ac58

Please sign in to comment.