【问题标题】:Random formula for choice winner选择获胜者的随机公式
【发布时间】:2018-12-11 22:19:17
【问题描述】:

我有一个有促销和用户的网站,用户可以注册促销,然后 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

并且需要新的公式来选择获胜者取决于邀请(更多邀请 - 更多获胜机会),但没有线性进展来赢得机会(避免作弊)

权重应该如下图所示:

【问题讨论】:

  • 如果不是线性的,邀请的数量如何影响获胜的机会?
  • 嗯...这是你的促销活动。您需要确定您希望如何奖励您的用户。
  • Java ? JS ??没有
  • @JayDM 在图片中需要这样的公式 - yadi.sk/i/63H_G6pNGx6veg
  • 您是否在寻找加权随机选择,其中权重是他们邀请的人数?

标签: javascript php random logic


【解决方案1】:

嗯,首先 - 看起来每个用户获得的机会数量类似于:

机会 = to_integer(1 + (bonus_rate * (1 - 1 / (slope_adjustment ^ 邀请))))

例如,如果 bonus_rate 为 10,slope_adjustment 为 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 次机会
  • 100 万个邀请会得到你 (1 + (10 * (1 - 1 / (2 ^ 1000000)))) = 1 + 9.999999 = 10

通过调整 bonus_rate 和 slope_adjustment,您可以控制每个用户获得的额外机会的数量。

接下来 - 您需要在某个空间(数组、数轴等)上绘制该数量的条目,并在该空间中随机选择一个点来找到您的获胜者。

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

【讨论】:

  • 非常感谢,这正是我需要的公式!我不知道为什么人们把我拒之门外,也许这对每个人来说都很明显,但对我来说不是,谢谢你的帮助。
  • 不用担心。我不认为人们试图给你带来麻烦。他们只是想获得足够的信息来回答你的实际问题。当没有足够的信息来缩小问题范围时,很容易回答错误的答案。没有人愿意浪费他们的时间。你越能定义你的问题——人们就越有可能愿意花时间来帮助你。 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-22
  • 2014-06-16
  • 1970-01-01
  • 2015-08-17
  • 2021-02-13
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多