关于年会抢红包游戏的一个思考

1. 游戏介绍

0x1:游戏规则

该游戏名叫红包接龙,规则如下:

年会会场内所有人都通过钉钉群的方式参与该游戏,会场人数一般为200~300人(大部分能时候是超过红包最大拆分份数):

1. 由老板发出第一个种子红包,金额 b = 500,红包分成100份,每份金额是随机的,红包发到钉钉群后,大家可以由两种选择:抢 or 不抢;
2. 如果选择不抢,则本轮无损失也没有收益。
3. 如果选择了抢,还需要拼手速,因为大部分时候选择抢的同学个数依然大于红包最大拆分份数;
4. 所有红包拆分份数都被抢完之后,由本轮抢的最大金额的同学发下轮的红包,每轮的红包金额需要在之前的基础上增加200;
5. 游戏循环进行,直到达到5000元上限结束;

0x2:游戏策略分析

1. 伯努利实验抽象建模

先抛开影响是否能抢到的网速问题,每次抢红包只有两种结果:

p=0.99:不是抢到最大的那份红包;
p=0.01:抢到最大的那份红包;

按照伯努利实验的三准则,这个游戏可以抽象为伯努利实验。因此我们可以二项分布或者泊松分布来对是否抢到那份最大红包进行数学建模。

但是问题没有这么简单,玩家还需要思考一个最重要的问题,这个游戏有”前景“吗?我们知道,赌博是一个”没有前景“的游戏,这是从数学期望的角度分析得到的。

2. 基于数学期望分析游戏的损失风险

从收益的角度来看,单次红包游戏的收益期望为:

(抢到非最大那份红包的概率 * 收益 - 抢到最大那份红包的概率 * 损失 )* 本轮的红包金额 = (99 / 100 * 1 / 100 - 1 / 100)* (500 + 200n)= 1 / 10000 * (500 + 200n)

因为红包是被分成100份的,因此收益要 * 1/100;同时,随着轮数的增大,越到后面,n越多,本轮的红包金额就越多。

从上述公式可以看到,从期望角度来看,玩的越多,损失的就越多。

但是!!有一点要注意,就是函数的导数趋势是很低的,我们将公式在图像中表示:

换句话说,这个公式主要受到 1/10000 的影响,后面的乘积因子受到了压制。再换一个通俗的说法就是,玩1次和玩100次,最终的损失期望在绝对数值上不会差很多(0.07 ~ 2.05),尽管翻了100倍。

所以,从期望的角度看,多玩几轮损失也还好,当然不能无限扩大n次数,毕竟从期望上看,玩的越多,亏的就越多,当满足大数定理的时候,亏就成为必然的了。

3. 基于几何分布的角度分析游戏的损失风险

从上个小节分析数学期望的过程中,我们其实发现这个游戏隐藏了一个很大的策略前提,在这场游戏中,只要抽中一次最大的红包份,基本上整场游戏就是亏本了,即一次失败,就前功尽弃。

所以,我们要分析的是,玩的游戏轮数和首次出现负结果的概率的关系。显然,几何分布是最适合对这个场景进行数学建模的工具。

几何分布(Geometric distribution)是离散型概率分布。它定义为:在n次伯努利试验中,试验k次才得到第一次成功的机率。详细地说,是:前k-1次皆失败,第k次成功的概率。 

这里我们定义n为参与游戏的次数,成功概率定义为抽中最大红包的概率。

p = 1/100:出现负结果,即抽中最大红包;
k=随机变量,表示参与游戏的次数;

P(X = k)= ,k=1,2,3...N.

这个函数是一个单调递减的函数,最大值是当k=1时,P(x=1)= 0.01,随着x的增加,概率逐渐减小。

通俗地说就是,随着你玩的次数k增多,”玩了k次才碰到前功尽弃的最大红包的概率是逐渐下降的“,玩的次数越多,危险也就越大,玩的次数越少,危险越小,最小的危险就是只玩1次,风险为1%。

4. 基于泊松分布的角度分析游戏的收益风险

前两小节分析了游戏的风险,接下来来分析下游戏的收益前景。

我们将问题转化为泊松分布的框架内进行思考和计算:

1. n:游戏的次数;
2. p=99/100:盈利的概率;
3. λ = np = 0.99n:泊松分布参数;

从上图可以看到,n越大,λ也就越大,整体泊松分布的均值中心就越大,收益的整体期望也就越大。

所以从这个角度来说,单纯看抢到红包的收益,肯定是玩的次数越多,收益越多。

0x3:从极值角度得到一个理论最优策略

如果我们将收益函数和损失函数整合起来,得到一个最终的成果函数,对其求极值,会发现最优点是k=1的时候,因为越往后玩,损失的整体风险是不断提高的。

也就说,只玩一次就收手!!

这可以看成是一个理论最优值,可惜这不符合我们的”赌徒心理“,而且在实际生活中,我们也没必要这么保守,毕竟红包也没几个钱,就算真的抽中了要发,损失也还好,这种情况下,人们常常倾向于冒一定的风险,去获得更高的收益。但问题是具体要玩多少次呢?

0x4:画出泊松分布累计概率分布图

画出泊松分布的概率分布图:

# -*- coding:utf-8 -*-

from scipy.stats import poisson
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

N = 20
p = 0.99
# mu = N * p
data = poisson.rvs(mu=p*N, loc=0, size=N)
print "Mean: %f" % np.mean(data)
print "SD: %f" % np.std(data, ddof=1)

plt.figure()
plt.hist(data, bins=1, normed=True, histtype=‘stepfilled‘)
plt.xlim(0, N * 1)
plt.xlabel("Rounds")
plt.title("Rea Packge Game")
plt.show()

从图中可以看出,13次左右的时候(其实也就是靠近期望均值中心的次数),我们已经能够获得”大部分“的收益了,再往后的收益成本比就会越来越低。而且,次数越多,风险也在不断提高。

因此,选择参与13次游戏,是一个比较明智的选择。

同时,我们也可以计算一下此时的损失风险:

1. P(参与了13次,一次都没有抽中最大红包)= 0.99^13 = 0.877521022999:概率还是相比比较高的;
2. E(损失)=  1 / 10000 * (500 + 200 * 13)= 0.31;

2. 红包游戏该怎么玩呢?

经过上面的分析,读者朋友可能要蒙了,这个游戏看起来是一个风险与收益并存的游戏,那我们到底应该采取什么样的策略呢?是尽量多的参与抢,还是尽量少的参与抢呢?

首先一点笔者要强调,世界上的所有事情都这样的,没有非黑即白的分界线,我们所要做的是,在黑白之间的灰色地带,找到一个最佳的平衡点,在尽可能少的损失情况下,得到尽可能多的收益。另一方面,每个人对风险的承受能力都是不同的,有的人可以接受高风险高回报,有的人是低风险低回报。

贝叶斯推断要做的就是将所有未知因素柔和起来,得出一个风险与收益的综合概率分布函数,接下来就是推断的环节,至于如何进行决策,就看使用者自己的策略和选择了。

0x1:最终的策略

这里笔者给出几点建设性建议:

1. 首先,根据大老板给出的种子金额以及封顶金额进行一个估算,得到 N 的最大值,例如本文的20;
2. 然后,计算【0,N】之间的95%正态区间的负区间,也就是左区间的整数MIN值,例如本文的13;
3. 将13作为我们整晚游戏的参与上限,同时建立止损机制,如果在13轮内都没有抽中最大红包,则继续,但是最多只参与13次,如果在这之前不小心抽总了一次最大红包,立即停止,及时止损;

笔者需要强调的是,上述的策略是一种偏向保守的策略,即:在尽可能多获得收益情况下,尽可能少损失

在实际的生活中,我们可以继续提高风险,来获得更高的收益,这取决于你对风险的承受能力,其实贝叶斯推断的核心思想也就在这里,损失的函数的计算不只是纯数学上的计算,对风险的承受能力也应该被考虑在损失函数的计算之中。

关于这个思想的讨论,读者朋友可以参阅我另一篇博文

that‘s it!!

原文地址:https://www.cnblogs.com/LittleHann/p/10427132.html

时间: 2024-10-09 09:45:47

关于年会抢红包游戏的一个思考的相关文章

游戏的发展~游戏本质与思考摘录

没有电子游戏的时代,借助手头工具,为人们制造一些动脑筋的小玩意.小谜题,就是几千年以来的传统棋牌游戏了.(举例:围棋.国际象棋.Mancala.etc) 随机因素让人脸红心跳,于是赌博类游戏走入了人类的历史(Knucklebones, 各种赌场游戏) 奥林匹克运动,把人们狩猎打仗时的技能和活动变成了单纯为了竞技和较量的体育活动,体育游戏因此诞生了(足球篮球长跑射箭标枪……太多了大家都懂) 电脑诞生后,电子游戏以各种新的方式继续给人制造着谜题.实际上是过去非电子类谜题游戏的延续(Pong, Spa

unity3d游戏开发要思考的问题

代码驱动带来的技术题 游戏碎片化.U3D 引擎有个很有力的特色,就是实时编译运行.这意味着无论在任何时候,只要按下运行图标,当前的场景就会进入可执行状态.这导致了游戏在开发的过程中经常陷入一种不应当的自信状态.同时也导致了游戏内容长期处在碎片状态下,并低估游戏功能整合时可能遇到的困难. 资源管理是 U3D 引擎的一个难点.U3D 的资源管理系统因为跨平台的缘故和操作系统的文件系统是脱钩的,需要熟练的掌握 Resources 目录和 Assetbundle 的技术才能灵活的控制游戏中的资源使用情况

U3D游戏开发要思考的问题

狗刨学习网--欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 代码驱动带来的技术题 游戏碎片化.U3D 引擎有个很有力的特色,就是实时编译运行.这意味着无论在任何时候,只要按下运行图标,当前的场景就会进入可执行状态.这导致了游戏在开发的过程中经常陷入一种不应当的自信状态.同时也导致了游戏内容长期处在碎片状态下,并低估游戏功能整合时可能遇到的困

一个思考Exlucas时的错误思路和对CRT的一些理解

一个思考Exlucas时的错误思路和对CRT的一些理解 小引 此文章是记录一些学习 \(Exlucas\) 时纠结的问题. 问题的原因是对 \(CRT\) 的理解不通彻,在此做出一些探讨. 正文 \(Exlucas\) 的模板问题是求: \[ C^{n}_{m}\quad(mod\;p) \] 其中, \(n\) , \(m\) 很大,不能够直接求阶乘.\(p\) 大小可接受但是不保证是质数. 扩展的思路是把 \(p\) 进行质因数分解,然后分别模分解后的 \(p_i^k\) 再用 \(CRT\

【WIP2D引擎】那些年对游戏对象的思考

WIP源代码: Github OSC镜像 对象系统以对象为中心,对象系统的最基本设计策略是基于组件的设计.对象系统将尽量避免使用继承方式来拓展游戏对象,恰当的使用Mix-in来来最属性做拓展,单个属性可以适当使用继承.每个游戏对象都是由属性组装起来的. 组件分为两种,c++组件和脚本组件,脚本组件是在脚本中定义的.一般来讲某些脚本组件是 c++组建的封装,这时仅仅是吧 c++组件实例的指针关联到脚本中,所有通信都由此指针链接. 在 c++中当前的主要对象就是 sprite,这个 sprite 在

cocos2d_x_06_游戏_一个都不能死

最终效果图: 游戏主场景 // // HeroScene.h // 01_cocos2d-x // // Created by beyond on 14-10-6. // // #ifndef __HeroScene_SCENE_H__ #define __HeroScene_SCENE_H__ #include "cocos2d.h" #include "GameCtrl.h" // 继承自 有颜色的Layer class HeroScene : public c

2015年移动游戏CP发展思考

当前快销产品CP模式和问题: 产品方面: 从国内找最挣钱.最火.最有潜力的做差异化微创新. 从国外排行榜找榜样扒皮复制. 没有有益的版权,只能盗版或走大众题材 不敢创新.避免创新 研发方面: 在一定的简单技术积累上快速换皮复制,试图切入空白市场 人力规模效应或极限单兵 没有科学的研发管理理念和实践 不敢做基础研发,避免做基础研发 发行方面: 自发行没能力,或完全不敢想,或头破血流死产品死团队 求发行商代理,期望靠代理费救命 对海外不熟悉,不敢面向海外市场 公司方面: 缺乏合理的股权.组织结构规划

cocos2d-x路~使得第一个字游戏(一个)

前言 去年的回忆.另外,在第三.他们开发了他们的第一场比赛四月,它是游戏.所以我决定走上独立开发的道路上.了.第一款游戏达到它应有的盈利水平.然而这款游戏开发后的时间里.都没再取得还有一款令自己惬意的作品. 直到今年的三.四月,我使用cocos2d-x开发出我的第一款文字游戏. 第一款游戏的传送门 第一款文字游戏的传送门 自从使用cocos2d-x后.发现自己爱上了这个引擎. 它也许还不够强大和完好.可是使用它.能够体验编码的乐趣.还能够为我重拾C++这门技术(究竟对C++有多么的执着啊),还能

游戏框架再思考

本人在游戏的时候,是按照类型划分去规划对象设计的.但是最近的一个项目碰到了需要按照实例去划分的情况.拿卡牌游戏来做比喻的话,就是一个是分成了武将卡.装备卡.阵型卡等等,另一种思路是直接分成张飞卡.关羽卡.刘备卡…… 这样的思路不同照成的做法上的不同超过了我的预料.类型划分思路会把卡看成一个控件,和按钮.图片之类的控件一样,控件只提供功能,不实现逻辑,提供的接口类似于setImage.setLevel这样的函数.而按照实例去划分的思路则是把卡当成一个完整对象来看,就是标准的面向对象编程课上教的那样