@likeviolence

Алгоритм рандома при котором чем больше число тем ниже шанс его выпадения?

Есть некоторая переменная - поношенность вещи, которая является числом с двумя цифрами после запятой и максимальным значением равным: 99,99, как сделать рандом так, чтобы чем выше это число, тем шанс выпадения был ниже.
Делал через рандом диапазонов:
random(0,1000)
если результат равен от 0 до 500 то рандом от 0 до 70
0 - 500 -> random(0, 70) и так далее, но это не сильно подходит, так как шанс выпадения, к примеру 90 и 99 слишком равен, а прописывать каждое число слишком долго
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
kshnkvn
@kshnkvn Куратор тега Python
yay ✌️ t.me/kshnkvn
У random.choices есть возможность задавать "вес" для элементов. Например:
import random

item_chances = {
    'item_1': 10,
    'item_2': 30,
    'item_3': 50,
    'item_4': 70,
    'item_5': 90
}

selected = random.choices(
    list(item_chances.keys()), weights=list(item_chances.values()), k=5000)

for item in set(selected):
    print(f'{item}: {selected.count(item)}')

Здесь у item_1 самый маленький вес, то есть самый маленький шанс выпадения этого значения, в то время как у item_5 самый высокий. Аргумент k указывает сколько элементов нужно выбрать. В данном случае 5000 я выбрал для теста. Вывод:
item_1: 175
item_2: 578
item_3: 1001
item_4: 1458
item_5: 1788

Как видишь все сходится и "предметы" выпадали согласно их "весу".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman
...в творческом отпуске...
Чтобы сгенерировать выборку с нужным распределением, нужно взять генератор псевдослучайных чисел с равномерным распределением (все знают, что есть random, но мало кто в состоянии ответить, что же это все-таки такое) и подставить его значения параметром в функцию, обратную функции искомого распределения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы