从代码角度分析动森大头菜价格走势

首先感谢进行解包的大佬Ninji。本文只是对解包代码进行粗略的解读并加以分析。

解包代码大体可分为三个阶段,分别是随机数生成阶段、价格预测阶段和价格计算阶段。

随机数生成阶段–梅森旋转算法

梅森旋转算法,Mersenne twister,简写为MT。在C++11中的随机数库中,有一个随机数生成引擎函数 std::mt19937,这里的mt就是梅森旋转算法的简写。

明明是介绍大头菜走势的文章,怎么就突然间跑到一个算法上了呢?因为这个算法是任天堂主要使用的随机数生成算法,也是目前主流的生成随机数算法。

随机数生成算法虽然说是用来生成随机数的,但是其生成的也只不过是伪随机数。为什么说是“伪”随机数呢?相信有些计算机编程基础的同学都知道,计算机本身并不能产生随机数,只能通过一组循环节很长的数字串来伪造随机。同时,在统计学中,伪随机数的概念为“统计学伪随机性值的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,00, 01, 10, 11 四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类”一眼看上去“是随机的。

拿笔者比较熟悉的C++举例,其库函数中的rand函数,只是根据当时提供的种子计算出来的一组循环节很长的数。只要两次提供的种子是一样的,那么rand函数生成的随机数也是一样的。至于这个有多长呢?可以看rand的实现,如下图所示。

然而理想中的随机数,理应是与之前生成的数字没有任何关联,那么在计算机中对应的就是产生随机数的函数应该不需要调用任何参数(因为一旦调用了参数,其生成的随机数就与参数有关)。这点在目前计算机技术上是无法实现的。因为计算机代表的特性是有逻辑的可推理的。

好了有些说远了,梅森旋转算法是目前最普遍的优质随机数生成算法。梅森旋转算法使用的循环节是 219937-1。这个数字叫梅森素数。梅森旋转算法之所以是优质随机数生成算法,是因为它的循环节是梅森素数,在一定程度下能保证生成的数字平均分布。

介绍完梅森之后开始简单讲讲旋转。这里笔者思考了很久如何展开,最后还是决定简单的略过。如果详细的对其讲解,其文字量可以完全单开另一篇文章进行介绍,有失偏颇。这里只简简单单概述下旋转算法的大致流程:

  • 第一阶段:初始化,获得基础的梅森旋转链
  • 第二阶段:对于旋转链进行旋转算法
  • 第三阶段:对于旋转算法所得到的结果进行处理

如果各位看官有兴趣对梅森旋转算法进行深入的了解,笔者这里推荐几个当时自己觉得介绍的比较详细的博文链接:

梅森旋转算法Wiki

谈谈梅森旋转:算法及其爆破

这里不建议读者去查阅相关的中文Wiki,因为相对于英文Wiki,中文版Wiki这部分内容少得太多。

上图即大头菜随机数算法的第一阶段,初始化梅森旋转链。

上图为大头菜随机数算法的第二阶段,开始对旋转链进行旋转算法。这里任天堂旋转的位数和原梅森旋转算法有些出入,应该是任天堂的算法工程师进行了一些针对的优化。

上图为大头菜随机数算法的最后一步,使用之前随机数算法生成随机的价格比率。后面计算部分就使用这里生成的随机价格比率乘上初始的购入大头菜价格,得到最终的售价。


价格预测阶段

这作动森相比于上一作,大头菜价格增加了一个变数,就是你上周的走势会影响这周的走势。这一点我查阅了很多3DS论坛在17年前后发表的有关价格预测的帖子,那些帖子只提及了比例,而没有上周的走势因素。

在这作动森火了之后,有很多营销号和不良游戏攻略制作者直接用上一作的大头菜价格预测规则来预测本作的走势,这里笔者需要提醒下大家,如果你当前使用的价格预测器没有询问你上一周走势的话,最好还是换一个带有上一周走势因素的计算器吧。

简单解释下代码。

第一行是随机生成周日上午的曹卖售价。第二行生成的是你这周大头菜的价格bias。根据你生成的这个bias,确定你这周的价格走势。

然后分析下每个case代表的含义。

case0:

这里对应的走势是随机波形,价格变化为:

高 -> 低 -> 高 -> 低 -> 高

价格频繁的上下浮动,即使是价格突然下降也有可能立马回升。

case1:

这里对应的走势是四期型,前几日价格会持续下跌,接着会在某一天突然价格上涨,并在一天后达到峰值,然后逐渐降低。

case2:

这里对应的走势是递减型,价格会持续下跌。

case3:

这里对应的走势是三期型,前几日价格会持续下跌,接着在某一天突然上涨。

从代码上可以看出来,无论你上周是怎样的走势,这周为持续下跌型的概率最高只为20%。


价格计算阶段

针对波形进行计算

从代码可知,一旦你的走势确认为波形,那你需要注意当你的售价为买价的1.4倍左右时,就是出手的好时机了,因为再高也不会高于这个价了。

针对四期型计算

从代码可知,如果你的走势是四期型,那么你就可以适当的赌一把,因为四期型的最高价可以高达买入价的6倍左右。并且从代码中可以看出来,最高价出现的日子是价格开始回升的第三次开盘,这里是重点,千万不要错过这个时间段。

针对递减型计算

这部分代码没什么好讲的,很简单,比率持续下降。

这里要提醒大家,递减型和四期型的前期走势特别相似,但是出于四期型的5次价格抬高,如果在周四下午还未发现价格回升,这里建议立即去好友的岛上进行大头菜的售出。因为此时已经确定为递减型。

换句话说,如果在周四下午时价格走势还是逐次降低的话,抓紧去好友岛上抛售吧,你的大头菜熔断了。

针对三期形计算

从代码中可以看出,三期型是最为复杂的一种变化,它首先会持续走低,然后在某一天开始回暖,然后打到峰值。达到峰值后重新开始持续走低。


结语

从整体上看,大头菜价格预测还是相对简单的,网上那些预测工具也是使用你的上一周走势情况,加上你的买入价和一些售价进行反计算,计算出预测阶段时产生的随机bias。当然想完全准确的预测出bias基本上是不可能的,只能给你提供一个大致的范围。

所以建议玩家在心里设置一个大头菜价格阈值,如果高于这个阈值就卖了吧。毕竟股市有风险,投资需谨慎。

感谢攻略组的解包人员为玩家提供出准确的游戏数据。世上哪有那么多好用的游戏攻略,只不过是在你看不见的地方有大佬在替你负重前行。任何游戏的攻略数据都是如此,希望广大玩家在网上查找到有用的攻略时在心里默默感谢一下攻略组解包玩家的默默付出。

最后,本文相关代码见此