Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a choice based on a percentage probability

Tags:

c#

probability

I wish to use the answer provided in this post to randomly choose unique items from a list.

Following the method described, in each iteration of my loop I generate a probability value which is the percentage chance of the current item being picked from the list.

What I need to know is how do I use this percentage value to pick the item (or not).

Here is the code I have, with remainingIndices being a List<int>

for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
}

pixelsToAdd is 120 and remainingIndices.Count is 3600. The probability values I am getting start at 0.0333333351

The solution should be flexible to work with a much wider range of values, preferably any values.

Thanks

Comment

For future readers of this question I should clarify that at first I thought the probability value was some percentage between 0 and 100 but in reality it's a value between 0 and 1 and so matches up perfectly with the return value of Random.NextDouble() which therefore can be used for comparison as described in the answers below.

like image 934
Steve Avatar asked Oct 22 '22 18:10

Steve


1 Answers

To use your probability, compare it with a sample from random variable following a uniform distribution on [0, 1].

if (Random.NextDouble() <= probability)
    // Take the ith element in the list

You resulting loop will be:

List<???> selectedItems = new List<???>();
for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
    if (Random.NextDouble() <= probability)
    {
        selectedItems.Add(items[i]);
        pixelsToAdd--;
    }
}
like image 174
Cédric Bignon Avatar answered Oct 24 '22 13:10

Cédric Bignon