Случайная формула для выбора победителя - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть сайт с промо и пользователями, пользователи могут зарегистрироваться в промо, тогда 1 случайный пользователь может выиграть в этой акции.

Теперь простая формула для выбора победителя:

$total_users = 100; //total users in promo
$winner_number = rand(1,$total_users);

НоТеперь пользователь может пригласить кого-либо с уникальной ссылкой на промо и клики по его ссылке увеличат счетчик приглашений для этой промо:

$users[] = ['user_id'=>8,'invites'=>5];
$users[] = ['user_id'=>17,'invites'=>150];
$users[] = ['user_id'=>69,'invites'=>30];
$users[] = ['user_id'=>32,'invites'=>0];
... //array with users in promo

И нужна новая формула для выбора победителя, зависит от приглашений (больше приглашений - больше шансов на победу), но без линейной прогрессии, чтобы выиграть шанс (избегать мошенничества)

Вес должен быть таким, как на этом графике:

enter image description here

1 Ответ

0 голосов
/ 12 декабря 2018

Ну, во-первых, похоже, что число шансов, которое получает каждый пользователь, будет примерно таким:

шансов = to_integer (1 + (bonus_rate * (1 - 1 / (slope_adjustment ^ invites)).^ 0)))) = 1 шанс

1 приглашение получит вас (1 + (10 * (1 - 1 / (2 ^ 1)))) = 1 + 5 = 6 шансов 10 приглашений получат вас (1 + (10 * (1 - 1 / (2 ^ 10)))) = 1 + 9.99 = 10 шансов 1 миллион приглашений получат вас (1 + (10* (1 - 1 / (2 ^ 1000000)))) = 1 + 9.999999 = 10

Регулируя bonus_rate и slope_adjustment, вы можете контролировать количество дополнительных шансов, которые получает каждый пользователь.

Далее - вам нужно нанести это количество записей на некоторое пространство (массив, числовую строку и т. Д.) И случайным образом выбрать точку в этом пространстве, чтобы найти вашего победителя.

Самый простой способ -добавить наЭлемент в массив для каждой записи, затем просто случайным образом выберите один.

...