按照去年的惯例,方舟今年春节的时候也整了个红包盲盒。

比起去年简单粗暴的直接送,今年的盲盒实际上增加了两层隐性的保底机制:第一层是每天有两次机会而非一次,两次尝试取收益更高的结果;第二层是如果不幸成为了开出小红包的天选之人,第二天追加一次开包机会。

这种保底机制使得在今年的活动里玩家几乎不可能吃到最大的那层低保(8.025×10^31分之1),但是也使得用纯数学方式计算期望变得极其复杂。但是作为一个高数挂过一次的人我也不可能硬算啦……因此这次我使用暴力美学,用计算机跑他个几百万次,跑出来的结论就可以近似看作期望了。顺便为了测试一下 B 站新搞的代码块好不好用,我这次在文中把代码贴出来试试看。

1. 基础档位

首先可以看出玉有六个档位:2/3/4/5/6/800。可以用 2.5 种方式确定档位:设置好每个档位对应的玉的数量,对档位进行随机,随后将档位换算成对应玉的数量;直接对六个玉的数量进行随机抽取;或者对 2-8 进行随机,如果出现 7 则舍去该结果再次随机直到出现到几个数字中的一个为止,最后再将结果乘以 100。第一和二种方式本质上没什么区别,但第三种因为玉的数量没有 700 这个档位,这么做的话稍微有点点傻……

我选择的是第一种方式,用字典记录六个档位对应的奖励,然后对档位进行随机抽取。

2. 流程

每一天的流程很简单:开第一个包→开第二个包→根据前一天的开包情况决定有没有第三个包→取最大值→进入下一天。

但是实现“开第三个包”的方式有很多。最笨的实现当然可以根据鹰语的描述,用 400 与前一天的结果进行比较来决定第三个包是否存在,但是我选择了一种对人类比较友好的方式:立一个“需要抽第三次”的 flag,该 flag 在第一天的默认值是 False,在随后每天两次抽取结束后将会检查 flag 的状态,如果为真,则抽取第三次;如果为价,则认为第三次抽取到的玉数量为 0。执行完这一分枝后将再次判断今天的收获,如果小于 400,则将 flag 反转为真,反之则翻转为假,进入第二天。

代码如下:

3. 计算期望并输出

计算期望就是总共获得的玉除以总尝试次数这个没什么好说的,主要核心在怎么写流程……因此直接上代码。

4. 输出每次尝试获得的玉总数和对应频数

在脚本的一开始我定义了一个名为all_results的空列表来存储每次尝试(跑完 14 天后的总数)的结果。在 Python 当中可以直接调用min和max函数对整个列表中的数据进行取最大值和最小值操作,也可以在导入 collections.Counter 模组之后很方便的统计频数。(注意:Counter()的结果不能直接拿来用)

因为我需要计算频数,所以我需要这个列表。如果没有这个需求的话,直接存储上一次尝试的结果,然后把这一次尝试的结果和上一次进行两两比较,然后舍弃掉不要的那个结果。这样可以占用更少的系统资源。(但是都用 python 了……)

因为我的 python3.9 好像装不上 matplotlib,我也懒得折腾,所以就把文件导出成了 csv 之后扔进了 SPSS。

5. 完整代码和结果

把其他框架部分补充完整之后,试着跑他个十遍的一百万次。

我也尝试了一下跑一亿次,好家伙给我跑了一个小时……

把解释器换成 pypy 之后,总运行时间得到了惊人的提升。

就当我直呼pypy yes的时候我发现哪里不对劲,仔细一看发现小数点后的结果全被舍掉了……

pypy:别扯什么准确了,你就说我算得快不快吧!

但是至少从这一亿多次结果可以看出来,想要吃到 2800 的天选保底,难度还真挺大……

像极了大学期末考老师拼命捞人的样子。

代码全文如下:

用python求期望_用Python计算明日方舟2021龙门幸运墙期望相关推荐

  1. python求雅可比矩阵_用Python计算雅可比矩阵

    Jacobian仅为向量值函数定义.不能使用填充有常数的数组来计算雅可比:必须知道基本函数及其偏导数,或它们的数值近似值.当你认为一个常数(关于某事物)的(偏)导数是0时,这是显而易见的. 在Pyth ...

  2. python求雅可比矩阵_在Python中计算神经网络的雅可比矩阵

    通常,神经网络是一个多变量,矢量值函数,如下所示: 函数f有一些参数θ(神经网络的权重),它将一个N维向量x(即猫图片的N像素)映射到一个m维矢量(例如,x属于M个不同类别中的每个类别的概率): 在训 ...

  3. python求协方差矩阵_用numpy计算协方差(covariance)

    numpy.cov函数计算协方差(covariance),不过函数返回的是一个对称矩阵.协方差的数学定义如下: 协方差(covariance) numpy.cov函数在输入1D数据的时候,等于是在计算 ...

  4. python求完全平方数_【Python】【demo实验6】【练习实例】【完全平方数相关】

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...

  5. python求协方差矩阵_协方差矩阵python实现

    当你有一个数据集,每一条数据都M种属性,然后你想知道M种属性对数据集的影响的时候.你需要用到协方差矩阵. 求协方差矩阵之前请一定要知道协方差矩阵是干嘛的,是表示属性之间关系的矩阵,协方差矩阵的规模只与 ...

  6. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  7. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  8. python长度多少_用Python求最长子串长度快速版

    哈喽大家好,周二也是令人愉快的一天啊,今天天气不错,坐在窗户旁边边晒太阳边写文章,再泡杯热茶,真是舒服美好,废话不多说,今天说一下Python求最长子串长度,希望对大家有作用,raksmart服务器. ...

  9. python惰性求值_让Python中类的属性具有惰性求值的能力

    起步 我们希望将一个只读的属性定义为 property 属性方法,只有在访问它时才进行计算,但是,又希望把计算出的值缓存起来,不要每次访问它时都重新计算. 解决方案 定义一个惰性属性最有效的方法就是利 ...

最新文章

  1. 计算机财务应用实验心得,计算机会计实习心得-20210628124643.doc-原创力文档
  2. Centos 7 冗余备份磁盘配置介绍
  3. Lync Server 2010迁移至Lync Server 2013部署系列 Part2:部署后端主服务器
  4. 理解LinkedHashMap
  5. ofbiz中的数据模型
  6. node.js——麻将算法(七)简易版麻将出牌AI2.0
  7. 记一次面试过程中的Python编程题
  8. 解决AndroidStudio更新后在 Building gradle project info 一直卡住
  9. GIT回滚master分支到指定tag版本 并提交远程仓库
  10. BZOJ3757 苹果树
  11. Adobe Flash Player30.0.0.113离线安装包
  12. 漫过花园洋房里的浓烟
  13. spss java vm_如何解决spss无法创建java虚拟机的问题
  14. static、static inline、entern inline
  15. 类微信卡包应用实现(附源码)
  16. uni-app学习(四):带有下划线的标签选择
  17. Linux文件类型与属性
  18. 阿里云ACP ACE认证考试重要事项
  19. 微信 qq微博分享功能
  20. Introduce Python to data sience/Python 在数据科学中的应用

热门文章

  1. 手机通讯录c语言导入手机软件,有什么软件能快速将手机通讯录的联系人传到另一个手机上...
  2. linux 重新扫描pci设备,linux重新扫描pci总线
  3. mysql 5.5 外键_MySQL 5.5添加外键失败,错误[HY000] [150]和[HY000] [1005]
  4. 怎么关闭虚拟机服务器,ESXI | 命令行 | 强行关闭虚拟机进程 | 无法远程访问服务器...
  5. Java去除字符串最前面一个字符和最后面一个字符
  6. 微信公众号JSSDK中的wx.ready()和wx.error()问题
  7. 往数组里添加键值对_框架都是花哨的东西!js才是根基,分享一下给原生js数组的操作...
  8. css的类选择器#和id选择器.
  9. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  10. vue 中provide的用法_浅谈vue中provide和inject 用法