Skip to content

Commit

Permalink
Merge branch 'development' into propogate-random-seed
Browse files Browse the repository at this point in the history
  • Loading branch information
sarah-segel authored Jan 10, 2024
2 parents 96a5bab + 3d09049 commit 4d34ebe
Show file tree
Hide file tree
Showing 11 changed files with 71 additions and 16 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/citation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out a copy of the repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Check whether the citation metadata from CITATION.cff is valid
uses: citation-file-format/[email protected]
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
auto-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- uses: actions/setup-python@v4

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
Expand Down Expand Up @@ -108,10 +108,10 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Conda install
uses: conda-incubator/setup-miniconda@v2
uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
Expand Down Expand Up @@ -148,7 +148,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
Expand Down
13 changes: 10 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
# 2.0.3

## Bugfixes

- Add OrdinalHyperparameter for random forest imputer (#1065).
- Fix path for dask scheduler file (#1055).
- Propagate the Scenario random seed to `get_random_design` (#1066)
- Add OrdinalHyperparameter for random forest imputer (#1065).
- Propagate the Scenario random seed to `get_random_design` (#1066).
- Configurations that fail to become incumbents will be added to the rejected lists (#1069).
- SMAC RandomForest doesn't crash when `np.integer` used, i.e. as generated from a `np.random.RandomState` (#1084).

## Misc
- ci: Update action version (#1072).

## Minor
- When a custom dask client is provided, emit the warning that the `n_workers` parameter is ignored only if it deviates from its default value, `1` ([#1071](https://github.com/automl/SMAC3/pull/1071)).

# 2.0.2

Expand Down
2 changes: 1 addition & 1 deletion smac/facade/abstract_facade.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def __init__(

# In case of multiple jobs, we need to wrap the runner again using DaskParallelRunner
if (n_workers := scenario.n_workers) > 1 or dask_client is not None:
if dask_client is not None:
if dask_client is not None and n_workers > 1:
logger.warning(
"Provided `dask_client`. Ignore `scenario.n_workers`, directly set `n_workers` in `dask_client`."
)
Expand Down
8 changes: 6 additions & 2 deletions smac/intensifier/abstract_intensifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,8 +571,12 @@ def update_incumbents(self, config: Configuration) -> None:

if len(previous_incumbents) == len(new_incumbents):
if previous_incumbents == new_incumbents:
# No changes in the incumbents
self._remove_rejected_config(config_id)
# No changes in the incumbents, we need this clause because we can't use set difference then
if config_id in new_incumbent_ids:
self._remove_rejected_config(config_id)
else:
# config worse than incumbents and thus rejected
self._add_rejected_config(config_id)
return
else:
# In this case, we have to determine which config replaced which incumbent and reject it
Expand Down
4 changes: 3 additions & 1 deletion smac/model/random_forest/random_forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ def __init__(
self._rf_opts.compute_law_of_total_variance = False
self._rf: BinaryForest | None = None
self._log_y = log_y
self._rng = regression.default_random_engine(seed)

# Case to `int` incase we get an `np.integer` type
self._rng = regression.default_random_engine(int(seed))

self._n_trees = n_trees
self._n_points_per_tree = n_points_per_tree
Expand Down
42 changes: 42 additions & 0 deletions tests/test_intensifier/test_abstract_intensifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,48 @@ def test_incumbent_selection_multi_objective(make_scenario, configspace_small, m
assert intensifier.get_incumbents() == [config]


def test_config_rejection_single_objective(configspace_small, make_scenario):
""" Tests whether configs are rejected properly if they are worse than the incumbent. """
scenario = make_scenario(configspace_small, use_instances=False)
runhistory = RunHistory()
intensifier = Intensifier(scenario=scenario)
intensifier.runhistory = runhistory

configs = configspace_small.sample_configuration(3)

runhistory.add(config=configs[0],
cost=5,
time=0.0,
seed=0,
status=StatusType.SUCCESS,
force_update=True)
intensifier.update_incumbents(configs[0])

assert intensifier._rejected_config_ids == []

# add config that yielded better results, updating incumbent and sending prior incumbent to rejected
runhistory.add(config=configs[1],
cost=1,
time=0.0,
seed=0,
status=StatusType.SUCCESS,
force_update=True)
intensifier.update_incumbents(config=configs[1])

assert intensifier._rejected_config_ids == [1]

# add config that is no better should thus go to rejected
runhistory.add(config=configs[2],
cost=1,
time=0.0,
seed=0,
status=StatusType.SUCCESS,
force_update=True)
intensifier.update_incumbents(config=configs[2])

assert intensifier._rejected_config_ids == [1, 3]


def test_incumbent_differences(make_scenario, configspace_small):
pass

Expand Down

0 comments on commit 4d34ebe

Please sign in to comment.