5.4上线以来,各大网站和论坛对于野兽控制专精下的属性优先级众说纷纭,直到现在也没有哪个国外的网站或论坛给出一份令人信服的分析。这些属性分析绝大多数使用SimC的属性权值得出结论,少数使用了FemaleDwarf。
关于国外各大网站论坛的观点,可以参考[[资料] 国内外5.4猎人属性收益结论汇总] + 。
对于这种情况,我在5.4初期进行了更深入的SimC属性收益分析。结果表明,野兽控制专精下,猎人的属性收益存在一个收益最高的配比,在这个特定配比下理论DPS最高。
相关的分析参见[三系属性收益分析] + 。
于是有很多人问,这份分析基于T15H和T16H的标准角色,我的装等与它们不同,又该如何分配属性最好呢?
我也很想为各个装等下的猎人分别计算最佳属性分配。然而,一份完整的三属性重铸图像需要至少4小时不间断的计算,要做出一份有使用价值的图表至少需要做10-20份这样的三属性重铸,虽然我能拿得出这样的运算能力,但我更希望我有限的运算资源能用在更有价值的地方, 比如全职业饰品评分 。
所以,在一段时间的研究和调试后,我找到了更有优势的算法,只用了1/20的运算量就给出了比原来更好的结果。这份分析,虽然比期望的晚了很久,但也算是给我自己和理论研究者们一个交代了。
但请谨记,了解战斗机制才是Boss战制胜的关键,优化属性还要根据Boss战场景来综合考量。
模拟器配置
按惯例,模拟器的配置细节还是要列出的。
所有模拟数据使用SimC-540-5-r17955生成,战斗场景为典型的405 - 495秒单体木桩战,团队buff齐全,战斗开始即英勇,2枚颅骨战旗和2枚风暴之鞭图腾。迭代样本从2500 - 50000不等,样本和误差分析将在后面的章节详细讨论。
分析的对象为拥有4T16,并使用[既定之天命]和橙色披风的猎人。
天赋适用于凶暴野兽 / 闪击 / 飞刃,和热情 / 闪击 / 飞刃,两份天赋将分别作分析。
优化算法
在之前的研究中,我们已经知道,野兽控制天赋下,猎人的DPS受爆击、急速、精通的分配比例影响。当装等一定时,我们可以认为可支配的爆击、急速、精通总值一定。
这里我们定义:
副属性总值,剔除精准及命中
爆击
急速
精通
于是我们可以将寻找DPS最大值的问题,抽象为寻找目标函数

在约束条件下的极值。
由于目标函数的约束条件是离散集合,要找出这个极值,最简单的办法就是穷举出所有的和组合,并且计算出对应的

,寻找出极值

事实上,之前的属性分析就是这么做的,只是和取值的步长比较粗糙,为500而已。这个近似基于目标函数连续在约束条件下连续的假设,在作图验证之后我们发现这个假设基本成立。

从之前的图像我们也可以看出,在不同装等下,目标函数

在约束空间内只有一个极值,于是我们可以考虑使用局部搜索算法,找出其在约束空间中的极值。
启发式算法:爬山算法
爬山算法是一种深度优先搜索算法,于目标函数在约束空间中的局部进行搜索,寻找极值。
爬山算法的实现恰如其名,以一个一元目标函数

为例。首先在目标函数上选取一个起始点,然后尝试向两个方向移动,得到两侧的目标函数值

和

将它们与

相比较,如果有某一个比起始点更高,则移动到这个点,重新进行搜索。直到两侧的目标函数值均低于当前值,则缩小进行更精细的搜索,直到足够小,满足精度需求为止。
这个算法可以扩展到二元目标函数上,在每个点都向2个轴的4个方向进行搜索,寻找更高的攀爬方向。
爬山算法并不是完美的,主要问题有:
极值的局部性
爬山算法寻找到的极值是局部极值(Local maxima),而不能保证是全局极值(Global maxima)。
高地
当搜索到一个相对平整的高地时,爬山算法的效率会降低。
山脊
当搜索到一个山脊两侧时,爬山算法可能会在山脊两侧震荡,效率降低。
增量随机爬山算法
虽然爬山算法看起来很好,但却不完全适用于DPS最大值的搜索。因为SimC得到的DPS值不是决定性(Deterministic)的,而是随机性(Stochastic)的。在确定的爆击和急速下,取样获得的DPS值具有一个置信区间,搜索和攀爬决策需要同时参考取样结果及其误差。
所以我们引入了随机爬山算法(Stochastic hill climbing)来根据误差决定爬山的决策。随机爬山算法中,通常会比较被搜索的相邻节点收益斜率和概率,选取最可能是斜率最高的方向进行搜索。
与传统的随机爬山算法不同的是,SimC的输出结果中,置信区间可以通过增加样本数来进行近似的控制和估计。在[SimulationCraft完全手册] + 的章节1.5 分布与随机误差中,提到了DPS误差的算法,其中这个值由中心极限定理中的林德伯格-列维定理(Lindeberg Lévy CLT)推导得到:

式中

为样本数,
为样本的标准差,
为样本平均值的标准差。
从这个式子中我们可以看到,可以通过增加来缩减标准差,提高DPS的置信度。
所以我们可以先取相对较少的样本数进行粗略的计算:
如果相邻节点高出当前节点许多,大于两个节点的误差之和,则不需要进行进一步计算,可以确定向该方向攀爬。
如果相邻节点与当前节点相差不大,置信区间相交,则需要增加样本数,使其置信区间分离。
如果相邻节点低于当前节点很多,大于两个节点的误差之和,则不需要进行进一步计算,该节点一定不会高于当前节点。
在第二种情况下,置信区间相交,我们可以进行一个增量的取样,并且将重新取样的结果与之前的取样合并,重新计算其样本平均值、样本标准差、总样本数,以及通过林德伯格-列维定理计算样本平均值的标准差。由于DPS模拟取样是爬山算法中最耗时的部分,对取样的再利用会极大缩减运算时间。
当找不到确定攀爬方向,所有不能确定的节点都已经取到最大样本数时,当前节点可能是在一个相对平整的区域,我们可以近似的认为这些无法区分的节点与当前节点等价,尝试搜索它们的相邻节点。
在DPS分析的过程中,对于爬山算法的三大问题,分别有对应的解决办法:
极值的局部性
这个问题可以用随机重启爬山算法(Random-restart hill climbing)来解决,即在约束条件下多次随机选取起始点,使用爬山算法搜索到极值,最后使用最高的一个极值。
在之前的SimC分析中我们可以看到,在约束条件内,DPS的分布基本呈一个较平滑的单峰,局部极值基本可以确定为全局极值。
高地
DPS的峰值附近比较平缓,存在一个高地,除此之外不存在明显的高地。峰值附近的高地可以通过调整搜索条件来避免高强度的运算。实际分析中,我们将使用适当强度的搜索来大致确定高地的范围,因为高地上的收益与最高点很接近,分配属性时选取高地上的点也很有意义。
山脊
在之前的图像中,不存在山脊,不需要考虑山脊对优化算法的影响。
在分析的过程中,使用了Lua实现增量爬山算法,作为一个外壳调用编译好的SimC CLI程序,并处理抛出的样本数据。由于Lua可以很方便的将表保存到文件,类似于JSON,只需编译即可加载,所以计算过程可以随时中断和重启。
装备和天赋配置
为了平滑的分析各装等下角色的收益峰值,并没有使用装等作为变化量,因为很难对每个装等都确定令人信服的标准角色配置。为了简化算法,使用副属性总值作为变化量,模拟装等的变化。在装等变化时,除了副属性总值改变,敏捷也会随之改变,由于不确定敏捷对收益峰值和位置的影响,敏捷也应当随副属性一同缩放。
为了参考敏捷与副属性总值的关系,参考SimC的标准角色配置:

将其副属性总值去掉精准命中各2551之后,作图
图中可以看到,T16N - T16H与T14N - T15H不在一条直线上,T15N - T15H的曲线偏低,可能与5.2的装备属性分配有关,由于分析针对4T16的角色,敏捷的决定将使用T16N-T16H的线性回归,即

分析将针对副属性总值16000 - 36000的角色进行,步长为500,其敏捷将根据这个公式缩放。角色拥有2T16及4T16特效、橙色披风、橙色头部多彩及[既定之天命][哈洛姆的护符]。
副属性总值指的是装备提供的所有副属性(爆击、急速、命中、精准、精通)之和,去掉满命中和精准所需的(2551 * 2)之后的数值。
天赋选择上,第四层天赋将分别为凶暴野兽和热情进行独立的模拟。第五层和第六层,由于基本所有人都选择了闪击和飞刃,这两层天赋不做变动。
结果和分析
这里列出的只是峰值的位置,你可以在后面的章节中选择
凶暴野兽
要达到最高收益区间,你需要堆满命中和精准,保持8000 - 12000爆击。
副属性总值在28000以下时,将急速控制在7000左右;
副属性总值在33500以下时,将急速控制在10500左右;
副属性总值在34000以上时,将急速控制在15000左右。
虽然在副属性总值34500时,峰值的急速突变到了10500,但对原始数据的分析表明,在15000急速附近有一个与10500急速相当接近的峰,增量随机爬山算法没能在有限的取样下得到足够的数据将它们分开。副属性总值在28500 - 29500之间的3个点也有类似的情况。
更细致的比较数据可以发现,在副属性总值向28000增加时,10500急速附近的峰会逐渐追赶7000急速附近的峰,当副属性总值超过28000时,这个峰的高度开始超越7000急速峰,成为全局的极大值。急速峰值从10500附近向15000演变时也有类似的情况出现。随着副属性总值的提高,更高急速上的局部极大值将赶上并超越低急速的局部极大值。
热情
要达到最高收益区间,你需要堆满命中和精准,保持8000 - 12000爆击,将急速控制在7000 - 7500附近,剩余的属性用于精通。
可以看到,热情天赋下急速有一个恒定的最佳收益点,而不像凶暴野兽下存在多个局部极大值随装等演进的情况。
注意,这里算出的最佳收益点并非断点,我们常说的断点指的是收益突变的点,而在这个图表中列出的最佳收益点两侧均没有突变。
事实上,在寻找DPS峰值的过程中,起始点与最终找到的最高点的DPS之差,通常不到2%。
在两份图表中,DPS对副属性总值呈现出了非常好的线性,从侧面证明了模型的正确性。
图表和部分数据
这个部分将列出一些原始数据,以及每次增量随机爬山计算,在(爆击, 急速)空间中移动的详细路径图表。在这些被折叠的图表中,每个点的位置代表该样本的爆击和急速值,大小代表迭代次数,迭代次数越高则结果置信度越高。
红色的点是增量爬山算法找到的最高点,上面标注的数字是副属性总值;
黄色的点是与最高点无法区分高低的点,请注意参考迭代次数,如果迭代次数过低,无法区分的原因可能是置信区间过大;
灰色的点是可以确认比最高点低的点;
蓝色的点是增量爬山过程中进行跳转的点,上面标注的数字是跳转顺序。
凶暴野兽

+凶暴野兽 - 36000 ...
+ 凶暴野兽 - 35000 ...


+ 凶暴野兽 - 24500 ...
热情