Results 11 comments of 一棵平衡树

其实含金量是一样的,只是几千抽的总数较少。 用旧版本的GGanalysisLite计算包计算的欧皇度和非酋度都是把玩家在同抽数下和其他玩家进行对比,看超越了多少玩家/被多少玩家超越。非酋度98%,就是理论上在你这个抽数下有2%的人比你更非。 大家觉得抽数少的含金量低,只是因为抽数少的数量多,排行榜上看不到抽的又多又非的占多数,看起来不够爽。但是对于个体来说,这样的评判标准是非常合理而且具有参考价值的。 如果想要体现抽数很高还很非,导致不容易轻易将平均抽数降回期望值这种情况,可以用到一定平均抽数的平均回归时这种指标(这就比较困难了,数学上比较困难,要谨慎的选取指标,否则可能平均回归时到无穷去了) 如果想要给不同抽数的玩家人为加以区分,需要好好设计一下指数,加一些其他设计,我有一点点想法了,之后可以试试。

或许用一些痛苦指数来衡量:更长时间都处于一种比较非的状态,更令人痛苦啥的,不过这些指数的选取可能不够客观

想了一下,或许直接和期望作差的数值比较符合你想要的情况。 A花费100抽抽了1个道具,B花费1000抽抽了10个道具。如果抽一个道具的期望是90抽,那么A额外付出了10抽,B额外付出了100抽。(当然这个情况下B的非酋度也是比A高的) 如果想要归一化讨论,可以再把相较于期望多的部分除以获取一个道具所需抽数的标准差,可以得到更好的指标

> 想来提一下这个抽数的建议的,结果居然发现有人提了: **因为纵观欧皇榜前1000名,抽数大于1000还能上榜的的屈指可数,抽数大于2000还能上榜的几乎没有。** 所以我在想是不是欧非度可以多考虑一些抽数的权重,毕竟老咸鱼玩家很多,其实很多欧皇高抽数玩家可能也应该上榜。 以上仅作建议,开发者大佬辛苦啦。 非酋度/欧皇度的计算是一个客观值,无法对抽得多抽得少进行客观的量化,但是完全准确的反映了一个玩家在和自己同道具数玩家对比下是欧是非。当然,直接放到排行榜上大家未必乐意看。 如果想要体现“欧的总量”或是“非的总量”,或许累计高于平均或者累计低于平均是一个合适的指标 如果很多人都想看这种排行榜看乐子的话,或许我会去找非小酋提建议多加一个榜(但目前的榜确实太多了,很繁杂需要好好想想)。

最后思考了一下,目前的非酋度/欧皇度肯定是好的指标,对于每个玩家来说都提供了对比自己在同道具数量的玩家中运气小于等于多大比例玩家和大于等于多少玩家的参数。但这个指标不适合用于排名,因为如果想要刷榜,采用把抽数分散到多个账号上是比把抽数放到一个账号上更好的策略。 从防止刷榜的视角出发,可以建立一个指标使得无论采用怎样的刷榜策略都一样好,取玩家的非酋度为 $p$ ,在道具上花费的抽数和为 $n$ ,则应该选取指标 $p^{1/n}$ 进行排名。或者采用近似的 $\ln(n)-\ln(-\ln(p))$ 进行排名(线性简化,但是差异很低)。采用这样的指标有明确的数学意义,描述的是所选案例在群体中出现的稀有程度,是一个纯数值,不过叫这个指标什么名字还没想好。 总结一下,目前有三种指标可以用来衡量: 1. 非酋度:体现在同道具数量的玩家中运气小于等于多大比例玩家 2. 高于平均抽数:体现累计偏离平均值多少 3. 等攻击代价指标:体现群体中出现这个案例的稀有程度

这个问题我目前没有计算复杂度较低的方法,只能为每个单独的情况编写动态规划算法进行计算,复杂度为 $O(k^2)$。以前的老代码里有对应的实现,见[这份代码](https://github.com/OneBST/GGanalysislib/blob/main/GGanalysislib/PityGacha.py)里的 `luck_evaluate` 函数,大概是先算恰好在第 `1-k` 抽抽到 `0-k` 个道具的分布,再计算恰好第 k 抽时得到道具的分布。这样的算法是精确的,但是其编写实在是不够灵活,只能解决少部分问题,因此新的工具包中没有再采取这样的实现了。 如果使用新的工具包,我目前推荐采用曲折一点点的方法:先得到获取 `0-k` 个道具的抽数分布,以此得到 `k` 抽时获取大于等于 `n` 个道具的概率,然后再差分得到恰好获取 `0-k` 个道具的概率。 以原神为例,如果抽k抽,最多可以抽到k个道具可以调用 `GI.up_5star_character(item_num=k, multi_dist=True)` 返回获取 `1-k` 个道具所需的抽数分布,然后获得列表中每个情况分布的 cdf,然后提取第 `k` 抽的数值,最后做差分得到投入 `k` 抽能得到道具个数的分布。...

是的,完全可以忽略概率太低的长尾部分,刚刚去写代码去了,你可以参考以下实现: ``` python import GGanalysis.games.genshin_impact as GI import numpy as np from GGanalysis import * k = 360 # 计算获得 0-k 个道具所需抽数分布并以列表形式返回,因为原神 360 抽几乎不能抽超过10个UP五星,因此设置为10以减小计算量 distributions = GI.up_5star_character(10, multi_dist=True) def calc_item_num_dist(dist_list:...

这玩意工作正常的话我就找地方塞到主分支里,看看还有啥可以优化的空间没?比如接口定义啥的,然后找机会写到文档里

那我想想以怎样的形式加入工具包可以兼顾计算速度和使用方便,这条issue就先挂在这里。 话说1999好像最近加了新卡池啊?啥情况的卡池啊?

这种问题我没想到办法简单计算,所以不打算合并到工具包里。具体计算你可以参考以下思路: 计算抽出n个up光锥所需抽数分布(这个工具包里有了),然后枚举需要k抽,对于每种情况计算能抽多少个up角色(就是这个issue上面的实现)。最后把所有情况的分布加到一起就行,这个实现不复杂,就是把现有功能组合一下就行,但是效率不高,你可以试试自己实现一下。