微信平台抽奖算法总结-再也不用怕奖品被提前抢光

前言

但凡商户搞点营销活动,为了能触达更多的顾客,来点儿抽奖的把戏,应该是极好的,什么“刮刮乐”、“砸金蛋”、“大转盘”等等,换汤不换药,屡试不爽。从微客多营销平台各种活动的使用情况也能看出,抽奖活动一直是商户用得最多的线上活动,正所谓无利不起早,给点“花蜜”犒劳下“蜜蜂”也是应该的。

需求分析

那么问题来了,发奖机制怎么玩?作为一个服务商户的营销平台,怎样将商户配置的奖品发出去才能起到比较好的效果呢?

先来看目标,什么是比较好的效果,也就是用户(商户)的需求是什么:

  • 抽奖活动期间奖品数量是固定的
  • 稀有的奖品尽量靠后被抽中
  • 物尽其用,奖品不希望有剩余
  • 每个奖品可以设置被抽中的概率

场景模拟

为了讨论方便,我们先把场景假设一下:

抽奖活动时间:

00:00:00-23:59:59

奖品设置:

奖品级别 奖品名称 奖品数量
一等奖 A 2
二等奖 B 3
三等奖 C 4

具体分析

第一种能想到的做法就是给每种奖品设置中奖概率,每次按设置好的中奖概率派奖,但是问题又来了:

奖品数量固定,但是参与抽奖的人数不可预知,根本无法控制奖品的消耗速度,如果概率设置高了,抽奖者一拥而上奖品很快就没了,设置低了,奖品可能到最后都发不完。另外,概率这个偏技术的术语用户理解起来肯定五花八门,使用时沟通成本非常高。

而实际上“每个奖品可以设置被抽中的概率”是个十分模糊的说法,说它模糊,主要是因为你并不知道这个设置的概率用在什么地方,这些概率设置需要满足什么条件,总样本数量(总抽奖次数)是多少。

所以最好的做法应该是用户不必关心所谓的“奖品被抽中的概率”,只关注前三个预期效果即可。

经过分析,我们发现,要达到用户上面的那三个效果,只要奖品在活动期间陆续被抽走即可,那能不能给每件奖品设置一个允许被抽走的时间呢?对!如果控制好每件奖品的发放时间点,再安排好各类奖品的发放顺序,大奖不会一开始就抽走,直到活动最后阶段都能保证有奖。

具体设计

顺着这个想法,我们来看具体的设计:

将奖品均匀地埋在整个活动时间(3600*24=86400秒)里,如上面假设场景,一共有9个奖品,则把活动时间均匀的分成9份

以奖品剩余数量作为权重,陆续随机选择每个时间段里的奖品类型(颜色对应的奖品见上表)

在每个时间段里随机选择奖品的“释放”时间点,一是为了均匀,二是避免直接暴露精确的时间点

1

releaseTime(n)=startTime+(n-1)× ?t+random(?t)

实现方案

说完思路,我们再看实现:在奖品释放时间点之后的抽奖用户就有机会(这个概率可配置,如100%或者80%)拿到该时间段的奖品,如果奖品未被抽走,将继续等待抽奖者的到来。

思路一

直观的做法是建立三张表

t_award_batch(奖品描述表,用于记录各种奖品的配置信息),

ID 名称(name) 奖品总量(amount)
1 A 2
2 B 3
3 C 4

t_award_pool(奖池表,用于生成每一次奖品释放的时间点),

ID 奖品ID(award_id) 释放时间(release_time) 剩余数(balance)
1 3 1:03:27 0
2 2 3:15:13 1
3 3 5:29:57 1
4 2 9:35:34 1
5 1 12:57:20 1
6 2 13:47:03 1
7 3 17:31:50 1
8 1 18:13:26 1
9 3 22:28:40 1

t_record(抽奖记录表,用于记录每次抽奖者的抽奖记录)

ID 奖品ID(award_id) 中奖时间(hit_time) 用户ID(owner_id)
1 3 1:03:45 peteryan

活动开始前,根据t_award_batch中的奖品配置信息,初始化t_award_pool中的数据,把每种奖品的释放时间初始化好,用户来抽奖时,根据当前时间在t_award_pool表中的查询到一条已经释放而且未被抽掉的奖品

1

select id from t_award_pool where release_time <= now() and balance > 0 limit 1 ;

查询到后对其进行更新,如果被他人抢走,则未中奖

1

update t_award_pool set balance = balance – 1 where id = #{id} balance > 0 ;

同时留下抽奖情况到t_record中。

思路二

在思路一中,为了方便抽奖时判断当前是否有可中奖品,进行了初始化每件奖品的释放时间,当奖品数量比较小的时候,情况还好,对于奖品数非常多的时候,抽奖的查询耗时会增加,初始化奖池也是耗时的动作,是否可以不依赖这个表之间通过实时计算判断当前是否有奖品释放。

在t_award_batch表中添加两个字段,奖品总剩余量balance和上一次中奖时间last_update_time。

ID 名称(name) 奖品总量(amount) 奖品余量(balance) 更新时间(last_update_time)
1 A 2 2 1:03:45
2 B 3 3 0:00:00
3 C 4 3 0:00:00

这样具体实现上仅需要依赖奖品配置信息即可,示例代码如下(点击图片全屏查看):

其中awardBatch表示一类奖品,如上表中提到的一等奖。上面代码中,随机选出下一个待释放的奖品逻辑如下:

通过这套发奖机制,很好地满足了营销商户的目标,同时减少了对复杂概率计算的纠结,再也不用担心奖品被提前抢光了。

时间: 2024-10-09 12:08:26

微信平台抽奖算法总结-再也不用怕奖品被提前抢光的相关文章

GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码

GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction 升讯威微信营销系统开发实践系列升讯威微信营销系统开发实践:(1)功能设计与架构设计升讯威微信营销系统开发实践:(2)中控服务器的设计 GitHub 开源GitHub开源:升讯威微信营销系统开发实践:微信接口的 .NET 封装GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码 本项目开源了全部工程和代码,可直接编译后进行部署运行.   微信第三方平台的部署方法是需要

微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码

微信平台不解释了,如果不了解的百度一下下,如果不会用微信,请自宫,光盘重启电脑,打开CMD输入Format C:.网上有很多针对企业级的高级定制ASPX开发,写得草草了事,很多男人干事都草草了事,这可不行,您不懂小伙伴们的心情.初学者总是希望无码,即不要太多代码就能运行起来的示例,本人保证贴出来的代码全是可运行的,代码虽然有点干瘪,但给你想象和改造的空间很大,感觉对于微信平台是真正的互联网技术改造传统行业,为什么? 找度大娘(我的QQ26959368问我,别发邮件收不到!). 本代码实现了接入微

沐雪微信平台---企业微信营销专家

上海沐雪网络科技有限公司打造一个专门针对微信公众账号提供营销推广服务的第三方平台-沐雪微信http://uweixin.cn.主要功能是针对微信商家公众号提供与众不同的.有针对性的营销推广服务.通过沐雪微信平台,用户可以轻松管理自己的微信各类信息,对微信公众账号进行维护.开展智能机器人.在线发优惠劵.抽奖.刮奖.派发会员卡.打造微官网.开启微团购等多种活动,对微信营销实现有效监控,极大扩展潜在客户群和实现企业的运营目标.沐雪微信平台很好的弥补了微信公众平台本身功能不足.针对性不强.交互不便利的问

还在做代理?不如自己搭建微信平台

我国电子商务面临的问题,淘宝退出百度无疑是一个遗憾.当在网上购物时,用户面临的一个很大的问题就是如何在众多的网站找到自己想要的物品,并以最低的价格买到.自从淘宝退出百度,建立自己的搜索引擎后,广大消费者再也不能再百度里面直接搜索有关淘宝的商品了,这无疑是一个遗憾. 现在又出现了微商城,还没有被太多人所熟知,但是微信营销已经以非常快的速度在吞噬这整个市场,微商城.商家入驻,微门店,微餐饮,微酒店,微教育,微物业,微医疗,微信墙,微花店,微美容,微生活等很多功能,微酷WeiKuCMS网站是多功能微信

水滴微信平台bug

最近在学习如何做微信营销,发现了一款非常好用的工具:水滴微信平台 它可以通过添加插件方式在微信里面组织很多活动,比如抽奖.送积分.用户和平台互动的管理等,非常方便,但最近为了给自己新的订阅号注册账号时候发现了一个bug. 现在来大致描述一下: 1.在此账号注册以后需要在微信公众平台的开发者中心->设置URL(服务器地址),Token(令牌),自动生成EncodingAESKey,设置完成以后到水滴平台点击验证按钮: 2.点击验证后发现错误: 3.通过水滴客服发现是URL在水滴平台上写错了,呵呵!

【转】非常有用的360安全/360极速浏览器扩展,再也不用眼红谷歌了

写在前面:下面整理的扩展都不是来自360应用市场的,而是来自谷歌应用市场的,但是360安全/极速浏览器可以安全并正常使用.谷歌应用市场的扩展明显是比360的更丰富的.            现在谷歌chrome浏览器丰富的扩展更是给我们在浏览网页的同时带来了更多的便利,娱乐,新闻,天气,体育,开发者工具方方面面的强大扩展插件应有尽有. 你是不是在看在线视频时看着越来越长的片头广告郁闷不已,而且每一段视频的片头广告还都一样,谷歌扩展就有完全去掉片头与片中的广告,让你看片时完全不受烦人广告的打扰.顺

微信营销系统(第三方微信平台)github 开源

升讯威微信营销系统(微信第三方平台) 在线体验:http://wxcm.eeipo.cn/开源地址:https://github.com/iccb1013/Sheng.WeixinConstruction说明:有问题上QQ群交流 QQ群:173459027 作者最初的期望是实现一个微信云平台,类似于微盟,只需要商家扫码绑定即可提供整套的营销功能.我的定位是专门服务于线下商家,例如电影院.商业中心.各类线下门店等,线下商家的一些业务场景和业务流程是比较特殊的,和纯现上的公众号运营不尽相同. 这是我

[转帖]再也不用担心学不会K8S!17个K8S初学者必须掌握的知识点

再也不用担心学不会K8S!17个K8S初学者必须掌握的知识点 https://zhuanlan.zhihu.com/p/94656981 Kubernetes是一个可移植.可扩展的开源平台,用于管理容器化的工作负载和服务,有助于声明式配置和自动化.目前,Kubernetes正在以强劲的势头持续发展,其相关的生态也在不断完善.本文中,我们列出了所有Kubernetes入门者对于部署和管理Kubernetes容器不得不关注的17个方面. 1. 设置Kubernetes集群 Kubernetes有多个

微信平台开发之利用本地环境加新花生壳解释做测试环境

准备工作: 1.搭建本地PHP开发环境. 2.注册并安装新花生壳. 3.注册微信公众平台帐号. 第一步:搭建本地PHP开发环境,案例使用wamp集成环境. 下载并安装集成环境确保集成环境正常运行. 第二步:注册并安装新花生壳,过程(略). 具体教程可查看http://www.oray.com/ 第三步:对开发环境做解释. 登陆花生壳做解释: 开放wamp的外部访问:教程http://hi.baidu.com/aubbll/item/8bd5a52253d3ecd7a517b685 至此,外网就可