Algorithm 平均奖金分配

Algorithm 平均奖金分配,algorithm,random,probability,Algorithm,Random,Probability,我目前面临着一个有趣的算法问题,我正在寻找想法或可能的解决方案。这个话题似乎很常见,所以可能已经知道并解决了,但我找不到它 所以让我们假设我在经营商店 我在为顾客买彩票。他们每次买东西都能得奖 顾客购买后立即获得奖品 我有X个奖品和 我将在Y天内运行彩票 付费客户(购买行为、交易)应具有同等的机会赢取奖品 奖品应发放到最后一天(最后一天应留下一些奖品进行发放) 最后不能有剩余的奖品 我没有每天交易的历史数据(没有抽签前的数据)来估计平均交易数量(但抽签可能会改变交易数量) 我可以在彩票发行时收

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

所以让我们假设我在经营商店 我在为顾客买彩票。他们每次买东西都能得奖

  • 顾客购买后立即获得奖品
  • 我有
    X个奖品
  • 我将在
    Y天内运行彩票
  • 付费客户(购买行为、交易)应具有同等的机会赢取奖品
  • 奖品应发放到最后一天(最后一天应留下一些奖品进行发放)
  • 最后不能有
    剩余的
    奖品
  • 我没有每天交易的历史数据(没有抽签前的数据)来估计平均交易数量(但抽签可能会改变交易数量)
  • 我可以在彩票发行时收集数据
如果这是不可解的,那么最接近的解决方案是什么?
即时奖金分配必须保留。

你想做的是不可能的。一旦你送出了最后一个奖品,你就无法保证剩下的顾客数量,因此并非所有顾客都有同等的机会获奖

你可以做一些非常接近它的事情。您可以尝试估计您将拥有的客户数量,假设他们分布均匀,然后在竞赛期间分配奖金。这将为您提供一个比率,您可以使用该比率来判断给定客户是否是赢家。然后随着比赛的进行,更改估计值以匹配您看到的内容以及剩余的奖品。每x(小时/分钟,甚至客户交易)运行一次此更新,以确保费率不太低,每q奖励一次,以确保费率不太高。如果奖品被送出,请不要经常运行更新,否则在流量较低的时段(比如一夜之间),算法的反应可能会太强烈

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

即使您的初始值太低或太高,这也会起作用。 如果你的估计值太高,而你的更新时间又太长(比如说你只在一天后检查,但你已经送出了所有的奖品),这将严重破坏

这会让奖品摆在桌子上。如果您不想这样做,您可以减少程序认为比赛正在进行的时间,以便在比赛结束前完成奖品。您可以限制某一天颁发的奖品数量,以使分配更加均匀(不要将其设置为
X/Y
,而是设置为
X/Y*.25
,这样会有一些变化),并在一天结束时更新限制,以考虑所颁发奖品的变化。

可能的解决方案#1 基于@m69评论

假设有6个奖品(总奖品)和2天的抽奖。 让我们将每天的奖品定义为PBD(为了满足要求,直到最后一天才有奖品)。 PBD=总奖金/天 我们每天随机选择多达个PBD事件此事件之后的每一笔交易都是赢家交易。 可以优化为“否”,以使用彩票最后一天的最后一个小时来保证发放所有奖品

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

缺点 用户似乎没有同等的获胜机会

可能的解决方案#2 基于@Sorin answer

我们开始分析第一个时间帧(示例1小时)。我们将获胜的机会计算为: 哪里: Δ奖品=剩余奖品,
Δframes=左帧

那么你所需要做的就是假装你只有X-1奖(或者X-k奖,如果你想在最后一天保留k奖)和Y-1天。这就剩下最后一天的1(或k)个奖品。@j_random_hacker如果我理解正确,我不能在交易后立即授予奖品。没有任何东西可以保证你不会有很多奖品(如果彩票最后几天没有人进入你的商店)或者,在最后一刻进入商店的人仍然有机会(在某个时候,有人会赢得最后一个奖项,但在那之后,人们仍然可以进入商店。)@krzysztoffogdan:你说得对,使用水库取样意味着从你已经给过他们的人那里拿走奖品!但我认为m69的评论是正确的:我认为没有办法在不出现矛盾的情况下处理每一种可能的情况。因为任何彩票都是一种机会游戏,你无法在最后一天做出任何明确的预测,特别是当你有未知数量的人进来时。利息期内收入的分配情况。这是我的一个想法,根据最后一段时间调整获胜机会。