信长之野望吧 关注:155,249贴子:5,467,091

信长14PK中关于武将战斗力和最优组队的研究

只看楼主收藏回复

强迫症让我每局每刻都在想着如何搭配武将达到最优组合,无奈人一多城一多,顾不过来就烦躁弃档,从未打到后期过。这几天学习了导航里关于战斗伤害计算的帖子,综合其他材料,想研究一下:
1. 全武将的战斗力到底如何
2. 哪些类型,哪些人,哪些特性 才是最优秀的人才
3. 怎样组队才能让各主力部队保持高战斗力,又不浪费优秀人才。
先分享下目前的研究进展,主要包括:
1. 全武将-类型-特性的整理和初步统计
2. 战斗特性到底何时以何种方式出发
3. 战斗伤害具体如何计算
4. 武将战斗力如何评估
后续会更新:
5. 根据战斗力评估选出的主将人选
6. 根据评估结果选出最使用的特性/类型
6. 如何为每为主将搭配最佳副将组合
7. 其他讨论。
参考出处
武将数据: https://www.nobuwiki.org/nobu_14/nobu14_21
类型数据:https://www.nobuwiki.org/nobu_14/nobu14_22
特性数据:https://www.nobuwiki.org/nobu_14/nobu14_11
伤害计算:感谢@sergi_li https://tieba.baidu.com/p/4300937551?red_tag=2508397800
伤害计算:感谢@上彬的心酸 https://tieba.baidu.com/p/3123299925?see_lz=1
伤害计算:感谢@s20110137 https://tieba.baidu.com/p/4360080446?pn=1


IP属地:德国1楼2020-11-24 05:42回复
    1. 全武将-类型-特性的整理和统计
    每一行对应一个武将,所有列由3大部分组成:
    1. 武将名称-4维-个人信息-成长类型
    2. 武将各成长阶段习得的特性
    3. 武将可习得的全特性集合 - 战斗相关的全特性结合 - 战斗相关特性合计
    武将个人信息

    武将成长信息

    武将特性-战斗特性-合计

    excel表格地址
    链接: https://pan.baidu.com/s/1jKJc3GppfIuH5zE2fJD_NA 提取码: wym3 复制这段内容后打开百度网盘手机App,操作更方便哦


    IP属地:德国2楼2020-11-24 05:58
    收起回复
      看了很多帖子,说每个特性都会按Van大修改器里lpAE参数触发:
      lpAE:0战斗开始 1行军 4撤退 5攻城 8野战 9海战 10装备马匹 11装备铁炮
        12无马匹铁炮13兵力少于对方 14兵力多于对方 15三人队伍 16副将
        17同族一队 18智力高于对方 19男性武将 21 本方总势力远弱于对方
      感谢@青山独归斜阳远 https://tieba.baidu.com/p/4068401736?red_tag=2469320037
      哦对,下克上就说本方总势力远弱于对方,国力无法获取,所以不研究。
      这些触发参数里,行军/野战 或许能和 下面链接里的 ”行军时触发/战斗时触发“ 对应: https://wenku.baidu.com/view/5a9afa62cfc789eb172dc8e6.html
      但实际计算时,什么时候判定依旧不明。这里我简单理解成两种时机:
      行军等 等价于每天进行判定
      战斗等 等价于每次战斗前(第三天)进行判定
      而这样的话风林火山/军神等在程序模拟时发动频率高得惊人,于是我把这两个暂定为战斗时判定。
      请教各位它们实际上是否发动那么频繁,例如刚结束就立刻发动,很多次都是……我可以在模拟程序里改回去。


      IP属地:德国4楼2020-11-24 07:11
      回复
        2. 战斗特性触发具体时间,以及影响的伤害因子如何影响计算结果,在后续模拟应用的公式计算中具体说明。
        按理说对 发动率为 0.3,伤害数值加成10 的战斗触发特性,可以计算伤害加成期望为 0.3 * 10 = 3。这样不需要通过多次模拟随机过程求平均快很多,但不同特性持续时间不一,触发间隙很难处理,所以程序中不得不用多次随机抽样求平均的方法。即对某一战斗重复100次,求最终伤害平均值。
        由于多次随机求和的性能问题,对全部1900+武将进行模拟过于耗时耗力,所以我们先看看哪些武将值得我们关注并模拟测试战斗力。

        用数据说话
        - 300个左右武将没有或只有一个战斗特性
        - 大部分武将有两个或四个战斗特性
        - 武将平均有3.3个战斗特性,最多有8个战斗特性(前田利家 和 jj)

        这6个人拥有 7-8 个战斗特性
        按武将类型分组,按战斗特性数量排序,倒数的几个废柴类型为:
        bad_types = [
        "內政拿手型", "政治型", "忍者型", "萬能政治型", "女性型", "古田織部型", "宰相型", "女戰國大名型", "外交僧型",
        "毛利隆元型", "不幸型", "中庸型", "猛將騎馬特化型", "捨奸型", "幸運型", "高坂昌信型", "佐久間信盛型", "信仰心型"
        ]
        有些类型也只有3,2 甚至1个战斗特性,但武将数据非常好看,是主讲人选。 或是特性比较关键/好用,如万能型的野名,女武将和倾城等。
        于是在抛去废柴类型剩下的武将里继续筛选,
        - 按我抓俘虏的原则(很宽松了),统>65, 武/智 > 70.
        - 这样会漏掉一些第数据好特性的人,把这些想要的特性补回来,如废柴真武和废柴野名/倾奇者
        candidates = warrior_details[~warrior_details["成長型"].isin(bad_types)]
        m_t = candidates["統率"] >= 65
        m_w = candidates["武勇"] >= 70
        m_z = candidates["智略"] >= 70
        m_s_1 = warrior_details["類型戰鬥特性"].astype(str).str.contains("傾奇者")
        m_s_2 = warrior_details["類型戰鬥特性"].astype(str).str.contains("真武士")
        m_s_3 = warrior_details["類型戰鬥特性"].astype(str).str.contains("野戰名人")
        m_s_4 = warrior_details["類型戰鬥特性"].astype(str).str.contains("內助之功")
        m_s_5 = warrior_details["類型戰鬥特性"].astype(str).str.contains("副將")
        m_s_6 = warrior_details["類型戰鬥特性"].astype(str).str.contains("傾城")
        m_s_7 = warrior_details["類型戰鬥特性"].astype(str).str.contains("公主武者")
        m_s_8 = warrior_details["類型戰鬥特性"].astype(str).str.contains("副將")
        m_s_9 = warrior_details["類型戰鬥特性"].astype(str).str.contains("波狀攻擊")
        candidates = candidates[
        m_t | m_w | m_z | m_s_1 | m_s_2 | m_s_3 | m_s_4 | m_s_5 | m_s_6 | m_s_7 | m_s_8 | m_s_9
        ]
        经过筛选,从1900+武将中,我们得到值得研究的795名武将。


        IP属地:德国5楼2020-11-24 07:33
        回复
          3. 战斗力如何计算,后面解释模拟过程是具体介绍。
          大体上根据一楼参考文献总结计算
          基本上先计算影响因子B
          再计算基础伤害
          根据B和基础伤害计算基础兵力伤害
          再结合敌我双方特性百分比加成
          最后计算突击/齐舍百分比加成


          IP属地:德国6楼2020-11-24 07:38
          回复
            有点硬核啊


            IP属地:福建来自iPhone客户端7楼2020-11-24 14:17
            收起回复
              4. 武将战斗力如何分析呢?
              既然知道了如何计算伤害(有攻防双方能力、兵力和特性计算),就能通过程序模拟两队人马战斗时的损伤。
              设置假想敌为 (统100, 武100,智100)无特性的单人高数值白板队伍。
              待测试武将战斗特性全开(模拟后期培养出的完全体),但能力保持初始值不变(等价于能力值+全20,对战120白板敌人)。好吧其实不是完全等价,但只要所有人的对手一致就可以测量。
              战斗初始兵力: 双方均为5000.
              战斗力定义:
              - 敌方灭队,战斗力 = 我方剩余兵力
              - 我方灭队,战斗力 = - 敌方剩余兵力
              - 双方灭队,战斗力 = 0
              对每个武将重复测试100次战斗,去战斗力平均值,即可得到每个武将单人的战斗力数值,理论上范围为 (-5000, 5000)。
              例如模拟出 信长的战斗力在 - 400 左右, 安藤守就 在 - 2300 左右, 立花道雪则为 + 200 左右等。
              模拟一个武将的一次战斗耗时约1.2秒,全部 795 个武将每人100次战斗大概需要27个小时。
              模拟还在进行中,已经测试 230个武将了,测试结果会分享在这楼评论里。


              IP属地:德国8楼2020-11-24 16:28
              回复
                5. 得到单体战斗力后如何继续研究。
                我们的目标是得到最优的组队。全图 76 座本城,有些方支城也很优秀,最好是能够配置出 90个队伍,共270人。
                考虑实际,不应该考虑全图最强组合,但处于好奇,我们可以看看统一的日本最强的30支队伍如何组成。
                实际操作指导游戏的话,后续会写点程序允许大家给出自己的势力范围 (共计X国),筛选出X国内所有武将,并给出 X * 2 个队伍组合。例如玩家控制5国,5本城,程序提供10个最优组队。
                根据战斗力排名,选出范围内战斗力前 5% 的武将,去掉其中 统帅<85(或80) 的武将,添加统帅>85 的武将作为主讲人选。剩下的武将中选择战斗力优秀的人才作为副将人选,组合队伍再次模拟战斗并计算分数。
                目前尚在等待单体战斗力结果,后续会持续更新。


                IP属地:德国9楼2020-11-24 16:51
                回复
                  有点东西


                  IP属地:浙江10楼2020-11-24 16:54
                  收起回复
                    坐等结论。
                    不过270个将这就太多了,一般玩一盘培养27个足够碾压全图,练太多人累死自己


                    IP属地:广东11楼2020-11-26 08:09
                    收起回复
                      学上少,这些理论实在是看不懂


                      IP属地:甘肃来自Android客户端12楼2020-11-27 11:15
                      收起回复
                        模拟程序跑完啦,这是对战全100白板敌将的单人战斗力数据。
                        排名前50的有



                        IP属地:德国13楼2020-11-29 03:10
                        收起回复
                          如何阅读这份模拟结果:
                          - 每个武将对战全100白板假想敌,兵力均为5000,进行100场战斗,直至一方溃败
                          - 每场战斗分为若干回合(每3天一回合进行一次战斗结算),一些特性例如鬼就在每回合进行判定
                          - 每回合之间(每天)也有一些特性进行判定,例如猛将/名将
                          - 每个武将对每100次战斗的每个回合,进行战斗力/防御力/伤害加成等数据求平均,得到各列数值(有小数)
                          果然JJ是全战国第一强将,老虎紧随其后,但差距很小。
                          第三名立花宗茂, 第四名真田幸村。
                          这里和大家印象里有所冲突,二人统武都很优秀,差距不带,立花宗茂有微小劣势,所以关键就在于特性的不同,主要是 虎+西国无双 VS 真武。
                          这里要澄清一下模拟过程中对各特性发动时机的判定,是按照我查阅各资料得出的推断,把所有特性粗略划分为 “每天判定” 或 “每回合判定”。而按照Van大修改器能看到的发动时机,有十几种之多,而每一种具体何时触发是不明确的。如果哪位大神能够提供更详细的解释,就可以对战斗模拟进行更新,或许会得到不同的结果。
                          通过 立花 VS 真田 的对比,可以看到立花两个对伤害百分比的buff,实际效果优于 真武对防御力数值加成的效果。奋不顾身也是能力数值加成且有负面效果,其他赤备VS铁壁等暂且忽略差异。尤其是模拟中对西国无双每天判定的设定,使其效果明显。所以即便真田在统武数据,以及攻防能力数值都优于立花,但立花凭借伤害百分比(包括减伤百分比)的加成生出。
                          同时有意思的是看到了很多 “勇将型” 选手入围前五十,例如 后藤右兵卫 VS 立花道雪。勇将行数据不如立花,但也算数据好看,特性上唯一的差别就是 野战名人 VS 鬼。
                          野名(常驻,攻防数值各加20)
                          鬼(每回合以 30% 的概率 以 20%的幅度 增加/减少 伤害/损伤)
                          此时野名小幅度胜出。
                          此时得到的小结论是:
                          - 野战名人这一常驻特性很厉害,比鬼/虎/夜叉等概率特性稍胜一筹
                          - 真武非常优秀,但比起 西国无双 + 虎, 在现有设定下稍逊
                          说明:
                          - 现伤害公式当然和实际有所出入,但真是计算无从可考
                          - 为强力武将配副将时,相较于鬼,野名更胜。


                          IP属地:德国14楼2020-11-29 03:45
                          收起回复
                            上述结果可靠吗?
                            1. 分析战斗力百分位数 CDF函数
                            下图中画一条水平线,例如在y轴0.8处,得到对应的x轴数据在-1400 左右。意思是战斗力为-1400的武将就已经超过了所有候选人(830名)的80%。而战斗力分数为0就超越了大概90%的候选人。
                            CDF函数后部顶端处平坦,说明战斗力高的人少之又少,而左侧80%前稳定增长,说明低水平的人分布比较均匀。比较符合常识认知。

                            2. 分析战斗力分布
                            下图可见-2000处为高峰,意思是此分段的人数做多,约300人左右
                            第二张概率密度图在0分附近又一个小高峰,说明0分前后是一个比较优秀的人才集中分布的分数。而高于0分的人越来越少。说明优秀人才内部相比,低分的人也是较多的,越优秀越稀有,也比较符合常识。

                            3. 分析各列数据相关性,哪项数值和战斗力数据最相关
                            下表是轴对称的,看第一列就可以:
                            - 正数 为正相关,意思是X越大,观察到的战斗力就越大,最大值为1
                            - 负数 为负相关,意思是X越小,观察到的战斗力就越大,最小值为-1
                            - 0附近 为不想管,意思是X值增减和战斗力关系不大
                            可见战斗力和攻击力最相关,其次是防御力,再次是伤害倍数
                            而敌攻击力/防御力取之都是100,无变化所以无法计算
                            战斗力和敌伤害倍数负相关 (敌伤害倍数越小,我放战斗力越高)
                            符合预期。
                            注意表中认为攻击力比防御力相关性更高,和普通认知的“伤害溢出”冲突。这里可以解释为敌武将统武双100,相比真实战斗中敌将通常没这么强悍,所以模拟中伤害不容易溢出有关。如果把敌武将设为统武双50,可能攻击力/防御力相关系数就会发生变化。所以这里的冲突未必不合理。

                            4. 分析影响战斗力的各项数值重要性
                            数值越高,说明改数值对最终战斗力影响越大。
                            这里用随机森林拟合战斗力数据后得到的feature importance作依据。虽此方法有时有一定局限性,此处应用也非不合理。
                            看到攻击力和防御力分排第一第二,因为战斗力(战斗结束所剩部队数)由每回合战斗伤害/损害直接计算而来;而攻击力和防御力除特性加成外,最大的基数就来源于武勇和统帅,因此武勇和统帅分派第三第四,十分一直。
                            又由于攻击力/防御力大部分由武勇/统帅所计算得出,所以对阵双100 的敌将时,攻击(武勇)更加重要。
                            伤害倍数/敌伤害倍数分别对应 伤害/受损 的百分比加成,这类加成较少。
                            成长型影响的是特性,在攻/防中反应为对基础能力的修正。
                            智略最靠后,因为智略不直接影响攻防,而对攻防修正的特性又非常少。
                            所以 feature importance也是合理的。

                            综上4点,现有战斗力排行即便和游戏真实情况有细微不同(因为真实伤害计算公式无从知晓,特性触发时机更是迷),但也都在合理范围内。
                            最最直接的结论:对战战统武双高的敌将时,战斗力(武勇) > 防御力(统帅),能打出伤害更重要!
                            对阵统武没那么高(至少不比自己高)的武将,因为没测试,所以不一定,但根据伤害溢出等前人结论,大胆推测 防御力(统帅) > 战斗力(武勇)


                            IP属地:德国15楼2020-11-29 04:16
                            回复
                              后续如何组队,有两条可选方向:
                              首先都是根据单体战斗力排行,选择战斗力高且统武优秀(尤其是统)的 topN 选手做主将。剩下战斗力较高的武将作为副将候选人。
                              方案1。设组N队(N各主将),剩下所有副将候选人M人。则选出 C(M,2)个组合,意思是M人中选择2人,组合个数记为C,则组除M * C 个不同队伍。让每个队伍分别对阵统武双百敌将100次战斗,取战斗力平均值。
                              方案2。在所有主将人选中,随机选择1人;再从所有副将中随机选择2人,对阵统武双百敌将100次战斗取战斗力平均。并由这些战斗结果训练模型,再预测方案1中各队伍的战斗力。
                              方案1:
                              - 好处,能准确计算每组队伍战斗力具体数值
                              - 坏处,随N和M增大,组合数量会极速增大,甚至达百万级别。假设每个队伍每次战斗需要1秒钟模拟,100万队伍各模拟100次,就需要10亿秒。 😭
                              方案2:
                              - 好处,训练时随机取几百个队伍进行测量并训练模型,以后每次预测可能只需要几毫秒,同样对100万队伍进行预测时,节省的时间达 1000 * 100 = 10万倍。
                              - 坏处,预测出的战斗力会有所偏差,有测量训练用的队伍多少有关,也于选取的模型有关。
                              我会先根据单体战斗力排名筛选一下主副将人选数 N 和 M。
                              若N和M较小,方案1可行且准确。
                              若N和M较大,则只能进行方案2.
                              后续会继续更新。谢谢大家关注。


                              IP属地:德国16楼2020-11-29 04:29
                              回复