甚至奖品分配

时间:2016-05-02 14:19:41

标签: algorithm random probability

我目前面临着有趣的算法问题,我正在寻找想法或可能的解决方案。主题似乎很常见所以它可能已知并已解决,但我无法找到它。

所以我们假设我正在经营店铺 我为购买客户制作lottery。每次他们买东西都可以赢得奖品。

  • 购买后立即向顾客提供奖品。
  • 我有X prizes
  • 我将为Y days
  • 运行彩票
  • 付款客户(购买行为,交易行为)应获得equal chance to win奖励
  • 奖品应该分发到最后一天(最后一天应该留下一些奖品来分发)
  • 最后不能有left个奖品
  • 拥有每日交易的历史数据(没有来自彩票之前的数据)来估算平均交易数量(但彩票可能会改变交易次数)
  • 我可以在彩票运行时收集数据

这是不可解决的,什么是最接近的解决方案? 即时奖金分配必须保留。

2 个答案:

答案 0 :(得分:1)

你要做的事是不可能的。一旦您放弃了最后一个奖品,您就无法保证剩下的客户数量,因此并非所有客户都有平等的机会赢得奖品。

你可以做一些相当接近它的事情。您可以尝试估算您将拥有的客户数量,假设它们均匀分布,然后在比赛运行期间分摊奖品。这将为您提供一个比率,您可以用它来表示给定客户是否是赢家。然后随着比赛的进行,更改估计值以匹配您看到的内容,以及剩下的奖品。每隔x(小时/分钟甚至客户交易)运行此更新,以确保速率不会太低,并且每个q奖励以确保速率不会太高。如果赠送奖品或者如果有一段时间流量较低(例如一夜之间),算法可能反应过强,请不要经常运行更新。

让我举个例子。假设您发现每小时会看到100个客户,您应该每200个客户提供一次奖品。所以每2个小时大约1个。 3个小时后你回来,你看到你每小时看到300个顾客,你已经给出了4个奖品。因此,您现在可以将期望值调整为每小时300个客户,并调整分配率以匹配剩余的分配率。

即使您的初始值太低或太高,这也会有效。 如果您的估计太远而且您的更新介于两者之间(例如,您只在一天之后检查,但您已经放弃了所有奖品),这将会严重破坏。

这可以在桌面上留下奖品。如果您不希望这样,您可以减少程序认为比赛正在运行的时间,以便它应该在比赛结束前完成奖品。您可以限制在给定日期内授予的奖品数量,以使分配更加统一(不要将其设置为X/Y,但是X/Y * .25之类的内容会有一些变化),并更新限制在一天结束时,考虑给予奖励的变化。

答案 1 :(得分:1)

可能的解决方案#1

基于@ m69评论 Randomly selected events in time

Lets说有6个奖项(总奖金)和2天的彩票。 让我们将Prizes By Day定义为PBD(为了满足要求,奖品直到最后一天)。 PBD =总奖金/天 我们每天随机选择多达PBD事件。 此活动后的每笔交易都是赢得交易。 可以优化到不使用彩票最后一天的最后一小时,以保证赠送所有奖品。

加号

随机。简单,优雅的解决方案

劣势

似乎用户没有平等的机会获胜。

可能的解决方案#2

基于@Sorin回答

Solution based on analyzing last time frame

我们开始分析第一个时间范围(例如1小时)。我们计算获胜机会: enter image description here 哪里: Δprizes=左奖品, Δframes=左帧