Skip to content

Commit

Permalink
add seed to Ax client; temporarily skipping flaky test (facebookresea…
Browse files Browse the repository at this point in the history
…rch#312)

Summary:
Pull Request resolved: facebookresearch#312

Adding the ability to specify a seed for the ax client within the config for deterministic experiments. It turns out there is still some non-determinism on the AEPsych side, though, after the experiment is over. Skipping a test that is flaky due to this until it is fixed.

Reviewed By: mpolson64

Differential Revision: D48123177

fbshipit-source-id: 1eb8fded98271dc3d007c459173eb0116febdcd1
  • Loading branch information
crasanders authored and facebook-github-bot committed Aug 8, 2023
1 parent bdac5f6 commit 706556b
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
4 changes: 3 additions & 1 deletion aepsych/strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -532,8 +532,10 @@ def get_config_options(cls, config: Config, name: Optional[str] = None) -> Dict:

objectives = get_objectives(config)

seed = config.getint("common", "random_seed", fallback=None)

strat = GenerationStrategy(steps=steps)
ax_client = AxClient(strat)
ax_client = AxClient(strat, random_seed=seed)
ax_client.create_experiment(
name="experiment",
parameters=parameters,
Expand Down
3 changes: 3 additions & 0 deletions configs/ax_example.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
[common]
use_ax = True # Required to enable the new parameter features.

random_seed = 123 # The random seed used for reproducibility. Delete this line if you would like the experiment to be
# fully randomized each time it is run.

stimuli_per_trial = 1 # The number of stimuli shown in each trial; currently the Ax backend only supports 1
outcome_types = [continuous] # The type of response given by the participant; can be [binary] or [continuous].
# Multiple outcomes will be supported in a future update.
Expand Down
10 changes: 8 additions & 2 deletions tests/test_ax_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ def simulate_response(trial_params):
return response

# Fix random seeds
np.random.seed(0)
torch.manual_seed(0)
np.random.seed(123)
torch.manual_seed(123)

# Create a server object configured to run a 2d threshold experiment
database_path = "./{}.db".format(str(uuid.uuid4().hex))
Expand Down Expand Up @@ -86,6 +86,9 @@ def tearDown(self):
if self.client.server.db is not None:
self.client.server.db.delete_db()

def test_random_seed(self):
self.assertEqual(self.client.server.strat.ax_client._random_seed, 123)

def test_bounds(self):
lb = self.config.getlist("common", "lb", element_type=float)
ub = self.config.getlist("common", "ub", element_type=float)
Expand All @@ -111,6 +114,9 @@ def test_bounds(self):

self.assertTrue((self.df["par7"] == par7value).all())

@unittest.skip(
"This test is flaky due to non-determinism in asks after the experiment is finished. Skipping until this gets fixed."
)
def test_constraints(self):
constraints = self.config.getlist("common", "par_constraints", element_type=str)
for constraint in constraints:
Expand Down

0 comments on commit 706556b

Please sign in to comment.