《出怪论》重述&出怪行计算器&一些计算...
 
Notifications
Clear all

《出怪论》重述&出怪行计算器&一些计算结果


xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

一、《出怪论》重述

三个月前恶魂发过一篇《出怪论:出怪的选行》,详细介绍了僵尸所在行的规律,我这里简化思路,并按照计算顺序带大家复习一遍。

注:本段为了简化思路,只提及正常游戏中能遇到的情况,你要开修改器在屋顶刷个海豚就别看了。

最终在该第i行出怪的概率(Pi)与i行权重Weighti距离上次/上上次出怪间隔LastPickedi/SecondLastPickedi两方面因素有关。

  1. i行权重(Weighti)及权重占比(WeightPi

       这一属性只与行本身状态有关,而与当前出怪情况无关。

       除特殊关卡外,只与以下三个因素有关:

       1)若该行对于僵尸不合法,则Weighti=0,关于合法行原文讲的很详细,这里只挑正常游戏用得到的:

  • 5行场地6路不合法;
    许多僵尸只能出在水/陆路,不多讲;
    W1~4水陆对普僵/路障不合法;
    非无尽1路巨人不合法;
    5行场地边路舞王不合法;
    没有冰道对雪橇小队不合法。

!!!勘误:前5波水路不出僵尸。     

       2)若该行与本波丢失推车,则下波Weighti=0.01,下下波Weighti=0.50。

       3)其他情况,Weighti=1。

      特殊关卡有一下两个:

       1)保护传送门,略复杂:

  • 若本行有传送门且目标传送门距离小推车最近距离小于5(若没有小推车,则判断是否小于10),令并结束本行运算;
    若本行有传送门且不满足上述距离关系,令并结束本行运算;
    若本行无传送门,令并结束本行运算;

       2)隐形食脑者:w1~3第6行。

       另外,由各行可求出本行权重在所有行权重之和中的占比WeightPi同样只与行本身状态有关,而与当前出怪情况无关。

 

  1. 距离上次/上上次出怪间隔(LastPickedi/SecondLastPickedi

     这一属性只与当前出怪情况有关。

     开场时各行的和均为0。

     顺便一提,原文中那张表格是有误的,二至五行的SecondLastPickedi应当有所增加。

 

  1. 直接决定结果的SmoothWeighti
     用WeightPi(注意不是Weighti)和LastPickedi/SecondLastPickedi,就可以计算出SmoothWeighti
2

 

1

 

3
     SmoothWeighti在所有行之和中的占比,即为该行出怪的概率。

     ※因为某些原因,实际上第1行的概率比计算出来的要稍大,而第6行要稍小,不过没什么影响也没法避免就是了。

 

  1. 钉耙

     第一只僵尸必出在有钉耙行,什么也不用算,若第一只僵尸没有用掉钉耙,则后续僵尸不会受到钉耙影响。

 

  1. 一些推论

      1)不讨论出怪情况,Weighti越大,Pi就越大,即权重越高概率越大(不然就不叫权重了);

      2)Weighti=0时,Pi也为0;

      3)Weighti≠0时,最小为0.01,WeightPi最小为0.01/(0.01+5*1)=1/501>10^-6,因此Pi虽然会很小,但并不会为0;

      4)也就是说,丢车保护机制只是将权重调到非常小,并不是完全失效,这点玩过单行战僵王的应该能知道。

 

利用以上规律,给出已有的出怪行,我们就可以算出下一只僵尸出在每一行的概率。计算并不难,都没离开四则运算:

001

但是每一只僵尸都要这样手算太麻烦了,能不能借助科技方便一下?

9 Replies
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

二、出怪行计算器

为了方便计算,我就用学校里信息课学的少得可怜的知识写了这样一份计算器。

网盘链接:点此(包括可直接使用的.exe和源文件.py)

当前版本:v1.1.1(再之前的就不放出来了,没多大意义)

!!!勘误:前5波水路不出僵尸。

功能:输入已出僵尸的所在行数,计算下一只僵尸出在各行的概率。

使用方法:我自认为程序内已经讲得很详细了……

  1. 输入各行的权重,可以手动逐个输入,也可以选择两个预设;其中“6”是会根据波数自动改变水路权重的,但是有一个问题,第4波如果出一只路障,第5只僵尸位于第5波,可以出在水路;如果第4波出两只普僵,第5只僵尸位于第4波,不可以出在水路。预设选取为前者,使用时需注意。
  2. 输入每只已出僵尸的行数,范围1~6;
  3. 若输入0,则进行计算并输出计算结果;
  4. 若输入7/8,则可以更改权重设置,其中7更改单行权重,8更改所有行权重;
  5. 若输入9,则清空记录,重新计算。

截图:

1

 

2

当前问题:

  1. 重复一遍,预设“6”是会根据波数自动改变水路权重的,但是有一个问题,第4波如果出一只路障,第5只僵尸2位于第5波,可以出在水路;如果第4波出两只普僵,第5只僵尸位于第4波,不可以出在水路。预设选取为前者,使用时需注意。
  2. 清空指令“9”只清空了出怪记录,而不能重置权重,但很多时候用到清空指令是需要重置权重的。

展望:

对选行有了进一步了解之后,或许可以解决一些疑惑:我在打雪橇区纯菇的时候,w4的僵尸刷了19次,当时反复犹豫是不是不会出,犹豫要不要停手,现在不会再有这个疑惑了。

在一些非常极限的、需要大量SL的打法中,前期用卡、出怪、经济环环相扣,或许可以用来优化前期逻辑,选择SL量更小的途径。

还可能用于定量地计算打法的稳定性,用于打假。(

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

三、一些计算结果

五行场地开场

1.第1只僵尸

1

出在各行的概率是一样的。

2.第2只僵尸

2

出在各行的概率还是一样的。

3.前两只在不同行,第三只僵尸

3

 比值为1:1:5:5:5,出过怪的两行为1。

4.前两只在同一行,第三只僵尸

4

 比值为1:5:5:5:5。可见要第三只僵尸和前两只在同一行概率还是比较小的(虽然也没那么不堪,5倍而已)。如果丢车呢?丢车行会减小一些权重。

5.前两只在不同行,第一波丢车,计算第三只僵尸

5

比值约为1:2:33:33:33,反而小了,看来没出过怪的行权重占比增加得更厉害。(我有些怀疑我的计算器会不会写错了……)

6.前两只在不同行,第二波丢第一波出怪行的车,计算第三只僵尸

6

比值约为0:1:31:31:31。

7.前两只在不同行,第二波丢第二波出怪行的车,计算第三只僵尸

6

比值约为1:0:31:31:31。

8.前三只在不同行,计算第四只僵尸

1

 比值约为10:1:1:40:40。第四只与第一只在同一行还有可能,与第二、三只就算了。

9.前两只在同一行,计算第四只僵尸

2

 比值约为1:1:40:40:40。

9.第一、三只在同一行,计算第四只僵尸

3

比值约为1:1:40:40:40。

10.第二、三只在同一行,计算第四只僵尸

4

比值约为10:1:40:40:40。总结:第四只和第二、三只在同一行非常掉节操,第一只还好。如果丢车呢?

丢车的情况太多了,随便举一个……显然概率更小了。

4

 

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

 6行场地开场(前4只僵尸一定不会出在水路):

1.第一只僵尸

1

各行概率均等。

2.第二只僵尸

2

各行概率均等。

3.前两只在不同行,计算第三只僵尸

3

比值约为1:1:31:31,和5行场地不一样啊。(一遇到诡异情况我就要怀疑自己写没写错了……)

4.前两只在相同行,计算第三只僵尸

4

比值约为1:31:31:31。

5.前三只僵尸在不同行,计算第四只僵尸

1

比值约为38:1:1:76。

6.第一、二只僵尸出在同一行,计算第四只僵尸

2

比值约为1:1:75:75。

7.第一、三只僵尸出在同一行,计算第四只僵尸

3

比值约为1:1:75:75。

8.第二、三只僵尸出在同一行,计算第四只僵尸

4

比值约为37.5:1:75:75。总结:第四只仍然不能和第二、三只出在同一行。

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

手算了一下,发现真错了……

Reply
1 Reply
xiao_He
(@xiao_he)
Joined: 3 years ago

复合运算
Posts: 212

确认了,是手算错了,就是31.25倍。

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

不过用这个算的话,我那个纯菇雪橇区w4成功的概率是0.0038(约1/263),我却SL了约19次?回头再手算验证一下。

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

v1.1.2更新:

链接:网盘

!!!勘误:前5波水路不出僵尸。

更新内容:

1.场地预设“6”拆分成6和7,其中“6”第4波出一只路障,“7”第4波出两只普僵;

2.重置指令“9”现在能重置各行权重了,当然这是在使用预设的前提下;

3.加入了指令“10”,显示各行权重(由于自动更改权重在计算时才进行,如果对显示的权重有疑惑,先输出一次计算结果再显示权重。)

4.对指令“8”进行了更改,可以选择预设场地了(本来只能自定义的);

5.部分文字前后加入空行,看得更清楚些。

Reply
xiao_He
Posts: 212
Topic starter
(@xiao_he)
复合运算
Joined: 3 years ago

v1.2.0更新:

链接:百度网盘(包括可直接运行的.exe和源文件.py)

更新内容:

1.对脚本结构进行了较大改动;

2.更改了部分表述;

3.部分指令名称发生了改变,具体包括:

  1. 改变单行权重:7→r (reset)
  2. 改变所有行权重:8→R (Reset)
  3. 清空:9→c (clear)
  4. 显示各行权重:10→w (weight)

4.新增指令s、l、[random系]:

  1. s (save):备份当前出怪记录及各行权重
  2. l (load):载入备份的出怪记录及各行权重
  3. [random系]:随机生成若干只僵尸选行,具体见下

[random系]详细说明:

由“r+后缀”组成,可选后缀有p(打印)、s

Reply
1 Reply
xiao_He
(@xiao_he)
Joined: 3 years ago

复合运算
Posts: 212

论坛貌似出故障了,我写的后半段没了……那就不写了,具体文件里有说明。

补充一点,大改脚本后,v1.1.2中显示权重指令存在的问题已解决。

Reply
Scroll to Top
en_USEnglish
Powered by TranslatePress »