A weighted version of random.choice

后端 未结 25 1923
闹比i
闹比i 2020-11-21 06:29

I needed to write a weighted version of random.choice (each element in the list has a different probability for being selected). This is what I came up with:



        
25条回答
  •  情话喂你
    2020-11-21 07:01

    There is lecture on this by Sebastien Thurn in the free Udacity course AI for Robotics. Basically he makes a circular array of the indexed weights using the mod operator %, sets a variable beta to 0, randomly chooses an index, for loops through N where N is the number of indices and in the for loop firstly increments beta by the formula:

    beta = beta + uniform sample from {0...2* Weight_max}

    and then nested in the for loop, a while loop per below:

    while w[index] < beta:
        beta = beta - w[index]
        index = index + 1
    
    select p[index]
    

    Then on to the next index to resample based on the probabilities (or normalized probability in the case presented in the course).

    The lecture link: https://classroom.udacity.com/courses/cs373/lessons/48704330/concepts/487480820923

    I am logged into Udacity with my school account so if the link does not work, it is Lesson 8, video number 21 of Artificial Intelligence for Robotics where he is lecturing on particle filters.

提交回复
热议问题