选择获胜者的随机公式

时间:2018-12-11 22:19:18

标签: javascript php random logic

我有一个带有促销和用户的网站,用户可以在促销中注册,然后有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 :(得分:1)

首先,-每个用户获得的机会看起来像是:

机会= to_integer(1 +(奖励率*(1-1 /(斜率调整^邀请)))

例如,如果Bonus_rate为10,斜率调整为2,则:

  • 0个邀请将使您(1 +(10 *(1-1-(2 ^ 0)))))= 1次机会
  • 1个邀请将获得(1 +(10 *(1-1-(2 ^ 1))))= 1 + 5 = 6个机会
  • 10个邀请可以让您(1 +(10 *(1-1-(2 ^ 10))))= 1 + 9.99 = 10个机会
  • 一百万个邀请将使您获得(1 +(10 *(1-1-(2 ^ 1000000))))= 1 + 9.999999 = 10

通过调整奖金率和坡度调整,您可以控制每个用户获得的额外机会的数量。

下一步-您需要将该条目数绘制到某个空间(数组,数字线等)上,并在该空间中随机选择一个点以找到您的获胜者。

最简单的方法是为每个条目向数组添加一个元素,然后随机选择一个。