Если ваши процентные значения не будут точнее, чем целые проценты, используйте генератор случайных чисел для генерации числа 0-99.
Затем в вашей функции используйте (программные) случаи, чтобы выбрать правильный номер. Например (очистить это):
if 701 if random_num < 20 return 1 else if random number < 50 // ( 20 + 30 ) return 2 else if random number < 100 // ( 20 + 30 + 50 ) return 3 else // error