植物大战僵尸吧 关注:553,279贴子:5,029,110

理想无尽论(一):总篇

只看楼主收藏回复


说来话长,“真无尽”之概念,一经提出,便几次三番在植吧掀起激烈讨论,笔者也曾在Q群和人撕逼几天。这些争论有这么一个共性,也可能是互联网上所有争论的共性:争论的任何一方都并不因争论而接受或部分地接受对方的观点,两方唯一的共识就是两方没有达成任何共识。我逐渐认识到这样的争论是无意义、非建设性的,因此,我冷静以后觉得应该写点什么。我认为“真无尽”有其不合理之处,尽管当下“真无尽”在植吧已经落得了过街老鼠人人喊打的境地,但也不至于一无是处。我认可“真无尽”的部分理念,取其精华去其糟粕,并提出我自己的一套理论,本文就是为讲述我所理解的“真无尽”而写,与过去若干吧友所说的“真无尽”并不完全一致。


IP属地:北京1楼2023-06-23 00:35回复
    凡著书立论者,名不正则言不顺。我认为“真无尽”被嫌弃的一部分原因,要归于他的名字。“真无尽”潜在的含义是,“非真无尽者即假无尽”,相当于直接地图炮攻击植吧几乎所有的阵型都是假无尽。真假之辨,必然导致水火不容,并且他对“真”字的要求无限拔高,使得“真无尽”本身并没有多少能落实到阵型的产出(没有多少,是指有但不多,而不是没有的意思),而“真无尽”主要也是因为这一点被抨击的最多。实际上七代时也经常抨击六代的阵“假”,但他们做出了不少“真阵”,即与“假阵”相比,更“真”的阵。所以他们的批评并没有多少反对的声音。批评阵是破坏性的,而做阵是建设性的,从难度上说,破坏性工作远比建设性工作简单得多,因此单纯的破坏性工作是很难赢得人们的认可的,而来自完成了许多建设性工作的人的批评会更掷地有声一点。这一点也算我的反思,我批评过很多东西,不过我做出来的东西不多,能不能算得上五五开呢?这恐怕要等我盖棺才能定论。
    因此,我谨慎地选择,将我的理论叫做“理想无尽”。“理想”的对立面是“现实”,这也是我对“非理想无尽”,或者我姑且称为“现实无尽”的理解。“现实无尽”并非与“理想无尽”水火不容,他们只是以不同的游戏方式为目标,而这两个目标并没有优劣之分。理想无尽是“理想的”,我们考虑的问题是,一个理想的玩家,使用一台理想的机器,玩一个理想的PVZ游戏,所以他从不关心是否会有陨石坠落地球,尽管在现实中,陨石坠落地球的概率,也远比理想无尽中考虑的某些问题的概率大得多。但是,这并不妨碍理想无尽考虑这些问题。毕竟,并不是一个问题概率越大,就得越优先考虑,不是吗?


    IP属地:北京2楼2023-06-23 00:36
    收起回复
      接下来请容许我引经据典一番,这不免有掉书袋子的嫌疑,但请相信,我并不需要在贴吧认证学位,我只是分享一下数学史上的故事,借史喻物而已。众所周知费马大定理是数论的明珠之一,而十九世纪中叶的数学家发现,如果分圆域中的代数整数环上唯一分解定理成立(当然那时候不是用这套术语),就可以解决费马大定理。当时包括柯西在内的一批人称这显然成立,或者很快就能给出这一点的证明。遗憾的是,这件事并不成立,而他们最终也没有给出证明。库默尔引入了“理想数”用以弥补这一缺憾,发展出了一系列全新的理论,并解决了费马大定理在100以下的情形。现在,理想已经是代数等许多数学领域中重要的组成部分之一。借这个故事我想表达几个观点:
      理想不等于空想。正如理想数本身建立在一套扎实严谨的理论基础上,并且实际地解决了费马大定理的一部分,理想无尽仍应该以建设性的工作而非破坏性的工作为目标,理想无尽是为了发展新的阵型,解决新的问题,而不是为了破坏已存在的现实无尽的成果。需要说明的是,否证命题,即论证某个条件无法满足,某个阵型无法成立,这样的工作也是建设性的,这样的工作可以指示后来人工作的方向,可以考虑别的方式,或者弱化后的形式,或者量化条件被破坏的程度。假如你赞同这样的理想无尽,就不要去批判某某阵型拿不出手,或者是公屏喷某某阵型自欺欺人,而是做一些精确的计算,如单次选卡破阵概率,或者做一些拿得出手的阵来,并说明这个阵好在哪,如果拿不出来,那么先多去学多去思考。假如你能拿出有意义的成果,那么所有人都会和你站在一边。
      理想不等于非黑即白。正如唯一分解定理并非对所有环成立,如果你设定的条件导出了不可能,那么答案就是不可能,可这也就走到头了。但我们可以走的更远:一个更有意义的研究是,放宽哪些条件时,可以变得可能?假如可能,会破坏某些条件到什么程度?假如条件一定会被破坏,那么要多久才会被破坏?从0到1之间充满了太多的可能性,如果完美并不存在,那么理想便是追求更接近完美的存在。
      理想不等于不现实。理想数到如今近世代数中的理想,它始终是为了辅助思考问题的工具,数学家们起了新名字,却不是为了自立新门派。我没有谈及柯西来自法国或者库默尔来自德国,因为数学家的眼中只有问题而没有国籍。我之所以取名理想无尽,也是因为,理想和现实是一组对立但是统一的概念,他们之间没有褒贬之分。理想无尽的成果,需要以现实的形式展现,而且会考虑很多现实中遇到的问题,将之抽象建模分析,而现实无尽的玩家,也无法排除或多或少曾有一些理想吧,尽管不是理想无尽的那种理想。因此我并不是反对谁,我也不对谁说话,更不存在自立门派。我想提出一系列新的想法,君子和而不同,我希望大家能够接受一种不同的观点的存在,就算你不理解这个观点本身。


      IP属地:北京3楼2023-06-23 00:37
      回复
        以上是理想无尽之正名。扯了这么多,一定有人问了,你开空头支票让别人产出成果,那你自己的成果呢?很遗憾,我没有太多的时间研究PVZ这个游戏了(我会在有生之年把和人打赌的价值不菲的5KF挂机做出来的),所以我把为数不多的闲置精力放在了这篇文章上。借此,我想给出理想无尽论的一套规范,我认为这至少比没有好。但至于有没有人会以此为基础发展理想无尽,或者是理想无尽会不会从此被扫进历史的垃圾堆,而且大概会有99%的可能,但那我也不得而知了。不过所幸我遇到几位植吧好友认同并热衷于继续发展我的理想无尽论,这给了我继续写完这篇文章的动力而不是让他无声无息地永远烂在我的电脑里。以下是理想无尽之立论。


        IP属地:北京4楼2023-06-23 00:37
        回复
          我们所通常说的无尽,是指PVZ的一个游戏模式。PVZ是宝开公司在2008年开发的游戏《植物大战僵尸》,而这个模式最初指拿到金向日葵后解锁的泳池场地的无尽生存模式。游戏在发行时需要在Windows平台上运行,但后来也有移植到各平台上的版本,在不同版本中也有不同的特性,而原版无尽生存通过修改器也可以进入在其他场地的模式。宝开公司如今已经无人问津,笔者也没有做过详细调查。如今主流的Windows系统,尽管微软保证后向兼容,也与当年的系统不尽相同,更何况没人能预测明天会不会有陨石坠落地球。所以,理想无尽的定义,尽管与现实中一台搭载Windows系统或者虚拟机的电脑上运行的PVZ游戏程序进程密不可分,但却并不基于此。
          理想无尽发生在一个想象的世界中,这个世界按照这样的规则运转:这个世界的时间流速是可以控制的,这个世界永远不会发生灾难,电脑有无限的电力,也永远不会出错,有一个永远不会疲倦的,无比聪明,而且疯狂热爱PVZ的玩家,从这个世界的开始直到这个世界的结束,都一直在玩植物大战僵尸游戏。游戏会播放声音,渲染画面,但一切的对象均存储在内存中,而这位理想玩家有能力事无巨细地读取所有需要的内存,并选择是否以此进行决策。
          游戏的过程由一个个不断重复的游戏主循环构成(在现实中这是位于内存0x452650的函数),游戏的帧率控制器保证这个循环每秒运行100次,每运行一次,耗时1厘秒,被我们称之为“帧”。但既然在这个世界时间流速可以任意放慢,那么秒亦或是厘秒均失去了意义;因此,我们认为PVZ是一个【回合制】游戏,在每一回合,玩家与游戏进行这样的交互:
          1. 游戏获取本回合需要的随机数;
          2. 游戏根据既定的规则结算所有对象的位移、伤害、生成、消除等;
          3. 玩家读取游戏的所有数据,并进行决策与操作。
          除了在战斗界面进行的以帧为单位的回合制交互,根据规则,僵尸并不是随意地,而是仅会在满足特定条件或者达到特定时机时批量生成,因此僵尸生成的时机非常重要,通常这样的“关键帧”被称为“刷新”,这也标志着“波次”。而每经过20波,便会进入“选卡”状态,此状态下游戏生成接下来直到下次进入选卡状态前要开展进攻的僵尸种类,而玩家选择携带直到下次进入选卡状态前不可更改类型的植物。选卡对直到下一次选卡之前的游戏形式与玩家行动会产生决定性的影响,因此我们也将选卡而不是帧作为接下来分析的基本单位。


          IP属地:北京5楼2023-06-23 00:37
          收起回复
            这些是对理想无尽的设定。对于这样一个系统,有些参数(或者说设定)也是可以变更的,在不同的参数下问题的性质会截然不同,我们也进行简略的介绍:
            1. 随机数。游戏本身的规则对各随机数均规定了应有的概率分布。但是游戏本身使用的是梅森旋转伪随机算法。对于给定的种子,随机数实际上是【确定的】,不过在通常意义上来说,我们也很难分辨。因此我们将随机数参数分为三类:
            a) 伪随机。这里的伪随机特指利用到伪随机的性质,即选取种子,提前演算随机数序列,并利用预先计算的随机数针对性地采取决策。也包括为了达成某些条件,枚举筛选需要的种子的情况。这个参数还加上了这样一条规则:游戏的初始种子是可以修改的。
            b) 真随机。在理论的概率分析时假设随机数取决于游戏规定的概率分布。在基于代码的批量模拟时,尽管(从原理上说)仍然使用的是伪随机数,但是不利用任何有关种子的特殊性的信息,并且通过提高样本量以提升可信度。也可以考虑使用真随机数如random.org网站等。
            c) 敌对。假设随机数由僵王博士操控,任何随机数总是被选择为规则允许范围内的最坏、最不利于玩家、最针对玩家的策略的那一个。在特定情况还可以假设随机数是适应性的,即僵王博士会根据玩家的策略动态地调整给出的随机数。在这个参数下随机数已经不“随机”了,僵王博士每进行一次操纵,这组随机数出现的概率就变得更小,小到现实中永远不会见到的程度,但这在理想无尽中只是特定参数下所考虑的一种情形,这只是为了研究最坏情况下的游戏如何运转。严格来说,“最坏”“最不利”这个描述是不够严谨的,因为必须要定义什么是“坏”,才能定义什么是“最坏”,而这也是和玩家的阵型相关的,顶满阵型怕极速,而后退阵型怕红眼关;因此,敌对参数下,我们实际考虑的并不是僵王博士如何选择哪一种最刁钻的策略,然后予以应对,而是【无论僵王博士选取了什么样的随机数】,玩家均存在一种操作方式予以应对。这并不是总是只考虑最刁钻的那一种情况,而是将所有情况考虑在内,只不过通常大部分的情况更容易被解决,因此我们需要花更多时间考虑如何解决剩下的情况,直到【所有】情况都被解决。
            2. 内存读取。即玩家的所有“读”操作。在现实中的PVZ游戏通常的游玩方式下,人类玩家能接受到的声音与图像信息便是他的操作所能参考的全部信息了。但是随着注入式键控的出现,游戏的全部内存均可以被任意地读取,那么键控玩家在内存读取方面的能力与理想玩家已经没有差别。对于内存读取的限制,并不是对能力的限制,而是对意图的限制。提前读取或者能读取到更精确的信息,可以对决策与操作带来极大的便利。而对此进行限制,则可以考验决策与操作是否更强。我们将内存读取参数分为三类:
            a) 任意读。玩家可以任意地读取游戏的所有内存。这意味着,所有的随机数,在按照规则被确定后即可被读取,并能参与到玩家接下来的行动决策中。浓雾形同虚设,屏幕外的僵尸的行动也在掌控之内,在选卡开始阶段便已经知道本次选卡各波每种僵尸出现的数量等等。
            b) 限制读。实际上,当我提出任意读时,有部分内存的读取被一些人视为等同作弊,或者认为是被禁止的行为;然而对于这些内存,不同人的意见也不统一,所以限制读认为,尽管玩家拥有读取全部内存的能力,但在制定策略时,某些内存是不可读取的。它可以被视为一类规则集,而每套规则允许某些读取,不允许某些读取。这包括:玩家是否可以在选卡阶段读取出怪列表各波僵尸数量(仅可读取种类和本次选卡此类僵尸数量是否大于200);是否可以提前读取刷新血量比例(即无法提前200cs以上准确预测刷新)。是否可以读取僵尸血量坐标等等。
            c) 原教旨主义读。玩家必须像人类一样,只能读取游戏窗口的800*600像素值与声音的输出。实际上,除了派一个真人玩家来玩以外,目前暂时还未有实现此种读取方式的框架出现,如果要出现的话,可能得首先训练一个能够图像识别僵尸和植物的神经网络。这意味着目前的人类还无法实现恒定以高精度操作却以原教旨主义读的方式游玩PVZ。此种读取方式出现在某类“真无尽”的定义中,但正如本段的分析所言,要对这一模型进行模拟就必须依赖于高水平的人类玩家,但这意味着很难标准化批量化,因此我对此方向的前景持悲观态度。
            3. 操作精度。这里的“操作”主要指玩家的“写”操作。广义来说,玩家在玩家回合的行动是:读,思考,写。前面已经讲过读,所以我们主要讨论“思考”和“写”。思考决定如何“写”,但规则决定“能怎样写”和“写什么”,这也是玩游戏的过程。因此我们基本不对思考做任何限制。而对于“写”操作则需要谨慎:倘若完全没有“写”操作,那么这就不是游戏而是CG动画了;但是直接将所有植物伤害改成1800那也完全失去了研究的意义。一般而言,玩家的“写”操作包括:使用鼠标点击游戏窗口的800*600像素中的某一个,或者是按下/松开键盘的某个按键,也可以等效为:点/发炮,种/铲植物和暂停。但现实中“写”操作则包括违反这一规则的操作。例如为了使某些操作精度更高或者成本更低,其实现方式是直接修改游戏时钟、直接调用游戏内函数,甚至为了稳定实现I3,直接对植物生效时间进行了修改。从“写”的定义来说,部分键控操作是不符合理想的“写”操作的规范的。最后提一嘴前面说到的伪随机修改种子的情况也是特殊的“写”的一种,不过我们一般不讨论伪随机所以略过。为此,我们将操作分为两类:
            a) 任意精度。精度越高,需要的算力便越高,如果没有充足的算力,那么就无法充分发挥精度带来的优势。因此我们假设玩家拥有无限算力和无限精度。前文已经谈到现实中的键控有一些操作,是进行了非点击或键盘输入的。但在无限精度和无限算力的假设下,这些问题都是会可以解决的:我们假设鼠标和键盘的信息从操作系统传递到游戏程序的过程稳定且高效,因此不需要为了考虑稳定性而调用游戏原函数;也不需要担心暂停键会按烂,所以可以假设任意女仆;而玩家当然能预知自己三秒内的操作,从而可以预测栈位,因此要实现I3也不需要修改植物生效时间。可以认为,现实中的键控是任意精度操作的一种等效近似,但上述这些操作均是任意精度下可以做到的。同时,无限算力还意味着,玩家可以在任一帧,在脑/程序中模拟当前场景按照当前已知的随机数继续运转任意长时间(直到出现需要获取新随机数的情况之前),然后再进行决策。例如,在每一波次的第一帧,玩家可以通过读取各僵尸的速度参数提前预测接下来的运动,以计算他接下来的发炮造成的伤害,从而提前预测无io的P6在这一波是否会在401cs时刷新。这是他在这一模型假设下具有的能力,但并不意味着键控框架的玩家会写代码实现这一功能,当然目前的框架也能实现这样的功能。
            b) 人手精度。即真人玩家能够达到的精度,同时这也意味着只能使用人类玩家的算力。人手精度会随着玩家本人的状态而波动,尽管暂停补手速可以补充算力和精度,但按暂停键本身也有精度上限。假如是人类玩家使用TSV或者高级暂停,那我认为在分析其无尽能力时,与任意精度等效。因此这一参数基本不在理想无尽的考察范围内。


            IP属地:北京6楼2023-06-23 00:38
            收起回复
              接下来我们讨论理想无尽的定义。“无尽”意为没有穷尽,没有止境。我们构想了一个理想世界,有一个狂热的PVZ玩家始终在玩PVZ,我们想知道他是否能永远不被食脑。而在这无尽的时间长河之中,每次随机数的选择都为命运划分了一个十字路口,将游戏的进程导向一种独特的未来,而在无数个平行宇宙中,在有的世界线里,玩家可能始终没碰到红眼,或者小丑从不爆炸,而无尽自然不费吹灰之力,而在有的世界线里,红眼扎堆出,小丑出场立爆,无尽便困难重重。我们所要求的无尽,不仅是时间意义上的无尽,也是可能性、世界线意义上的无尽。一个首要的问题是,是否存在一种策略,使得无论在什么样的世界线里,玩家都总能达成无尽的生存?这便导出了我们的第一个问题:是否存在敌对、任意读、任意精度模型下的理想无尽?
              然而现实是残酷的,尽管目前第一个问题的答案已经是“是”,但进一步拓展非常困难,问题难度极高。相比之下,一个相对更弱化的问题是:是否存在真随机、任意读、任意精度模型下的理想无尽?这一问法数学上更严谨的说法是:是否存在一种策略,使得在真随机、任意读、任意精度模型下,几乎必然达成理想无尽?我们暂且将前者称为绝对理想无尽,后者称为几乎必然理想无尽,前者是后者的充分条件。理解两者的区别需要一定的数学基础,篇幅所限我不打算展开细说,我可以简单举例说明以两者的区别:前者要求面对无限多的连续红眼关给出应对策略,而后者要求面对任意有限多的连续红眼关给出应对策略。即便如此,达成这两个条件的难度都不低,验证是否达成的难度也不低。


              IP属地:北京7楼2023-06-23 00:38
              回复
                不过,显而易见的是,很大一部分的阵型是既无法达成绝对理想无尽,也无法达成几乎必然理想无尽的。即便如此,我们可以尝试量化随机变量的大小,例如能够挺过的选卡次数期望,例如破阵的概率。因此我们提出第二个问题:若某阵无法达成任何一种理想无尽,那么它的期望生存选卡次数是多少?当我提出这样一个问题时,仔细的读者会意识到我做了一个并非平凡的假设:玩家的策略是恒定的。在我给出理想无尽的设定时,我提到这是一个回合制游戏,而适应回合制游戏设定的数学模型则是决策树,即一个无限的“对任意的随机数,总存在一个此时能够采取的行动,使得接下来对任意的随机数,总存在一个此时能够采取的行动,使得接下来……”序列。但在随机数为真随机的假设下,游戏过程变成了一个只有玩家根据随机数出现的结果进行应对的过程。这样的过程类似于俄罗斯方块游戏,类似于互联网的服务器——遗憾的是,我没有找到描述这类算法的术语。但是,在假设玩家的策略恒定时,这就变为一个随机过程,也就是大家熟知的马尔科夫过程。为了避免拖延节奏,我们将在之后的部分展开讨论这些。眼下,我们暂且接受,我们研究的是在马尔科夫过程下,给定初态后,理想无尽生存能够持续的期望选卡次数。
                我们称一个阵型能够理想无尽,如果它能够达成几乎必然理想无尽;我们默认理想无尽的模型是真随机、任意读、任意精度的。理想无尽要研究的的两大基本问题总结如下:
                1. 是否存在能够理想无尽的阵型?
                2. 若某阵无法达成理想无尽,那么它在理想无尽模型下的期望生存选卡次数是多少?
                我会将主要精力放在第二个问题上,因为我个人认为第二个问题研究价值高一点。有人会提问是否也可以考虑单次选卡破阵率,这在某些情况下与期望生存选卡次数是等价的:在真随机假设下,如果每次选卡后阵型都会恢复到原来的样子,那么生存选卡次数就是以选卡破阵率为成功概率的几何分布,其期望就等于单次选卡破阵率的倒数。但这基于每次选卡后阵型恢复到原来的样子的假设,而这通常是不容易实现的,具体原因我们也会在下文中讨论。所以我们会主要分析“期望生存选卡次数”这一核心概念。


                IP属地:北京8楼2023-06-23 00:38
                回复
                  也可能会有人好奇,为什么以选卡为单位?这是因为,每次选卡的状态之间,可以近似地视为马尔科夫链。马尔科夫链是指,一个随机的序列,当给定了某一项的值时,那么下一项的分布就与这一项之前的所有项无关。道理是很简单的:例如本次选卡剩余阳光5000,那么不管上一次选卡剩余阳光是2000还是8000,下一次选卡的阳光值的变化都是基于本次选卡的,而与上一次以至于更早之前的选卡剩余阳光无关。但如果以帧为单位,许多随机量就容易是耦合的:例如你上一帧种植了咖啡豆,那么198帧以后蘑菇就会唤醒,而再过100帧可能蘑菇就要生效,蘑菇生效期间的这298帧全部都是耦合的。当然,你也可以把蘑菇设置为状态的一部分,但需要如此处理的状态还有很多,若以帧为单元,那么状态空间会难以置信地大,使得我们很难开展有效的分析计算或数据采集。而以选卡为单元时,尽管状态空间也不小,但至少也是一个相对合理的程度。从这里我们也看到:包括阳光在内的许多因素并非总能在一次选卡内复原,因此我们对大部分阵型不能假设每次选卡后这些因素会复原,所以单次选卡破阵率并不容易直接得到。另一个原因是,每次选卡前的出怪对游戏策略和游戏要素的影响远大于其他因素;这是从目前为止大部分的阵型的策略中可以总结出来的,例如向日葵的生产cd是2350到2500之间的随机数,曾哥的攻击间隔是186~200之间的随机数,但这些随机数是大还是小,与出怪是否有红眼对阵型运行造成的影响相比,几乎可以忽略不计。因此选卡不仅应该是单位,而且应该是可行的最小单位。
                  至此我们分析的是游戏要素可以以选卡为单位切片,并建模为马尔科夫链,那么现在我们来展开讨论,为什么我们可以假设策略是不随选卡次数变化的。但回答这个问题之前,我们首先要提问,什么是策略?简单来说,策略就是如何进行操作的方法。策略可以通过各种方式描述,自然语言,轨道符号,脚本程序等等,但不管使用哪种方式,均可以等价地转化为一个决策树。在选卡的开始,通过读取当前阵型状态、阳光、本轮出怪等信息,对要选的卡和接下来的打法就有了初步判断,而局中也会有随机应变的部分。当然,有的策略会随着轮数的增加而不断变化,但这种策略一般称为“开局”、“高F开局”、“高F变阵”。根据游戏机制,125F以后的选卡,出怪的分布是完全一致的,因此如果我们只看125F后的游戏进程,那么对于PVZ理想无尽这个目标来说,策略一般不会随着轮数变化。有人会提议:他的策略是,若慢速关则如何如何,若快速关则如何如何等等,这是会随着出怪变化的,不是“不变的”。但请注意,我所说的“不变”是指策略随着轮数变化,这里提议的策略看似随着出怪变化,但从更高的视角来看,这仍然是【一个】策略:即选卡开始时,读取出怪,若慢速关则进入分支一,若快速关则进入分支二等等,从策略结构来说,这只不过是在顶层加了一个判断分支环节而已,它们能被整合为一个策略。
                  但是,仍然存在这样的策略:例如一个十炮阵,玩家特别喜欢在第奇数轮玩P5节奏,但要在第偶数轮玩S6节奏;那么这样的策略就不可避免地与轮数有关了。诚然,这也是一个很有可能达成理想无尽的阵型,而且这一复合策略并不符合我们所说的策略恒定的规则。但这个复合策略的期望生存选卡次数,可以通过分别分析纯P5的期望生存选卡次数与S6的期望生存选卡次数,然后计算策略中使用P5玩法与S6玩法与所占的比例得到。从目的来说,我们只需要通过对单纯策略的期望生存选卡次数进行计算,就可以得到这种复合类型策略的期望生存选卡次数。我所做的策略恒定的假设,并非是一个逻辑上成立的推论,而是一种约定:将我们的研究范围缩小到一个更容易把握的范围,我们约定暂时只考虑不随选卡变化的那些策略,而在这之外的策略可以根据已有结果展开推算。以上的论证并非是论证,仅仅是举例而已,我尝试说明这么一个道理:一个策略要么是不随轮数变化的,要么是可以通过对若干个不随轮数变化的策略的计算结果推算出来的。我可以自信地断言:目前出现过的所有PVZ玩法的策略都符合这样的规律。但以我浅薄的知识水平而言,我无法预言是否未来会出现打破这一规律的非平凡策略。从务实的态度出发,我认为,没出现之前就应认为没有,等到出现了以后再考虑如何修正理论。


                  IP属地:北京9楼2023-06-23 00:38
                  回复
                    要计数,那么便要考虑计数起始与终止条件。我们计数的起点应当在出怪饱和后,即根据游戏机制的125F以后。在饱和之前的时间是用来为玩家构建所需要的阵型用的,通常被称为“开局”,我们所知的大部分阵型都是能开局的,但开局并不是我们关注的对象。初态即按照惯例,8000阳光开局,使用布阵器。至于终止条件,那就是破阵。那么,什么是破阵?破阵就是就是僵尸进屋食脑。但我想问的是:破阵的因素是什么?我将之这样归纳:阳光/存冰耗尽;植物损失;策略未能考虑的意外情况。这几个因素并非互斥,也可能有重叠的部分,我将他们一一分别阐述。
                    阳光和存冰很好理解,白天关卡天降阳光和双子向日葵定期补充,每当种植物时消耗,左上角表示库存量,而存冰只有白天关卡有,当带卡双冰时每5001cs补充两个,每当用冰时消耗1个。植物损失也不难理解:每当出现碾砸炸啃时,植物便会出现损伤,有的伤害扣在南瓜上,有的扣在植物本体上,假如植物损伤累积到其血量或者受到秒杀伤害,则植物死亡,无法造成应有的输出,从而导致僵尸进一步破坏阵型最终破阵。那么,什么是“策略未能考虑的意外情况”呢?
                    我们首先尝试举例说明。在这一大类中,最主要的就是提前刷新与延迟刷新。比如某阵型使用了经典的I3PPDD-PP循环打法,在某次PP之后,刷新事件并没有在之后的200cs时发生,而是延迟到了PP生效之后的220cs,而为了触发I3,冰菇在PP之后的210cs生效,导致下一波刷新的僵尸没有受到冰冻,他们长驱直入,而在接下来的PPDD使红眼与白眼投出小鬼吃掉玉米加农炮导致破阵。提前刷新指,在预定的策略中此时不应该刷新时,发生了刷新;延迟刷新指策略中此时应该刷新时,却没有发生刷新。
                    我们已经提到过,策略可以表示为一个决策树,因此每当进行了主动的操作(玩家的操作),或者被动的操作(游戏机制进行的步骤,例如隐运算IO),场上的局面就有可能出现分支,此时策略会体现为“若出现某种情况,则如何如何操作,否则如何如何操作”,也可能形如“不管有没有出现某种情况,都进行某个操作”,这就是决策树。而在这一切分支中,凡是策略未曾预料到的,或者是可以预料到,但玩家也不知道遇到这种情况该如何操作的。这种情况,我们称之为“策略未能考虑的意外情况”,并认为这等同于【破阵】。


                    IP属地:北京10楼2023-06-23 00:39
                    回复
                      有人会质疑,出现意料之外的情况并不等于“破阵”,例如很大一部分的超多炮阵型,如果拥有至少4门炮在安全炮位,且有一定数量的存冰和花,那么不管出现什么样的意外情况,都可以立即改变策略为:运行只以这四炮为核心的类纯四炮的阵解,在守住植物的同时逐渐积累阳光,重新将预定阵型的玉米加农炮种上,然后重新运行超多炮的阵解。我的评价是,它的确达成了“防止脑子被吃掉”的目标,但是就我们计算期望生存选卡次数的目的而言,这个耦合了超多炮与四炮玩法的策略的期望生存选卡次数,是可以通过分别计算原超多炮阵型和四炮阵型相关的参数,再组合计算得到的:我们可以重新将此策略建模为拥有三个态的马尔科夫链模型:超多炮态、四炮态、破阵态;当处于超多炮态时,有一定概率直接破阵,一定概率遇到无法处理的情况但可以选择无缝转移到四炮态,剩下的情况则仍然可以继续运行超多炮策略;当处于四炮态时,有一定概率破阵,有一定概率可以恢复到超多炮态,剩下的情况继续运行四炮策略积攒阳光。出于这个原因,我们可以对上述处理作出这样的改动:如果遇到了仍有余地能变更为四炮阵的情况,记为情况一;而遇到已经完全无法挽回的情况,即破阵,记为情况二。对于这个超多炮阵型,我们分别计算进入情况一与进入情况二的概率,之后结合对四炮阵的分析,联立求解就可以得到综合策略的期望生存选卡次数。
                      从理想无尽的定义出发,我们的要求只有无尽生存的期望轮数,因此以上的处理没有问题。但是,我更想知道,或者我推测更多人想知道的是,哪怕是在这个模型下,保持在超多炮状态的期望轮数是多少?过去,贴吧曾用“命题”以描述这一点,例如,对于一个24炮阵型,则要求达成“24炮”的命题,而如果中途出现了损失炮,但并未破阵,而是逐渐把炮补回来的情况,则被视为“违反命题”。如今,“命题”论也出现了种种问题与种种争议,因此我避免使用“命题”一词,但是我想表达的意思与此有一定相似之处。我们既然以马尔科夫链建模,如果不能达成几乎必然理想无尽,那么“破阵”态是吸收态,“四炮”态与“超多炮”态均为瞬态,无论初态为何,最终几乎必然进入“破阵”态。我们是为了处理“超多炮”态无法处理的情况,才引入了“四炮”态的,根据期望的线性性,新策略的期望生存选卡次数是被延长了的,但延长的长度,恰恰等于“四炮”态的期望生存选卡次数。如果能够达成几乎必然理想无尽,那么我们在知悉这一事实的基础上,更好奇的是:场面会以多大比例的时间处于“超多炮”态?这就是马尔科夫链的稳态分布。请注意:我并没有尝试定义,一定要以多大的比例处于“超多炮”态,才能称为达成了“超多炮命题”,或者这才能称之为“超多炮阵”,也没有尝试宣扬,“超多炮”态的稳态分布的概率越大,则越是一个“真”的超多炮阵。我所关注的,是这些量本身的计算,出于优化阵解的目标,我也会考虑什么样的方法是有助于提升这些量的。总而言之,我不想引入任何关于阵解的价值判断,我只关注其中的技术细节。我可以预见可能未来会有人在这一套技术发展到一定程度时,如果可能的话,做一个扑克所有阵的期望生存时间表,或者所有能达成理想无尽的阵的保持主体状态的生存时间占比的表,进而上升到对阵作者的指指点点,我提前在此声明,我不希望发生这样的事,我觉得将测量的结果汇总是有益的,但我不提倡进行价值判断,不管是对阵的还是对人的。
                      至此,我们仍是通过举例说明了“策略未能考虑的意外情况”可以分为“仍然可以转化成四炮阵打法”的情况与“无药可救,破阵”的情况,读者可能会认为计算概率时将两者均考虑上即可。但事情果真这么简单吗?我觉得,写东西不能开空头支票,做阵也不能开空头支票。一句笼统的“转四炮阵”就行了,与顶满阵型遇到极速关连炸时的“转后退打法”就行了是何等地相似。无炮的确有防连炸设计,超多炮也有高F变阵,但是他们都是对特定的阵型所做的特定的操作,很难说能够平凡地推广到一切阵型。不是所有的顶满无炮都能随时无缝转后退,你可能都没带荷叶卡,水上都放不了核,或者场上一堆三血红等等。而对于超多炮来说,虽然PE有纯四炮,但不意味着超多炮遇到超前置炮完全损伤时就一定能运转四炮节奏救回来,比如万一此时恰逢阳光不多,亦或是恰逢下半场存冰刚刚告罄,本来必须等这波冰波拖十几秒以上的,结果意外刷新了,又比如是个屋顶阵等。总之,并不是所有的情况都能转,而判断一个局面是否能转四炮打法这个问题本身,也是极难回答的。因此,我认为,只有策略明确地设计好了,如果遇到了何种无法处理的情况时,如何应对,且有完整的一系列处理的操作,才可以将这一部分的操作纳入考量,更精确地说必须要有能够体现为键控脚本的(使得能够进行批量测试),或者是其他具有相同详细程度与可验证程度的策略,才可以说,遇到了意外情况,转某某策略。至少我认为,一句笼统的“8列炮被炸了就转纯四炮ch4”是不够的。因此,遇到了策略未能考虑的情况,即等同于破阵。


                      IP属地:北京11楼2023-06-23 00:39
                      回复
                        行文至此,已过万字。对于阳光存冰等各项要素更为具体的讨论,我会放到之后的文章中。本篇作为总篇,还有一个问题需要讨论:解耦合。在我刚提出以选卡为单位建模时就已经提到过,以帧为单位会使得状态空间太大以至于难以计算分析。但是,哪怕以选卡为单位,这也不意味着就更容易分析了。以阳光为例,如果对每个阳光值确立一个状态,那么从0到9990就有1999个态,算它的分布就要处理一个1999*1999的矩阵。但这还没完,当前场上存冰的个数可以是0~5,各个南瓜的损伤情况也不同,每个南瓜的血量是4~4000的4的倍数的值,也有1000个状态,假如把它们全部放到一起,那么我们的算力是远远不够的,而更大的问题则是采样的样本数也很难满足需求。有人会说,能不能分别计算阳光掉到0需要多少时间,存冰告罄需要多少时间,没有冰时纯放羊的破阵概率,南瓜补不过来导致植物丢失的概率等等。但是问题在于,这些要素并非是相互独立的,难度高的关,越需要补南瓜,那么就越需要消耗阳光,而补南瓜需求少的关,阳光消耗量也会减少等等。这些随机量之间并不是相互独立,而是存在关联的,不对其他量加以限制而单独观测其中的某一种量,得到的只是边际概率,这是不准的。
                        除此之外,一个更大的问题是,测量本身可能也是有误差的。比如说,批量测试某个阵型在不同出怪下(以及对应的策略下)的阳光涨落时,如果中途破阵,则那一次的数据不会被采集,即我们能测得的阳光数据是基于阵型不会被破的条件,而不是基于完整的概率分布的。


                        IP属地:北京12楼2023-06-23 00:40
                        回复
                          如果我们使用单次选课破阵概率模型,那么我们可以使用联合界以解决这一问题。假设每次选卡结束后,阵型都恢复到与上一次选卡结束时相同的状态,那么这个马尔科夫链只有两个态,我们只需要分析运阵态转移到破阵态的概率。破阵当且仅当阳光归零,或存冰不足,或植物损失,或策略未考虑到的情况,那么破阵概率不大于这四者之和,于是我们只需要分别分析这几项的边际概率。这给出了一个总的破阵率的一个上界,尽管它本身的值可能比较难以计算,但有时一个上界也是足够的。
                          当然,满足这样的条件的阵型极少,但是,有很大一批阵型,除了阳光和存冰以外的因素,都是每次选卡开始时重置的(或者干脆就是只与出怪有关,在选卡开始时就可以确定,例如顶满阵型前排被炸的概率,或者是超多炮阵型意外刷新导致破阵的概率)对于这类阵型,我们可以建模一个只有阳光值(或者加上存冰数)的马尔科夫链,每个态对于每种出怪有一定的破阵率,而在没有破阵时,阳光的变化遵循一定的分布,而这个分布可以直接被测量,从而计算期望生存轮数。能这么做的原因是,其他因素的破阵率与阳光无关,而假如运行阵型一长段时间所收集的阳光数据,恰恰是当未发生破阵时阳光的变化情况。严格来说,我们并没有解耦合,只是这几个因素本身没有耦合。


                          IP属地:北京13楼2023-06-23 00:40
                          回复
                            而对于不满足这样条件的阵型,我目前没有想到很好的解耦合办法。我所想到的是两种途径,其一是,尽管需要将很多可能性考虑上,但是概率空间是取决于出怪的,那么将出怪分为若干个聚类(同一个聚类的出怪对策略造成的影响可忽略不计),仅考虑对每个聚类,各个因素的变化情况。这可以使得尽管状态空间巨大,但是所对应的概率转移矩阵是一个稀疏矩阵,因为每一行的项数等于出怪聚类的个数。第二种方法是,分别通过各个要素的边际概率计算期望生存选卡次数,取最小值;综合的期望生存选卡次数不会比这个更大,这实际上给出了一个上界估计,但我们可能难以给出一个下界估计。
                            不过,不管什么样的阵型和策略,你总可以冲关(模拟)来估算期望生存选卡次数。长冲关冲到了多少关,与这一阵型以及相应的策略期望生存能到多少关,并不能完全划等号,但他提供的数据可以为推算期望带来很大的便利。很多情况下,理论的严格推算是无法做到的,但是冲关能够提供需要的数据。
                            以上是理想无尽论总篇。未来我会展开详细分析讨论阳光、存冰、植物损失与意外因素几大破阵要素。在我从理论方面编写理想无尽论的同时,我也在考虑开发一套适用于测量阵型的破阵率的程序框架,使得更多的人能够更方便地分析测量破阵率,降低门槛,或者在我们的工具的基础上继续开发更多的东西。如果你有想进一步深入讨论的内容,欢迎联系作者。


                            IP属地:北京14楼2023-06-23 00:40
                            回复

                              好冷,沙发自占


                              IP属地:北京15楼2023-06-23 00:44
                              回复