-
Notifications
You must be signed in to change notification settings - Fork 42
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
Conversation
models: Mapping[Tag, ProbabilisticModelType], | ||
datasets: Optional[Mapping[Tag, Dataset]] = None, | ||
) -> types.State[BatchTrustRegion.State | None, TensorType]: | ||
if self._init_subspaces is None: |
There was a problem hiding this comment.
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__
?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
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 ifinit_subspaces
is None, with the number of spaces equal to thebatch_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 forEfficientGlobalOptimization
.This PR also allows users to specify a single init-subspace more easily. That is,
init_subspaces
can now beNone
, a single value or a sequence.Fully backwards compatible: yes
PR checklist