Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow TRs to be created with empty/single region #783

Merged
merged 3 commits into from
Sep 13, 2023

Conversation

khurram-ghani
Copy link
Collaborator

@khurram-ghani khurram-ghani commented Sep 12, 2023

Related issue(s)/PRs: None

Summary

This PR updates batch trust-region classes to allow init_subspaces to be empty. The request came from this discussion. Default subspaces are created if init_subspaces is None, with the number of spaces equal to the batch_size/num_query_points in the base rule.

Unfortunately, there is no mechanism or concept in the base AcquistionRule for batch size. So this PR uses the dynamic type of the base rule, with current support for EfficientGlobalOptimization.

This PR also allows users to specify a single init-subspace more easily. That is, init_subspaces can now be None, a single value or a sequence.

Fully backwards compatible: yes

PR checklist

  • The quality checks are all passing
  • The bug case / new feature is covered by tests
  • Any new features are well-documented (in docstrings or notebooks)

models: Mapping[Tag, ProbabilisticModelType],
datasets: Optional[Mapping[Tag, Dataset]] = None,
) -> types.State[BatchTrustRegion.State | None, TensorType]:
if self._init_subspaces is None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

naive question: why is initialisation done here and not within __init__?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is because the subspaces we have (e.g. SingleObjectiveTrustRegionBox) need the global search space at initialisation time; which is not available in the rule __init__. I could have added it there as a required argument, but since that is already provided to acquire, I deferred that creation till then.

Note this does raise an important point. The subspaces take the reference to the global search space once (e.g. in first call to acquire). Theoretically the users can change the global search space to subsequent calls to acquire, but that would be ignored. I don't know how other rules deal with that or if that is even valid.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense!

Regarding the second point, if you change the global search space, then your trust region may become invalid. In that case it would make sense for the user to manually re-initialise it.

I guess we could either assert that the spaces match at every acquire call, or just ignore this corner case?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the case where users create the subspaces outside the class, the global search space passed to acquire is completely ignored -- it is only used for this default initialisation case. So the full strict check check would be to assert the search space in every call to acquire is equal to the one stored inside every subspace. I hope that check is not too restrictive. I'll go ahead and add that.

@khurram-ghani khurram-ghani merged commit df4999b into develop Sep 13, 2023
12 checks passed
@khurram-ghani khurram-ghani deleted the khurram/tr_empty_init branch September 13, 2023 12:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants