-
-
Notifications
You must be signed in to change notification settings - Fork 33
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
How can I randomly choose values from a complex interval instance? #43
Comments
Hello, Which kind of intervals are you using? I mean: are they based on numerical values, dates, etc.? Also, depending on the type, these intervals can be continuous (e.g. floats) or pseudo-discrete (e.g. dates), leading to a different problem ;) [Edited: Also, I guess that you want each value to have the exact same probability to be taken?] |
Hi @AlexandreDecan, |
Hi, A very naive, pretty inefficient, way to do this would be to generate a random value and check if it is contained in the interval. Let's assume that your interval is while True:
x = random.uniform(interval.lower, interval.upper)
if x in interval:
break By the way, this could be very inefficient, especially if there are many "gaps" in your interval. Another way, more efficient, would be to work with atomic intervals (i.e. intervals that have no "gap"). The first step is to select one of them, then to generate a value between its bounds. Obviously, not all atomic intervals should have the same weights, since some of them are "smaller" than some other ones. weights = [x.upper - x.lower for x in interval]
atomic = random.choices(interval, weights=weights, k=1)[0]
while True:
x = random.uniform(atomic.lower, atomic.upper)
if x in atomic:
break The Notice that I have not tested these snippets yet :-) |
Thank you very much! |
You're welcome! :-) |
now I need to get some random values from a interval instance, is there some simple methods to achieve this?
if there is, I would appreciate it very much !
The text was updated successfully, but these errors were encountered: