在SIF中,SSR是相对而言比较容易得到同卡的一类卡,尤其是在散拉活动中,满肝度情况下有机会获得11张同卡。之前已有很多大佬贡献了喂卡攻略,例如9张同卡可以5孔5级,11张同卡补1000经验可以6孔6级。今天我们来验证一下,该方法是否已经是达到了最优解的状态。
1. 计算背景与设定
1.1 计算背景
SSR是SIF中低位比较尴尬的一类卡,相对于UR,其技能成长度很低,投入技能经验后强度增长缓慢;相对于SR,则获取难度较大,且需要投喂技能资源更多。因此在强度党眼里,抽到SSR=金贴纸+1。
但不可否认的是,对于卡组未成形的队伍来说,SSR仍然是过渡期比较具有价值的卡。尤其是散拉活动的推出,大幅度降低了SSR培养的成本,因此通过养一张高级判、奶上卡组则可以在前期以较低的成本获得长期使用的过渡期卡。
大量SSR同卡时的喂卡策略与UR的喂卡策略有所不同。下图是大家熟知的经验表:
经验表中,SR在1级喂最优,SSR在3级喂最优,UR在4/5级喂最优。而我们的计算背景与该情形有所不同:
- UR同卡获取难度极高,因此UR的培养策略是在有限同卡下,获得尽可能多的收益。
- SSR作为过渡卡,不值得投入大量经验培养,因此培养策略是在有限经验下,获得尽可能多的收益。
因此本文主要计算在给定同卡以及目标技能等级的情况下,最低需要投入的经验值。
1.2 计算设定
本文计算时基于如下假设:
- 由于不同目标技能等级的喂法存在差异,需要在开始设定好技能目标;
- 仅考虑升技能需要的同卡数,不考虑觉醒开孔;
- 最终合成的目标卡仅有一张。
2. 计算方法
2.1 算法设计
主要算法:动态规划+背包(目前想到的是这种效率很低的求解方法)
问题建模:
已知SSR的投入与产出情况如下表所示:
级别 | 1级 | 2级 | 3级 | 4级 | 5级 | 6级 | 7级 | 8级 |
---|---|---|---|---|---|---|---|---|
培养累积经验 | 0 | 200 | 600 | 1400 | 2600 | 5000 | 8200 | 12700 |
练习获得经验 | 300 | 600 | 1200 | 1800 | 2700 | 3600 | 4500 | 6600 |
这里我们以100经验为1个经验单位。以函数\(f(n, m)\)表示在拥有\(n\)张同卡,且投入\(m\)经验单位时,最多可以获得的经验数。迭代基显然为:在拥有1张卡时,投入\(m\)经验即可获得\(m\)经验,即有
\[f(1,m)=m\]而当我们拥有\(n\)张卡时,我们可以将除胚子卡外的\(n-1\)张卡分为\(k\)份,每份卡的数量为\(n_k\),并给每份卡投入\(m_k\)的经验,每一份获取最大收益后,全部喂给胚子卡,因此胚子卡得到的总经验数为:
\[EXP(k,n_1,...,n_k,m_1,...m_k)=\sum_k{Practice\left(f(n_k,m_k)\right)}+\left(m-\sum_km_k\right)\]式中\(Practice(x)\)表示总技能经验为\(x\)的卡被练习所获得的技能值。因此我们需要在所有的划分中,寻找最佳划分,即有
\[f(n,m)=\max{EXP(k,n_1,...,n_k,m_1,...m_k)}=max{\sum_k{Practice\left(f(n_k,m_k)\right)}+\left(m-\sum_km_k\right)}\]此即为\(f(n,m)\)的状态转移方程。
2.2 剪枝策略
上述计算过程实际计算起来效率极低,而实际上大多数的搜索实际是无用的。因此可以采用一定的剪枝策略加速计算。可以采用的剪枝策略包括:
- 若\(f(n,m)\)与\(f(n,m-1)\)具有相同的技能等级,则意味着多投入100经验并不会带来技能等级的变化,既然都是狗粮那为什么要多喂100经验呢?此时\(f(n,m)\)为无效的狗粮,搜索过程中去除。此时可搜索的投入经验数降低为至多8种。
- 从经验表中可以看出,3级狗粮是最赚经验的,4级相对于3级投入更高、收益更低。因此实际情况下,所有的狗粮均应该小于等于3级,意味着每组卡牌的数量应小于等于3。由此可剪除部分不合理的划分方法。
上述剪枝策略使得程序可以正常运行(虽然还是很慢,还是自己太菜)。
2.3 程序设计
已更新到github,代码库链接:SIF_Calculator
3. 计算结果
3.1 最小投入经验值表
最低需要的经验数 | 2级 | 3级 | 4级 | 5级 | 6级 | 7级 | 8级 |
---|---|---|---|---|---|---|---|
1卡 | 200 | 600 | 1400 | 2600 | 5000 | 8200 | 12700 |
2卡 | 0 | 200 | 800 | 2000 | 4400 | 7600 | 12100 |
3卡 | 0 | 0 | 400 | 1400 | 3800 | 7000 | 11500 |
4卡 | 0 | 0 | 200 | 1000 | 3200 | 6400 | 10900 |
5卡 | 0 | 0 | 0 | 600 | 2600 | 5800 | 10300 |
6卡 | 0 | 0 | 0 | 400 | 2200 | 5200 | 9700 |
7卡 | 0 | 0 | 0 | 200 | 1800 | 4600 | 9100 |
8卡 | 0 | 0 | 0 | 0 | 1400 | 4200 | 8500 |
9卡 | 0 | 0 | 0 | 0 | 1000 | 3800 | 7900 |
10卡 | 0 | 0 | 0 | 0 | 800 | 3400 | 7300 |
11卡 | 0 | 0 | 0 | 0 | 600 | 3000 | 6700 |
12卡 | 0 | 0 | 0 | 0 | 400 | 2600 | 6300 |
13卡 | 0 | 0 | 0 | 0 | 200 | 2200 | 5900 |
14卡 | 0 | 0 | 0 | 0 | 0 | 1800 | 5500 |
15卡 | 0 | 0 | 0 | 0 | 0 | 1400 | 5100 |
16卡 | 0 | 0 | 0 | 0 | 0 | 1200 | 4700 |
17卡 | 0 | 0 | 0 | 0 | 0 | 1000 | 4300 |
18卡 | 0 | 0 | 0 | 0 | 0 | 800 | 3900 |
19卡 | 0 | 0 | 0 | 0 | 0 | 600 | 3500 |
20卡 | 0 | 0 | 0 | 0 | 0 | 400 | 3100 |
注1:卡数包括胚子卡(即最后培养成型的1张),不包括任何用于开孔的卡。
注2:红色部分表示上一技能等级已是最优喂法,只能通过“硬喂”升级。
3.2 喂卡流程表
卡数 | 目标技能等级 | 投入技能经验 | 喂卡流程 |
---|---|---|---|
2 | 2 | 0 | 1卡+0经验 |
2 | 3 | 200 | 1卡+200经验 |
2 | 4 | 800 | 1卡+600经验, 补200经验 |
3 | 3 | 0 | 2卡+0经验, 补0经验 |
3 | 4 | 400 | 2卡+200经验, 补200经验 |
3 | 5 | 1400 | [1卡+600经验] * 2, 补200经验 |
4 | 3 | 0 | 3卡+0经验, 补0经验 |
4 | 4 | 200 | 1卡+0经验, 2卡+200经验, 补0经验 |
4 | 5 | 1000 | 1卡+600经验, 2卡+200经验, 补200经验 |
4 | 6 | 3200 | [1卡+600经验] * 3, 补1400经验 |
5 | 4 | 0 | 1卡+0经验, 3卡+0经验, 补0经验 |
5 | 5 | 600 | [2卡+200经验] * 2, 补200经验 |
5 | 6 | 2600 | [1卡+600经验] * 4, 补200经验 |
6 | 4 | 0 | 2卡+0经验, 3卡+0经验, 补0经验 |
6 | 5 | 400 | 1卡+0经验, [2卡+200经验] * 2, 补0经验 |
6 | 6 | 2200 | [1卡+600经验] * 3, 2卡+200经验, 补200经验 |
6 | 7 | 5200 | [1卡+600经验] * 5, 补2200经验 |
7 | 4 | 0 | [3卡+0经验] * 2, 补0经验 |
7 | 5 | 200 | 1卡+0经验, 2卡+200经验, 3卡+0经验, 补0经验 |
7 | 6 | 1800 | [1卡+600经验] * 2, [2卡+200经验] * 2, 补200经验 |
7 | 7 | 4600 | [1卡+600经验] * 6, 补1000经验 |
8 | 5 | 0 | 1卡+0经验, [3卡+0经验] * 2, 补0经验 |
8 | 6 | 1400 | 1卡+600经验, [2卡+200经验] * 3, 补200经验 |
8 | 7 | 4200 | [1卡+600经验] * 7, 补0经验 |
9 | 5 | 0 | 2卡+0经验, [3卡+0经验] * 2, 补0经验 |
9 | 6 | 1000 | [2卡+200经验] * 4, 补200经验 |
9 | 7 | 3800 | [1卡+600经验] * 6, 2卡+200经验, 补0经验 |
9 | 8 | 7900 | [1卡+600经验] * 8, 补3100经验 |
10 | 5 | 0 | [3卡+0经验] * 3, 补0经验 |
10 | 6 | 800 | 1卡+0经验, [2卡+200经验] * 4, 补0经验 |
10 | 7 | 3400 | [1卡+600经验] * 5, [2卡+200经验] * 2, 补0经验 |
10 | 8 | 7300 | [1卡+600经验] * 9, 补1900经验 |
11 | 5 | 0 | 1卡+0经验, [3卡+0经验] * 3, 补0经验 |
11 | 6 | 600 | 1卡+0经验, [2卡+200经验] * 3, 3卡+0经验, 补0经验 |
11 | 7 | 3000 | [1卡+600经验] * 4, [2卡+200经验] * 3, 补0经验 |
11 | 8 | 6700 | [1卡+600经验] * 10, 补700经验 |
注1:红色部分表示后续需要的组合喂法,其具体方法为
描述 | 解释 |
---|---|
2卡+0经验 | 将A卡直接喂给B卡,得到2级狗粮 |
2卡+200经验 | 先将200经验喂给A卡,得到2级A卡,再喂给B卡,得到3级狗粮 |
3卡+0经验 | 将A、B两卡直接喂给C卡,得到3级狗粮 |
注2:查表时,根据同卡数(包括最后成型的1张)以及目标等级数,按流程进行。举例:
目标:11张同卡,想要喂到6级
查表得到:需要投入600经验,喂卡方法为“1卡+0经验, [2卡+200经验] * 3, 3卡+0经验, 补0经验”
操作流程:
1. 1卡+0经验:一张卡什么都不用喂
2. [2卡+200经验] * 3: 先将200经验喂给A卡,得到2级A卡,再喂给B卡,得到3级狗粮,反复操作3次,得到3张3级狗粮
3. 3卡+0经验:将A、B两卡直接喂给C卡,得到1张3级狗粮
4. 最后将1张1级卡、4张3级卡全部喂给胚子卡即可。
注3:喂卡方法不唯一,表中展示的是最少投入下可以获得最多经验溢出的方法(虽然溢出也没有用)
注4:未列出的卡数与目标等级的组合,可能是因为目标等级太高,因此需要在达到能喂到的最高等级后硬喂即可。