#python #montecarlo
#python #montecarlo
Вопрос:
Я ищу метод на Python или любой другой способ решить эту проблему, поскольку я знаю, что есть один метод, но я не смог его найти, в контексте то, что я делаю, Это вычисление вероятности появления пары, двух пар и т. Д. В игре в покер с использованием Montecarloметод, на данный момент я использую random.sample
функцию для этого, но я хочу использовать свои собственные методы для генерации случайных чисел, которые возвращают числа в диапазоне от 0 до 1, и я хочу использовать дискретное равномерное распределение, чтобы быть уверенным, что каждое число имеет одинаковую вероятность появления.
Я ценю любую помощь, которую вы можете оказать.
Комментарии:
1. Почему бы не использовать
random.choice(range(1, 53))
напрямую? (вместо того, чтобы получать случайное число в (0,1) и преобразовывать его в дискретное число в [1, 52])2. @LoMaPh Mersenne Twister, используемый Python, хорош, но не идеален; видите , нам давно пора отказаться от Mersenne Twister . Я думаю, что можно спросить, как использовать альтернативы.
3. Случайное число 0-1 с плавающей запятой или это целое число в один бит?
4. Да, Ломаф, но это почти то же самое, что я делаю с функцией random.sample, которую я использую сейчас, я имею в виду, что для этого берется выборка руки размера X из покерного списка из 52 мастей, который я генерирую.
5. @Mark Ransom числа, которые генерируют мои методы, являются псевдослучайными числами, например, 0.03245, 0.764… Итак, я думаю, с плавающей запятой
Ответ №1:
Это больше математический вопрос, чем python. вот решение:
Код:
import random
arr_0_1 = [random.random() for i in range(10)]
print(arr_0_1)
d = 1/51
arr_1_52 = [n/d 1 for n in arr_0_1]
print(arr_1_52)
Вывод:
[0.49864143060719257, 0.9124661869543931, 0.14064674065024652, 0.6162308610305717, 0.698038549502753, 0.18002207940954196, 0.7337352732415695, 0.34955525833304546, 0.6380173638897209, 0.14733996159513485]
[26.430712960966822, 47.535775534674045, 8.172983773162573, 32.42777391255916, 36.5999660246404, 10.18112604988664, 38.42049893532005, 18.82731817498532, 33.53888555837577, 8.514338041351877]
Комментарии:
1. Да, я думаю, что это может сработать в моей программе, потому что на самом деле я брал покерные руки размером 5, но я нахожу другой способ в книге, поэтому я собираюсь ответить на свой вопрос, но ваш ответ тоже работает, также не может дать вам очков, потому что я новичок.новый пользователь, но я действительно ценю вашу помощь. Спасибо
Ответ №2:
Если число является числом с плавающей запятой между 0 и 1 (диапазон [0, 1)), вы можете сделать:
int(random() * 52)
чтобы получить случайное int
значение от 0 до 51 (диапазон [0, 51]).
Или сделать:
int(random() * 52) 1
чтобы получить случайное int
значение от 1 до 52 (диапазон [1, 52]).
Комментарии:
1. Если случайный диапазон
[0, 1]
вместо[0, 1)
, вы все равно можете использоватьint(random() * 52)
, но проверьте, есть ли результат52
, и отбросьте его, если он есть.
Ответ №3:
Это решение также справедливо, оно дает мне те же результаты.
Комментарии:
1. Ваше изображение — это простой текст, поэтому вы должны записать его как текст, а не публиковать его изображение.