# stepN中4种鞋型占比分析

By [rbtree](https://paragraph.com/@rbtree) · 2022-05-19

---

我们可以在官方的白皮书中查到，mint鞋子的时候，生成各种鞋子的概率。

[https://whitepaper.stepn.com/game-fi-elements/shoe-minting](https://whitepaper.stepn.com/game-fi-elements/shoe-minting)

![](https://storage.googleapis.com/papyrus_images/6d8d8637c78c6649d83bd69161d47eb0d2f07f5bb77dab24fa7cf68eb5aab651.png)

按照上面的概率规则，如果每次mint的时候，大家都是任选2双鞋，那么一代一代地递推下去，最终每种鞋子的比例会是多少呢？

首先，我们假定第0代鞋子中，四种鞋子的概率分别是pW0, pJ0, pR0, pT0。然后我们需要**随机挑选两双鞋子mint**，这里会产生上面表格里描述的10种组合，可以很容易地算出这10种组合出现的概率。

    def getPairRandom(pW0, pJ0, pR0, pT0):
        pWW = pW0 * pW0
        pWJ = 2 * pW0 * pJ0
        pWR = 2 * pW0 * pR0
        pWT = 2 * pW0 * pT0
        pJJ = pJ0 * pJ0
        pJR = 2 * pJ0 * pR0
        pJT = 2 * pJ0 * pT0
        pRR = pR0 * pR0
        pRT = 2 * pR0 * pT0
        pTT = pT0 * pT0
        return pWW, pWJ, pWR, pWT, pJJ, pJR, pJT, pRR, pRT, pTT
    

对应每一种组合，我们可以依据官方给出的概率表格来计算下一代出现每一种鞋子的概率。于是可以很容易算出下一代鞋子中各鞋型的占比。

    def nextGeneration(pW0, pJ0, pR0, pT0):
        pWW, pWJ, pWR, pWT, pJJ, pJR, pJT, pRR, pRT, pTT = getPairRandom(pW0, pJ0, pR0, pT0)
        pW1 = pWW * 0.85 + pWJ * 0.45 + pWR * 0.45 + pWT * 0.80 + pJJ * 0.06 + pJR * 0.07 + pJT * 0.06 + pRR * 0.06 + pRT * 0.06 + pTT * 0.25
        pJ1 = pWW * 0.06 + pWJ * 0.45 + pWR * 0.07 + pWT * 0.06 + pJJ * 0.85 + pJR * 0.45 + pJT * 0.80 + pRR * 0.06 + pRT * 0.06 + pTT * 0.25
        pR1 = pWW * 0.06 + pWJ * 0.07 + pWR * 0.45 + pWT * 0.06 + pJJ * 0.06 + pJR * 0.45 + pJT * 0.06 + pRR * 0.85 + pRT * 0.80 + pTT * 0.25
        pT1 = pWW * 0.03 + pWJ * 0.03 + pWR * 0.03 + pWT * 0.08 + pJJ * 0.03 + pJR * 0.03 + pJT * 0.08 + pRR * 0.03 + pRT * 0.08 + pTT * 0.25
        return pW1, pJ1, pR1, pT1
    

对上面的过程反复迭代，最终各种鞋子的比例应该会稳定在某个比例上，下面我们来计算一下。

我们不知道初始的鞋型比例，不妨假定它们都是25%。

![](https://storage.googleapis.com/papyrus_images/a531f513d8e35043b5402e939318aadf0985ed7c36a03b6f9493dd9225c7b93a.png)

![](https://storage.googleapis.com/papyrus_images/3bb77358a4292beab2e4e165a104a3ea7fd0a2f2ca4c45bb81f1d37b61509cc0.png)

可以看到，T鞋的比例很快稳定在3.35%，其他3种鞋子则稳定在32.22%。

其实，初始比例是无关紧要的，最终收敛的稳定值与之无关，我们可以对其他的初始比例做些验证。

![](https://storage.googleapis.com/papyrus_images/af67efdce2e20787db8bf19e8f3ba56188588f9a02ff591fa201e786105281bc.png)

可见，最终T鞋的比例都是3.35%，剩下的比例基本上被另外3种鞋均分。

上面假定mint的时候选取的鞋子是随机的，但实际情况可能有所偏差。mint鞋子的偏好一定会对结果有影响的。举个极端的例子，如果大家都只用T鞋mint，那么最终，4种鞋子的比例都会是25%。

我们可以看一个特例，如果大家都**只用同类型鞋子mint**，会如何呢？这个很容易计算，只需要把鞋子配对的函数改一下就行了。

    def getPairSpecific(pW0, pJ0, pR0, pT0):
        pWW = pW0
        pWJ = 0
        pWR = 0
        pWT = 0
        pJJ = pJ0
        pJR = 0
        pJT = 0
        pRR = pR0
        pRT = 0
        pTT = pT0
        return pWW, pWJ, pWR, pWT, pJJ, pJR, pJT, pRR, pRT, pTT
    

最终结果如下：

![](https://storage.googleapis.com/papyrus_images/0b3d3c6af9c096726bc0ab8b0af2a2af3eacf3190f41c9045448545e03880640.png)

![](https://storage.googleapis.com/papyrus_images/82db61910f1c437df6cf0d22ef2934c6dcebadac6b473a9fa9b6b89cd1c197e0.png)

其实和随机配对的结果很接近，只是T鞋的比例略有提高。

游戏中的鞋子如果不转出，是不会上链的，所以我们目前无法得知不同类型鞋子的真实占比情况。我们去OpenSea上看一下，不过要知道这只是全部鞋子中很小的一部分。

[https://opensea.io/collection/stepn](https://opensea.io/collection/stepn)

![](https://storage.googleapis.com/papyrus_images/d459bed8452b051a948380aec71b0e4f264f1639e7f432ec0e74dc3f283c6521.png)

W、J、R、T的占比分别为41.09%、31.82%，23.55，3.54%。可以发现W比上面算出的结果高了很多，而R比上面算出的结果小了很多？为什么呢？可能大家觉得runner不好卖，所以不太愿意用R来mint？

不管怎么说，T鞋的占比都是非常低的，只有3.5%左右。之前看到有人说，T鞋的往往都不是T鞋生的，这是当然的，因为非T鞋的数量是T鞋的30多倍，而T鞋生出T鞋的概率才只是非T鞋的8倍。

---

*Originally published on [rbtree](https://paragraph.com/@rbtree/stepn-4)*
