-
Notifications
You must be signed in to change notification settings - Fork 27
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
Sampling under nonlinear equality constraints #314
Comments
Hi @Osburg, I am not 100% sure, that I understood it, so I try to give it with my words: So you want to come up with a new strategy in BoFire which could be called for example This would then also resolve the point from @simonsung06 that the space filling criterion would be somehow incompliant with the The new Strategy would then somehow look like this: class UniversalSampler(Sampler):
type: Literal['UniversalSampler'] = 'UniversalSampler'
base_samples: int
ipopt_options: Dict[str, str] If I understand this correct, then I like the idea! Best, Johannes |
Hi Johannes :), yes, this is exactly what I was talking about. Towards @simonsung06's point in #307 : I think this one would remain since his argument why Cheers |
Hi Aaron, I agree that the Best, Johannes |
Ah, yes it does! Then let's do it like this. You can assign this issue to me if you like. |
If I have not overlooked something we currently do not have a sampler for nonlinear equality constraints. As @simonsung06 pointed out in #307, the
OptimalityCriterionEnum.SPACE_FILLING
objective only depends on the domain, so I had the idea that we could possibly use this objective to add a sampler supporting a wide range of constraints, including nonlinear equality constraints (and batch constraints as soon as they are supported in doe). Warning: only naive ideas and handwaving arguments are following.The general idea is to call
find_local_max_ipopt
with space filling objective on the domain in the_ask
method. This will create a number of points which are "uniformly" distributed over the feasible set, while all constraints thatfind_local_max_ipopt
can handle are supported. These points are treated as candidates for the sampling. From these candidates we draw a certain percentage to be returned by_ask
. Intuitively, the returned candidates should represent a somewhat uniform distribution on the feasible set. The last step is intended to avoid sampling preferably in the boundary region of the feasible set: since the space filling objective will always lead to at least some points lying at the boundary of the feasible set, returning all candidates would destroy the "uniformity" of the distribution. Instead, we create a carpet of candidates populating the feasible set and then randomly pick some of them.For domains of high input dimension this will certainly not be a good solution to create samples in reasonable time, but in lower dimensional settings it could be an option. In the small example below we sample 50 points from a spherical surface, I hope this illustrates a little bit what the general idea is. Yellow points are the "carpet of candidates", the black points are a random sample drawn from the candidate set.
@jduerholt (or anyone else interested) What do you think about the idea, does it make any sense to you? Can we even make use of such a sampling method? If you think this could be a good idea feel free to assign this issue to me, then I will take care of it somewhen these days.
The text was updated successfully, but these errors were encountered: