Как правильно написать алгоритм лотереи? - PullRequest
1 голос
/ 11 апреля 2011

Например, если я хотел, чтобы у меня был один победитель каждые четыре часа, и я ожидал, что у меня будет 125 игр в час, то каков наилучший способ обеспечить наибольший шанс иметь победителя и наименьший шанс нанет победителей в конце четырехчасового периода?

Геймплей похож на игровой автомат, а не на ежедневную цифру.т. е. участник входит в игру и сразу же получает уведомление, если он выиграл или проиграл.

Звучит как домашнее задание, я знаю, но это не так:)

Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

На самом деле вы можете сделать так много, чтобы сохранить справедливость (т. Е. Тот, кто входит в начало четырехчасового периода, имеет те же шансы на победу, что и тот, кто входит в конце), если вы хотите применить это ограничение. В общем, лучшее, что вы можете сделать, оставаясь при этом законным, - это угадать, сколько у вас будет участников, и соответственно установить вероятность (и, если в конце данного периода нет победителя, передайте его случайным образом). участник этого периода).

Вот что я бы сделал, чтобы скорректировать вероятность вашего лотереи по ходу дела (исключая юридические последствия этого):

  • Для каждого периода начните вероятность с 1 / (number of expected entries * 2)
  • В любое время, если вы получаете победителя, вероятность становится равной 0 до конца этого периода.
  • Каждые тридцать минут, если вы все еще без победителя, установите вероятность на 1 / ((number of expected entries * (1 - percentage of period complete)) * 2). Итак, percentage of period complete - это number of hours elapsed in that current period / number of total hours in the period (4). По сути, вероятность будет увеличиваться.

Практический пример: ожидаемые записи - 200.

  • Начальная вероятность = 1 / 400 = 0.0025.
  • Через первые полчаса у нас нет победителя, поэтому мы переоцениваем вероятность: probability = 1 / ((200 * (1 - 0.125) * 2) = 1 / (200 * 2 * 0.875) = 1/350
  • Это продолжается до тех пор, пока вероятность не станет максимальной 1/50, при условии, что до этого победителя не будет.

Вы можете настроить эти параметры, если хотите максимизировать ускорение или что-то еще. Но я был бы упущен, если бы не подчеркнул, что Я не верю, что проведение лотереи, как это законно . Я сделал несколько лотерей для своей компании и немного знаком с различными законами и правилами, и общее практическое правило, насколько я понимаю, состоит в том, что ни один участник не должен иметь преимущество перед любым другим участником по сравнению с другим участником. не знает о. Я не эксперт, но посоветуйтесь с вашим адвокатом, прежде чем проводить такие лотереи. Тем не менее, приведенное выше решение поможет вам максимально увеличить шансы на получение приза.

1 голос
/ 11 апреля 2011

Если вы хотите победителя для каждого розыгрыша, вы просто выбираете случайного победителя из своих участников.

Если вы делаете это как лотерею, где вам не нужно иметьВыиграв в каждом розыгрыше, шансы бывают высокими или низкими, если вы хотите, чтобы они основывались на вашей схеме выбора.Например, если у вас есть 125 заявок в час, и вы выбираете каждые четыре часа, это 500 заявок на конкурс.Если вы генерируете случайное число от 1 до 1000, есть 50% -ная вероятность того, что кто-то выиграет, 1 и 750 - это 75% -ная вероятность того, что кто-то выиграет, и так далее.Затем вы просто выбираете запись, соответствующую сгенерированному случайному числу.

Существует миллион различных способов реализации выбора победителя, в конце вам просто нужно выбрать один и использовать его последовательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...