三国群英传2mod吧 关注:6,106贴子:662,854

【游戏探讨】以数学角度探讨一下近战兵在纯兵战中的战损问题

只看楼主收藏回复

一楼献给作者 和喜欢三国群英2的玩家们


IP属地:四川1楼2024-06-05 16:40回复
    本帖由 @BinEYE 所创,本人觉得有独到之处,拿来分享,特此感谢!


    IP属地:四川2楼2024-06-05 16:42
    回复
      纯伏兵玩法,粗略来说可以分为三个部分:1)躲武将技,2)兵杀兵,3)兵杀将。
      其中,躲武将技是最重要,同时也是最复杂的部分。然而,本贴并不打算深入探讨这方面的内容。
      本贴所要讨论的是另外两个部分,即“躲完武将技后需要剩下多少兵力才能杀光敌方士兵、杀死敌方武将”这个问题。或者也可以说,这个贴子讨论的问题是:需要多少兵力才能杀死满兵满血的白板武将(无武将技)?
      简要目录:
      一~三为介绍游戏相关设定的环节,
      四~七为分析和计算的环节。


      IP属地:四川3楼2024-06-05 16:43
      回复
        一、单兵战力
        战力,即战斗前展示的战力对比图中的战力。单兵战力则是指图中展示的总战力除以兵数而得到的值。
        如下图:(图引用自aap的扫盲攻略)

        先看上图最后两排,总兵数和战力总和,可以计算出单兵战斗力,此图敌方为110,我方为217。
        关于单兵战力更详细的内容,可以查看精品贴,这里就不再赘述了,直接照搬aap写的扫盲攻略中的计算公式:
        单兵战力=150+兵种影响+地形影响+阵型影响+士气影响+军师技影响,
        其中,
        兵种/阵型影响即为所谓的克度。
        地形影响受城防加成,城防/100之后向上取整,比如867的城防会提供9点地形加成。
        士气影响为(士气值-50)/5,允许负数值,绝对值向下取整,比如89士气会提供7点影响,17士气会提供-6点影响。
        军师技仅受混乱敌军/增强攻击/强化士兵影响,比如增强攻击初描述为“增加我方士兵攻击力10”,相当于给我军士兵单兵战斗力【加10】,而不是某些”技术贴“提到的【加百分之10】。包围敌军和偷袭敌军会影响阵型克度。


        IP属地:四川4楼2024-06-05 16:44
        回复
          二、士兵伤害
          士兵伤害(即兵对将的伤害)完全取决于单兵战力,计算公式为:
          低级兵:士兵伤害=单兵战力/48,
          高级兵:士兵伤害=单兵战力/40,
          计算结果向下取整。
          值得一提的是,我们经验中的“高级兵伤害等于低级兵伤害+1”,这完全是因为公式算出来刚好如此罢了。
          以上知识也是直接照搬aap的扫盲攻略。


          IP属地:四川5楼2024-06-05 16:45
          回复
            三、命中率
            本贴所讨论的问题中,需要考虑的命中率有三个,分别为兵砍兵命中、兵砍将命中和将砍兵命中。将砍将命中在本贴中并未涉及,因此不多做赘述。
            1)士兵A砍士兵B,士兵A的命中由“士兵A的单兵战力”和“士兵B是否全突”决定,具体的计算公式为:
            1-1)士兵B未全突,士兵A的命中:
            低级兵:命中率=A单兵战力/300,
            高级兵:命中率=A单兵战力/300+(1-A单兵战力/300)* A单兵战力/450,
            高级兵与低级兵的命中率关系为:
            高级兵命中率=低级兵命中率+(2/3)*(1-低级兵命中率)*低级兵命中率,
            1-2)士兵B全突,士兵A的命中:
            低级兵:命中率=A单兵战力/450,
            高级兵:命中率=A单兵战力/450+(1-A单兵战力/450)* A单兵战力/675,
            2)士兵A砍武将B,士兵A的命中由“武将B的武力”决定,具体的计算公式为:
            低级兵:命中率=0.5-B武力/1500,
            高级兵:命中率=(0.5-B武力/1500)+(2/3)*(0.5+B武力/1500)*(0.5-B武力/1500),
            3)武将B砍士兵A,武将B的命中由“武将B的武力”和“士兵A是否全突”以及“B的军师计策影响”决定,具体的计算公式为:
            3-1)士兵A未全突,武将B的命中:
            砍低级兵:命中率=(150+军师计策影响+B武力/2)/300,
            砍高级兵:命中率=(150+军师计策影响+B武力/3)/300,
            其中,军师计策影响即为“强化武将”所加的数值。
            3-2)士兵A全突,武将B的命中:
            砍低级兵:命中率=(150+军师计策影响+B武力/2)/450,
            砍高级兵:命中率=(150+军师计策影响+B武力/3)/450,
            同上,军师计策影响即为“强化武将”所加的数值。
            以上计算命中率的公式由远帆、G仔、tarbon等大佬解读代码后提供,目前似乎尚没有人进行整理,因此可能存在错误。如有错误,欢迎订正。


            IP属地:四川6楼2024-06-05 16:45
            回复
              介绍完与本问题讨论相关的游戏设定,接下来就是分析和计算环节了。
              四、兵杀兵的战损part 1
              因为远程兵的战损涉及射程、移速、躲避操作等因素,这会使得问题变得极其复杂,对此我的准备并没有那么充分,所以本贴就暂时不考虑远程攻击,只讨论近战兵互砍的战损问题,也算是抛砖引玉吧。
              近战兵互砍的战损问题,可以分为两类情况:1)一方移动,一方待机,2)双方都在移动。
              1)一方移动,一方待机,待机方拥有先手攻击的优势。此时,双方的战损的计算如下:
              假设士兵A的命中率为p,士兵B的命中率为q,
              假设士兵A在对砍中击杀士兵B的几率为X,士兵B在对砍中击杀士兵A的几率为Y,
              不妨假设士兵A待机,士兵B移动,因此,士兵A先手攻击,此时有:
              A获胜的几率:
              X=p+(1-p)*(1-q)*p+(1-p)*(1-q)*(1-p)*(1-q)*p+(1-p)*(1-q)*(1-p)*(1-q)*(1-p)*(1-q)*p+…,
              显然,这是一个等比数列求和,首项为p,公比为(1-p)*(1-q),我们可以通过公式进行化简:
              X=p*{1-[(1-p)*(1-q)]^n}/[1-(1-p)*(1-q)],n趋于无穷大,
              最终可得:
              X=p/(p+q-p*q),
              B获胜的几率:
              我们可以跟上面一样套用等比数列求和公式,对首项为(1-p)*q,公比为(1-p)*(1-q)的等比数列进行求值,也可以直接利用X+Y=1的关系计算Y,得:
              Y=(q-p*q)/(p+q-p*q),
              在双方士兵进行大规模对砍时,双方的战损期望值的比例关系为:A战损:B战损=Y/X,
              结合X+Y=1,消去Y,变形可得:A战损:B战损=1:[1/(1/X-1)],
              将X=p/(p+q-p*q)代入上式,化简,可得:
              A战损:B战损=1:[p/(q-p*q)],
              即,A方死亡1个兵,B方死亡兵数的期望值为[p/(q-p*q)]。
              2)双方都在移动时,彼此获得首次先手的机会可以认为是均等的;接触后,交战获胜方将获得下一次交战的先手。此时,双方的战损的计算如下:
              假设士兵A的命中率为p,士兵B的命中率为q,
              设士兵A先手时,士兵A获胜的几率为x,
              设士兵B先手时,士兵A获胜的几率为x’,
              设士兵A获胜的总几率为X,设士兵B获胜的总几率为Y,有:X+Y=1,以及X=X*x+Y*x’,
              消去Y,得:X=X*x+(1-X)*x’,整理可得:
              X=x’/(1-x+x’),
              根据之前的计算,有:
              x=p/(p+q-p*q),
              x’=(p-p*q)/(p+q-p*q),
              代入X=x’/(1-x+x’),化简后可得:
              X=(p-p*q)/(p+q-2*p*q),
              在双方士兵进行大规模对砍时,双方的战损期望值的比例关系为:
              A战损:B战损=1:[1/(1/X-1)],
              消去X,可得:
              A战损:B战损=1:[(p-p*q)/(q-p*q)],
              即,A方死亡1个兵,B方死亡兵数的期望值为[(p-p*q)/(q-p*q)]。


              IP属地:四川7楼2024-06-05 16:45
              回复
                五、兵杀兵的战损part 2
                上面是关于双方士兵战损的计算原理,我们得到了由命中率计算战损的结论公式。而在实际的游戏中,我们还需要考虑高级兵和全突因素对命中率的影响,接下来所要阐述的正是这些内容。
                回到最开始的问题,我们讨论的是伏兵技能,因此我们可以默认己方士兵都是低级兵,而避开高级兵比例的问题(其实是我想偷懒)。另外,因为玩家是不会选择全突的,所以也可以排除己方士兵全突的可能性。因此,高级兵和全突因素指的是敌方士兵。
                正常情况下,玩家会待机杀光敌方前军士兵,然后引诱敌方后军全突,再待机(或移动)杀光敌方后军。因此,我们可以认为敌方一定比例士兵是非全突,一定比例士兵是全突的;而前后军中高级兵的比例有所不同,也会有非全突和全突之分。
                假设己方士兵砍敌方非全突士兵的命中率为p,则己方士兵砍敌方全突士兵的命中率为p’,有:p’=p*2/3,
                假设敌方低级兵的命中率为q,则敌方高级兵的命中率为q’,有:q’=[q+(2/3)*(1-q)*q],
                假设己方单兵战力为a,敌方单兵战力为b,有:p=a/300,q=b/300,
                设己方士兵待机击杀非全突低级敌兵的几率为x1,有:x1=p/(p+q-p*q),
                设己方士兵待机击杀非全突高级敌兵的几率为x2,有:x2=p/(p+q’-p*q’),
                设己方士兵待机击杀全突低级敌兵的几率为x3,有:x3=p’/(p’+q-p’*q),
                设己方士兵待机击杀全突高级敌兵的几率为x4,有:x4=p’/(p’+q’-p’*q’),
                设己方士兵移动击杀非全突低级敌兵的几率为x5,有:x5=(p-p*q)/(p+q-2*p*q),
                设己方士兵移动击杀非全突高级敌兵的几率为x6,有:x6=(p-p*q’)/(p+q’-2*p*q’),
                设己方士兵移动击杀全突低级敌兵的几率为x7,有:x7=(p’-p’*q)/(p’+q-2*p’*q),
                设己方士兵移动击杀全突高级敌兵的几率为x8,有:x8=(p’-p’*q’)/(p’+q’-2*p’*q’),
                假设敌方士兵非全突的比例为h,则全突的比例为(1-h),
                假设非全突士兵中高级兵的比例为m,全突士兵中高级兵的比例为n,
                设己方士兵全程待机击杀敌方士兵的总几率为X1,有:
                X1=h*(1-m)*x1+h*m*x2+(1-h)*(1-n)*x3+(1-h)*n*x4,
                设己方士兵待机击杀敌方非全突士兵、移动击杀敌方全突士兵的总几率为X2,有:
                X2=h*(1-m)*x1+h*m*x2+(1-h)*(1-n)*x7+(1-h)*n*x8,
                设己方士兵全程移动击杀敌方士兵的总几率为X3,有:
                X3=h*(1-m)*x5+h*m*x6+(1-h)*(1-n)*x7+(1-h)*n*x8,
                然后,我们可以利用由获胜几率计算战损比期望值的公式来得到战损比:
                己方战损:敌方战损=1:[1/(1/X-1)]。


                IP属地:四川8楼2024-06-05 16:46
                回复
                  至此,我们所需要用到的公式已经全部列出,接下来就是代入实际的数据进行运算了。当然,这些计算我们可以拉表完成。
                  例子1:
                  己方攻城,敌方城防999,己方枪兵,敌方朴刀兵,己方冲锋阵,敌方方形阵,双方士气均为100%,
                  此时,己方单兵战力=150+42+0+23+10=225,敌方单兵战力=150-42+10-23+10=105,
                  己方士兵砍敌方非全突士兵的命中率为p=225/300=0.75,己方士兵砍敌方全突士兵的命中率为p’=0.75*2/3=0.5,
                  敌方低级兵的命中率为q=105/300=0.35,敌方高级兵的命中率为q’=0.35+(2/3)*(1-0.35)*0.35≈0.5017,
                  敌方前军有140兵,占比0.7,其中高级兵比例为0.5,后军有60兵,占比0.3,其中高级兵比例为0.5,
                  由此,我们可以得到上面所列的各种情形下的对砍胜率和战损比的结果:

                  从表格数据我们可以看出,只要玩家操作得当,通常只需要49兵左右就能清完敌方200兵。
                  例子2:
                  己方攻城,敌方城防999,己方女兵,敌方大刀兵,己方锥形阵,敌方鱼丽阵,双方士气均为100%,
                  此时,己方单兵战力为228,敌方单兵战力为103,
                  敌兵全部为前军,高级兵比例0.5,

                  只需要26兵就能清完敌方200兵。
                  例子3:
                  己方攻城,敌方城防999,己方枪兵,敌方藤甲兵,己方冲锋阵,敌方圆形阵,双方士气均为100%,
                  此时,己方单兵战力为250,敌方单兵战力为75,
                  敌方前军有60兵,占比0.3,其中高级兵比例为0.5,后军有140兵,占比0.7,其中高级兵比例为0.5,

                  清完敌方200兵大约需要44兵。
                  例子4:
                  己方攻城,敌方城防999,己方枪兵,敌方武斗兵,己方冲锋阵,敌方方形阵,双方士气均为100%,
                  此时,己方单兵战力为243,敌方单兵战力为87,
                  敌方前军有140兵,占比0.7,其中高级兵比例为0.5,后军有60兵,占比0.3,其中高级兵比例为0.5,

                  清完敌方200兵大约需要32兵左右。
                  例子5:
                  己方攻城,敌方城防999,己方藤甲兵,敌方朴刀兵,己方冲锋阵,敌方方形阵,双方士气均为100%,
                  此时,己方单兵战力为209,敌方单兵战力为116,
                  敌方前军有140兵,占比0.7,其中高级兵比例为0.5,后军有60兵,占比0.3,其中高级兵比例为0.5,

                  清完敌方200兵大约需要65兵左右。
                  简单总结一下:
                  在总克度超强克制敌方时,战损比能达到1:5以上,清光敌方200兵所需要的兵数不到40;在总克度强克制敌方时,战损比是1:4左右,己方战损约为50兵;在总克度普通克制敌方时,战损比大约是1:3,需要己方付出的战损在60兵以上。


                  IP属地:四川9楼2024-06-05 16:50
                  回复
                    六、兵杀将的战损
                    士兵围杀武将时,武将总是能获得首次先手攻击的机会。可是,若是以士兵最终能击败武将为讨论的前提条件,那么首次先手攻击刚好形成完整攻击轮数,因此不需要额外进行考虑。
                    士兵总是能在立刻围住武将,若武将命中士兵,则下次只会遭受1次士兵的攻击;若武将未命中士兵,则下次遭受前后士兵的攻击次数为2次。
                    设己方士兵的命中率为p,
                    设己方士兵对敌方武将的伤害为d,
                    设敌方武将的命中率为q,则己方每个士兵能存活的攻击轮数的期望值为1/q,
                    设己方士兵每轮攻击敌方武将的次数的期望值为N,则有:N=q+(1-q)*2,
                    设己方每损失一个士兵可以对敌方武将的伤害(即损血比)为D,有:D=d*p*N/q,
                    消去N,得:
                    D=d*p*(2/q-1),
                    即,己方每损失一个士兵可以对敌方武将造成伤害的期望为d*p*(2/q-1)。
                    回到讨论伏兵的问题上,可以认为己方士兵都是低级兵,且不会全突。
                    设己方士兵战力为a,则有:d=a/48,
                    设敌方武将武力为b,则有:p=0.5-b/1500,
                    不妨忽略强化武将的使用可能性,则有:q=0.5+b/600,
                    将a、b代入D=d*p*(2/q-1)中,消去d、p、q,可得:
                    D=(a/48)*(0.5-b/1500)*[2/(0.5+b/600)-1]。
                    至此,我们获得了损血比的公式,接下来我们可以代入实际数据进行拉表。
                    这里,只考虑克度克制敌方的情况,己方士兵面对各跨度武力武将所能造成的损血比如下表:

                    40级时大多数武将血量在100-150的范围内,若以击杀150血敌方武将作为基准,则己方损失的士兵数如下表:

                    以100武力(即初始武力74)作为参照,己方单兵战力192和240的战损分别在43和35左右。


                    IP属地:四川10楼2024-06-05 16:52
                    回复
                      七、躲武将技外所需要剩余兵力的预期
                      综上所述,己方总克度普通克制敌方时,需要总战损100以上兵力(其中,兵损60以上,将损40以上)才能击败敌方;
                      己方总克度强克制敌方时,需要总战损90左右兵力(其中,兵损接近50,将损40左右)能击败敌方;
                      己方总克度超强克制敌方时,需要总战损70左右兵力(其中,兵损35左右,将损35左右)就能击败敌方。
                      以上便是纯伏兵玩法中稳定击败敌方所需要的兵力。正常情况下,由于敌将大概率会逃跑,故而总战损大多会略微小于计算结果。
                      除此以外,双方士兵的交战是与躲武将技同时进行的。随着交战战损,武将技对士兵的杀伤也会降低,这实际上也大大降低了躲武将技的压力。因此,躲武将技和尽快交战之间的选择是一个会直接影响战损的因素。
                      当然,躲武将技的操作仍然是重中之重。
                      以上。


                      IP属地:四川11楼2024-06-05 16:52
                      回复
                        对第10楼“兵杀将的战损”的内容的补充:
                        第10楼中,默认己方对士兵的操作为前进,然而实际上这并不是兵杀将的唯一可选操作。除了前进操作以外,常见的操作还有待机、中央集中。
                        1)前进
                        前进操作的分析在9楼中已经写过,这里就不赘述,直接搬结论:
                        设敌方武将的命中率为q,
                        设己方每个士兵攻击次数的期望值为M,则有:M=2/q-1。
                        2)待机
                        己方士兵待机,就能确保拥有攻击先手,之后与敌方武将轮流攻击,直至士兵死亡。
                        设敌方武将的命中率为q,
                        设己方每个士兵攻击次数的期望值为M',则有:
                        M'=1+0*q+1*(1-q)*q+2*(1-q)*(1-q)*q+3*(1-q)*(1-q)*(1-q)*q+...+n*q*(1-q)^n,n趋于无穷大,
                        变形得:(M'-1)/q=1*(1-q)+2*(1-q)^2+3*(1-q)^3+...+n*(1-q)^n,n趋于无穷大,
                        将等式两边同乘以(1-q),并被原等式减,得:(M'-1)/q-(1-q)*(M'-1)/q=(1-q)+(1-q)^2+(1-q)^3+...+(1-q)^n-n*(1-q)^(n+1),n趋于无穷大,
                        整理可得:(M'-1)/q=(1-q)/q^2,即:M'=1/q,
                        显然,M'<M,前进指令下的杀将效果要好于待机。
                        3)中央集中
                        中央集中指令下士兵的移动模式,可以看作是混合待机和前进的操作(实际并不是)。
                        己方士兵待机,等敌方武将贴近己方士兵时从后方包围敌方武将,获得攻击先手的同时也将敌方武将前后围住。此时选择待机,等敌方武将杀死前后两侧的士兵并前进至下一个己方士兵跟前时,再操作己方士兵从后方包围敌方武将,并重复这个操作。
                        设敌方武将的命中率为q,
                        设己方每个士兵攻击次数的期望值为M'',则有:
                        M''=[1/q+(2/q-1)]/2,
                        即,此时的攻击次数为前进和待机的平均值。
                        小结:前进指令杀将效果最好,不过,并不是说待机和中央集中一无是处。待机和中央集中的操作可以延长士兵存活的总时间,这也是一种作战策略。我们需要在合适的时候选择合适的操作。


                        IP属地:四川12楼2024-06-05 16:53
                        回复
                          补充:士兵间的前后夹击
                          多谢cang大佬的提醒,这里还需要补充一下士兵之间的前后夹击情况下的修正。
                          首先,先说结论:因为此类情况的出现概率无法确定,只能定性得出玩家的概率高于电脑结论——原因一是玩家可以通过中央集中、左右分散等操作构造出部分“兵兵空兵兵”形状的单向陷阱,在这类兵型中只会是玩家对电脑前后夹击,电脑无法对玩家前后夹击;原因二是在“兵空兵空兵”的双向陷阱中,因为待机有先手优势,这部分优势可以认为是玩家拥有更高的出手机会。然而,不管是两个原因的哪一个,都无法量化成具体的概率数值。
                          出现这种情况的条件,是要求双方以散乱的阵型前进。正常情况下,玩家的阵型是必定会散乱的,因此是否会出现前后夹击就取决于电脑。
                          电脑不散乱前进的情况为:所有阵型的前军前进、玩家使用乱阵时电脑全军前进。
                          电脑散乱前进的情况有:鱼丽的中军、后军前进,冲锋的左军、右军前进,玄囊的中军、左军、右军前进,所有阵型下的全军突击,玩家使用偷袭敌军时电脑全军前进,电脑士兵接近玩家武将后的移动。
                          前后夹击时计算命中的通用计算公式为:(假设A兵与B兵夹击C兵,A对C、B对C的命中率分别为p、q,最终击杀概率为o)
                          o=1-(1-p)*(1-q)=p+q-p*q。


                          IP属地:四川13楼2024-06-05 16:54
                          回复


                            IP属地:江苏来自iPhone客户端15楼2024-06-15 14:12
                            回复


                              IP属地:北京来自iPhone客户端16楼2024-06-15 16:26
                              回复