PVZ中发现的数学问题

查看 49|回复 9
作者:pzx521521   
问题
[ol]
  • 我的描述不规范的地方麻烦指出一下,有些我自己都感觉比较一言难尽,但是又不知道咋描述比较合适,尝试用ai修改好像也没啥用。
    (比如我开始算错了,以为都是2S- t(x1)的情况,也就是T(x1,x2,x3)的值与x2、x3无关,能否直接另外采用一个
    F(x1) = T(x1,x2,x3) = 2S- t(x1)
    的描述方式?还是直接写成T(x1)=T(x1,x2,x3)?感觉写起来很怪。我明显没让ai看懂我的问题,给我回了一些不知所云的东西,人类应该能看懂我的意思吧)
  • 这个问题应该属于某个问题的变种,用某个定理或推论应该可以很容易地解决,因为确实比较简单。但我本身不是学数学的,建模也好,经典问题也好,根本对不上号,问ai就跟我说什么博弈论、组合优化啥的,跟没说一样。
  • 考虑推广情况,如果从三行、四行推广到n行,或者加入三线位置的考虑,将IZE的算血公式(见后文算血公式章节)加入计算,又是如何计算。此外倾斜阵(地刺+杨桃)也是多行攻击的情况。
    [/ol]
    ps:欢迎讨论,但是不欢迎直接扔ai回复的灌水。我不确定自己用的提示词有没有问题,反正问了半天是各种错误,让它帮忙列举所有的可能性都会算错,所以直接复制粘贴的还是算了。
    描述
    在植物大战僵尸的我是僵尸模式中,三线射手(攻击本行和上下邻行)这种可以影响其他行的植物需要优先消灭。那么如何根据每一行三线射手的数量来确定最佳的僵尸放置顺序,使其受到的总攻击次数最小化
    比如前三行分别有1、3、2棵三线,应该优先攻击哪一路
    条件简化
    [ol]
  • 不考虑其他植物和三线的位置的影响,可以近似理解为在1列叠种若干三线
  • 每次只放一个僵尸,消灭一行后再放其他行,不考虑同时在多行放僵尸互相承担伤害或者交叉掩护的情况
  • 不考虑三线的攻击延迟、攻击频率、僵尸移动速率等问题,每有一株三线参与攻击计为1
  • 先考虑最简单的三行植物的情况(按理说上下边界的两行特殊性也应该干掉,但是没想出怎么举例)
    [/ol]
    计算示例
    用t(x)表示第x行的三线数量,也即此行三线会造成的伤害值。T(x1,x2,x3)表示按照第x1行、第x2行、第x3行的顺序依次放置僵尸。
    例如计算T(2,1,3):
  • 在2行放置僵尸时,受到t(1)+t(2)+t(3)的伤害
  • 在1行放置僵尸时,因为2行清空,受到t(1)的伤害
  • 在3行放置僵尸时,因为2行清空,受到t(3)的伤害

    因此,

    T(2,1,3) = (t(1)+t(2)+t(3))+t(1)+t(3)

    记S=∑t(i),则

    T(2,1,3) = 2S- t(2)

    同理计算全部排列组合:

    T(2,1,3) = T(2,3,1) = 2S- t(2)
    T(1,2,3) = 2S- t(1)
    T(3,2,1) = 2S- t(3)
    T(1,3,2) = T(3,1,2) = 2S - (t(1)-t(2)+t(3))

    下面考虑不同取值的情况:
  • t(2)最大时,显然
    2S- t(2)
  • t(1)最大时,显然
    2S- t(1) t(3)
    2S - (t(1)-t(2)+t(3)) = 2S - (t(1)-(t(2)-t(3))) > 2S- t(1)
    因此T(1,2,3)为最小值,应该先攻打1行
    否则T(1,3,2) = T(3,1,2)为最小值,此时先攻打1行仍然为最优解之一
  • t(3)最大时,显然
    2S- t(3) t(1)
    2S - (t(1)-t(2)+t(3)) = 2S - (t(3)-(t(2)-t(1))) > 2S- t(3)
    因此T(3,2,1)为最小值,应该先攻打3行
    否则T(1,3,2) = T(3,1,2)为最小值,此时先攻打3行仍然为最优解之一

    因此可以得出结论,先攻打三线最多的一行总是最优解(之一),实际操作中可以忽略其他少数方案直接选择三线最多的一行
    通俗解释
    这里我想到一个比较通俗但好像没那么数学的解释。
    第i行的植物最多可以攻击三行,也就是在最终的T函数中出现3次t(i),如果先消灭这一行,t(i)只会出现一次。因为t(i)是最大的,所以出现的次数越少越好,因此应该先攻打三线最多的一行
    推广情况
    [ol]
  • 如果从三行、四行推广到n行,如果我上面的“通俗解释”没问题,应该推广到n行也成立,能否给出数学证明?
  • 实际操作中三线是不可能叠种在第一列的,加入三线位置的考虑,使用IZE的算血公式(见后文算血公式章节)进行近似计算又是什么情况?(按照算血公式,自定义阵型的忧郁菇应该可以像小喷菇一样按照射程缩短的三线来计算)
  • 倾斜阵(地刺+杨桃)也是多行攻击的情况,应该采取什么策略?
    [/ol]
    算血公式
    https://www.bilibili.com/read/cv6096663/
    这里是对IZE算血公式的详细说明。简单地说,按照三线相当于三株豌豆射手来看,而豌豆射手在红线内倒数第n列的伤害为

    6n-3

    即在最右侧放置时能对正常速度的僵尸造成3颗豌豆的伤害,向左一格则伤害为9,以此类推。
    此外,对于三线的邻行应该+2伤害,因为正常情况下本行的植物被消灭后会停止输出,而三线的本体并不在本行,所以要比本行的豌豆射手多2伤害
    我的问题
    感谢你看到这里,我的语言组织能力有限,数学表述也不一定准确,如果看到这里忘记我的问题也正常,请回到本贴开头查看。

    僵尸, 情况

  • pzx521521
    OP
      

    2.3 懒得看了
    你问的ai是不是有问题.下面贴出chatgpt的对话:
    在植物大战僵尸的我是僵尸模式中,三线射手(攻击本行和上下邻行)这种可以影响其他行的植物需要优先消灭。那么如何根据每一行三线射手的数量来确定最佳的僵尸放置顺序,使其受到的总攻击次数最小化。
    比如前三行分别有1、3、2棵三线,应该优先攻击哪一路?
    在“植物大战僵尸”的我是僵尸模式中,三线射手会对其所在行以及上下两行造成攻击。因此,尽量减少每一行的三线射手数量,能有效减小僵尸受到的总攻击次数。
    问题分析:
  • 对于每一行来说,三线射手的数量影响着上下行的安全程度。每行的三线射手都会攻击自己所在行及其上下行的僵尸。
  • 假设每一行的三线射手数量已经知道,目标是根据这些数量来安排僵尸的放置顺序,最小化受到攻击的总次数。

    思路:
    [ol]

  • 攻击损失分析
  • 对于某一行,三线射手会攻击三行(本行及其上下两行)的僵尸。因此,若一个行中三线射手数量较多,该行对上下行的攻击会更多。

  • 简单假设
    假设有3行,分别有 r1, r2, r3 个三线射手(表示每行的三线射手数量),那么:
  • 第1行的僵尸会受到来自第1行和第2行的攻击。
  • 第2行的僵尸会受到来自第1行、第2行和第3行的攻击。
  • 第3行的僵尸会受到来自第2行和第3行的攻击。

  • 目标
    使得每行的三线射手所产生的影响最小,可以通过考虑每行的三线射手数量来安排僵尸的放置位置。
    [/ol]
    具体策略:
    [ol]

  • 优先攻击三线射手数量最多的行:若某一行三线射手数量较多,这意味着它对其他行的影响也较大,应优先消灭这一行的三线射手,减少对其它行的影响。

  • 减少影响的传播:一旦某行的三线射手被消灭,该行对上下行的攻击会减弱,因此应根据三线射手数量的大小来决定攻击顺序,通常选择优先攻击三线射手数量最多的行。
    [/ol]
    举例:
    假设前三行分别有 1、3、2 棵三线射手,目标是最小化总攻击次数。我们可以按照以下顺序进行攻击:
    [ol]
  • 第2行:它有最多的三线射手(3个),它对上下两行的影响最大,优先攻击它。
  • 第3行:它有2个三线射手,相对来说影响较小,但仍然需要考虑。
  • 第1行:它的三线射手最少(1个),影响最小,最后攻击它。
    [/ol]
    攻击顺序总结:
  • 优先攻击三线射手数量最多的行。通过减少主要攻击行的三线射手数量,可以最小化僵尸受到的攻击次数。
  • 根据每行三线射手数量的排序,确定攻击顺序。

    这个策略的核心在于优先消除影响力最大的行,从而减少其他行的攻击威胁。
    [color=]能不能用数学公式证明
    [
    md]
    可以通过数学建模来证明上述策略的合理性,主要是通过 **最小化总攻击次数** 的目标来构建公式,结合行间的影响,证明优先攻击三线射手最多的行是最优策略。
    ### 设定与符号
    设每一行 \( i \) 上的三线射手数量为 \( r_i \),其中 \( i = 1, 2, \dots, n \),\( n \) 是行数。
    #### 攻击影响的建模
    - 第 \( i \) 行的僵尸会受到来自第 \( i-1 \)、第 \( i \)、和第 \( i+1 \) 行的三线射手的攻击。
    - 对于第 \( i \) 行,假设有 \( r_i \) 个三线射手,它们会对自己所在行及其上下两行造成攻击。每一棵三线射手攻击的影响是:本行、上行、下行。
      
    #### 总攻击次数
    为了简化,我们假设每一行的僵尸都会被三线射手攻击,而攻击次数是由该行三线射手的数量决定的。假设放置在第 \( i \) 行的僵尸的攻击次数为 \( A_i \),那么:
    \[
    A_i = r_{i-1} + r_i + r_{i+1}
    \]
    其中,\( r_0 \) 和 \( r_{n+1} \) 可以看作是 0(即没有第 0 行和第 \( n+1 \) 行)。
    #### 总攻击次数
    总的攻击次数 \( T \) 是所有行的攻击次数之和:
    \[
    T = \sum_{i=1}^{n} A_i = \sum_{i=1}^{n} (r_{i-1} + r_i + r_{i+1})
    \]
    可以展开得到:
    \[
    T = \sum_{i=1}^{n} r_{i-1} + \sum_{i=1}^{n} r_i + \sum_{i=1}^{n} r_{i+1}
    \]
    将每项分组,我们可以得到:
    \[
    T = (r_0 + r_1 + r_2 + \dots + r_{n-1}) + (r_1 + r_2 + \dots + r_n) + (r_2 + r_3 + \dots + r_n + r_{n+1})
    \]
    注意到每个三线射手会在多个行之间产生影响,因此我们希望通过合理安排僵尸的放置顺序,减少重复的攻击次数。
    #### 最优攻击顺序
    为了使总攻击次数 \( T \) 最小,我们需要通过安排攻击顺序来减少对最多三线射手所在行的攻击影响。根据上面的表达式,我们可以看到每一行的三线射手数量直接影响了总攻击次数。因此,**优先攻击三线射手最多的行**,可以显著减少它对其他行的攻击影响。
    ### 证明过程
    假设有 \( n \) 行,且每行的三线射手数量分别为 \( r_1, r_2, \dots, r_n \)。我们希望通过合理安排攻击顺序来最小化总攻击次数。
    1. **攻击影响传播**:对于第 \( i \) 行来说,如果我们首先攻击它,它对上下两行的攻击影响会立刻消失,减少总的攻击次数。因为 \( r_i \) 对上下行的影响最大,所以优先消灭该行的三线射手可以减少对其他行的攻击。
       
    2. **攻击次数的递减效应**:优先攻击三线射手最多的行,能够减少它对上下行的影响,使得后续攻击的行受到的攻击次数会显著减少。
    3. **总攻击次数最小化的原理**:从数学公式上看,减少高影响行的三线射手数量,能够最小化重复的攻击影响。因此,通过排序选择三线射手最多的行优先攻击,能够最小化每一行受到的攻击次数。
    ### 举例验证
    假设有 3 行,分别有 1、3、2 个三线射手,计算攻击次数:
    - **如果按 2-3-1 的顺序攻击**:
      - 第一轮攻击:攻击第 2 行,\( r_2 = 3 \),它影响第 1 行和第 3 行。
      - 第二轮攻击:攻击第 3 行,\( r_3 = 2 \),它影响第 2 行。
      - 第三轮攻击:攻击第 1 行,\( r_1 = 1 \),它影响第 2 行。
       总攻击次数:
       \[
       T = (r_1 + r_2 + r_3) + (r_1 + r_2) + r_2 = 1 + 3 + 2 + 1 + 3 + 3 = 13
       \]
    - **如果按 3-2-1 的顺序攻击**:
      - 第一轮攻击:攻击第 3 行,\( r_3 = 2 \),它影响第 2 行。
      - 第二轮攻击:攻击第 2 行,\( r_2 = 3 \),它影响第 1 行和第 3 行。
      - 第三轮攻击:攻击第 1 行,\( r_1 = 1 \),它影响第 2 行。
       总攻击次数:
       \[
       T = (r_1 + r_2) + (r_1 + r_2 + r_3) + r_2 = 1 + 3 + 1 + 3 + 3 + 3 = 14
       \]
    通过这个简单的例子可以看到,优先攻击三线射手最多的行(2-3-1)导致的总攻击次数最少。因此,优先攻击三线射手最多的行确实能够最小化总攻击次数。
    ### 结论
    通过数学建模和具体的计算分析,我们可以证明 **优先攻击三线射手数量最多的行** 是最小化总攻击次数的最佳策略。[/md]
  • pzx521521
    OP
      

    后面格式不对  时间过了 没法编辑了, 这个论坛md的还不支持公式
    可以通过数学建模来证明上述策略的合理性,主要是通过 最小化总攻击次数 的目标来构建公式,结合行间的影响,证明优先攻击三线射手最多的行是最优策略。
    设定与符号
    设每一行 ( i ) 上的三线射手数量为 ( r_i ),其中 ( i = 1, 2, \dots, n ),( n ) 是行数。
    攻击影响的建模
  • 第 ( i ) 行的僵尸会受到来自第 ( i-1 )、第 ( i )、和第 ( i+1 ) 行的三线射手的攻击。
  • 对于第 ( i ) 行,假设有 ( r_i ) 个三线射手,它们会对自己所在行及其上下两行造成攻击。每一棵三线射手攻击的影响是:本行、上行、下行。

    总攻击次数
    为了简化,我们假设每一行的僵尸都会被三线射手攻击,而攻击次数是由该行三线射手的数量决定的。假设放置在第 ( i ) 行的僵尸的攻击次数为 ( A_i ),那么:
    [
    Ai = r{i-1} + ri + r{i+1}
    ]
    其中,( r0 ) 和 ( r{n+1} ) 可以看作是 0(即没有第 0 行和第 ( n+1 ) 行)。
    总攻击次数
    总的攻击次数 ( T ) 是所有行的攻击次数之和:
    [
    T = \sum_{i=1}^{n} Ai = \sum{i=1}^{n} (r_{i-1} + ri + r{i+1})
    ]
    可以展开得到:
    [
    T = \sum{i=1}^{n} r{i-1} + \sum_{i=1}^{n} ri + \sum{i=1}^{n} r_{i+1}
    ]
    将每项分组,我们可以得到:
    [
    T = (r_0 + r_1 + r2 + \dots + r{n-1}) + (r_1 + r_2 + \dots + r_n) + (r_2 + r_3 + \dots + rn + r{n+1})
    ]
    注意到每个三线射手会在多个行之间产生影响,因此我们希望通过合理安排僵尸的放置顺序,减少重复的攻击次数。
    最优攻击顺序
    为了使总攻击次数 ( T ) 最小,我们需要通过安排攻击顺序来减少对最多三线射手所在行的攻击影响。根据上面的表达式,我们可以看到每一行的三线射手数量直接影响了总攻击次数。因此,优先攻击三线射手最多的行,可以显著减少它对其他行的攻击影响。
    证明过程
    假设有 ( n ) 行,且每行的三线射手数量分别为 ( r_1, r_2, \dots, r_n )。我们希望通过合理安排攻击顺序来最小化总攻击次数。
    [ol]

  • 攻击影响传播:对于第 ( i ) 行来说,如果我们首先攻击它,它对上下两行的攻击影响会立刻消失,减少总的攻击次数。因为 ( r_i ) 对上下行的影响最大,所以优先消灭该行的三线射手可以减少对其他行的攻击。

  • 攻击次数的递减效应:优先攻击三线射手最多的行,能够减少它对上下行的影响,使得后续攻击的行受到的攻击次数会显著减少。

  • 总攻击次数最小化的原理:从数学公式上看,减少高影响行的三线射手数量,能够最小化重复的攻击影响。因此,通过排序选择三线射手最多的行优先攻击,能够最小化每一行受到的攻击次数。
    [/ol]
    举例验证
    假设有 3 行,分别有 1、3、2 个三线射手,计算攻击次数:

  • 如果按 2-3-1 的顺序攻击
  • 第一轮攻击:攻击第 2 行,( r_2 = 3 ),它影响第 1 行和第 3 行。
  • 第二轮攻击:攻击第 3 行,( r_3 = 2 ),它影响第 2 行。
  • 第三轮攻击:攻击第 1 行,( r_1 = 1 ),它影响第 2 行。

    总攻击次数:
    [
    T = (r_1 + r_2 + r_3) + (r_1 + r_2) + r_2 = 1 + 3 + 2 + 1 + 3 + 3 = 13
    ]

  • 如果按 3-2-1 的顺序攻击
  • 第一轮攻击:攻击第 3 行,( r_3 = 2 ),它影响第 2 行。
  • 第二轮攻击:攻击第 2 行,( r_2 = 3 ),它影响第 1 行和第 3 行。
  • 第三轮攻击:攻击第 1 行,( r_1 = 1 ),它影响第 2 行。

    总攻击次数:
    [
    T = (r_1 + r_2) + (r_1 + r_2 + r_3) + r_2 = 1 + 3 + 1 + 3 + 3 + 3 = 14
    ]

    通过这个简单的例子可以看到,优先攻击三线射手最多的行(2-3-1)导致的总攻击次数最少。因此,优先攻击三线射手最多的行确实能够最小化总攻击次数。
    结论
    通过数学建模和具体的计算分析,我们可以证明 优先攻击三线射手数量最多的行 是最小化总攻击次数的最佳策略。
  • pzx521521
    OP
      

    没必要分别讨论
    "
    直接计算总和
    "
    pzx521521
    OP
      


    pzx521521 发表于 2024-12-20 13:14
    没必要分别讨论    直接计算总和

    首先,我帖子里明确说了不欢迎直接扔ai回复的灌水,我多种模型都试过了,要是能解决我不会浪费时间来发帖。
    其次,你复制的这些内容也就是我计算示例的部分,甚至还是用数值代入计算的,连三行的模型都无法证明。
    最后,我要得出的结论是优先攻击哪一路,不讨论不同取值的情况没问题,但是证明不了攻击三线最多的行最佳相当于没说
    pzx521521
    OP
      


    yacc 发表于 2024-12-20 15:02
    首先,我帖子里明确说了不欢迎直接扔ai回复的灌水,我多种模型都试过了,要是能解决我不会浪费时间来发帖 ...

    ai已经证明了啊,
    怕你看不懂  我还特意给出来, ai是怎么证明的:
    ai没有用你的
    "

    而是用了  直接计算总和   就是N行都放上僵尸的时候(就是第一次先放1行,第二次放2行等等,放N行的总数) 所有的攻击次数
    "

    这时候 通过N行的总攻击次数  (而不是通过你说的分析单行的次数 算总3行的数量),
    "

    最后结果就是
    "

    可以看出 计算全部的行数总攻击次数 ->和单行的总攻击次数  是直接相关的, 所以处理最多的行数
    感觉就是把上面的复制了一下,不知道你能不能看懂  = =
    ps. 我放ai的原因是他真2步回答好了
    ps2. 52的md不支持公式,有点难看懂
    pzx521521
    OP
      

    相当于没有微积分的方式
    用了微积分思想     
    就是  
    sum(第一次放一行+第二次放二行+....+第N次放N行)
    [Asm] 纯文本查看 复制代码T(2,1,3) = T(2,3,1) = 2S- t(2)
    T(1,2,3) = 2S- t(1)
    T(3,2,1) = 2S- t(3)
    T(1,3,2) = T(3,1,2) = 2S - (t(1)-t(2)+t(3))
    或者是说在仅仅有三行的情况下是 sum(T(2,1,3), + T(2,3,1)+  T(3,2,1) + T(1,3,2)  + T(3,1,2) + T(1,2,3))/3  
    没必要每一行都算,把所有行加起来也一样
    哪些乱七八糟都是可以消掉的
    pzx521521
    OP
      

    对这样说  你更容易理解 但是不准确
    仅仅有三行的情况下是 sum(T(2,1,3), + T(2,3,1)+  T(3,2,1) + T(1,3,2)  + T(3,1,2) + T(1,2,3))
    你看3行时候中间t(2)已经没有了,4行的时候中间2行没有
    推到  有N行 哪些乱七八糟都是可以消掉的
    实际上没必要算T(2,1,3), + T(2,3,1)+  T(3,2,1) + T(1,3,2)  + T(3,1,2) + T(1,2,3)这些具体的
    推到n行的时候就多了一个r_0  r_{n+1}
    "

    所以这两个也没有, 所以只和单线数量有关
    pzx521521
    OP
      


    pzx521521 发表于 2024-12-20 22:45
    对这样说  你更容易理解 但是不准确
    仅仅有三行的情况下是 sum(T(2,1,3), + T(2,3,1)+  T(3,2,1) + T(1,3, ...

    不是把六种放置方式的结果求和,每一种都可以通关,哪种方式受到的总伤害最小,就应该选择哪一路
    比如3L代入数字后计算了
    T(2,3,1)=13(ai算的这个还不对,实际是9)
    T(3,2,1)=14(实际是10)
    显然前者的策略优于后者,而不是说把它们加起来。
    这也是我提问的一个点,就是我的描述不够准确,可能存在歧义,如果哪里描述有问题也帮我修改下
    pzx521521
    OP
      


    yacc 发表于 2024-12-20 23:07
    不是把六种放置方式的结果求和,每一种都可以通关,哪种方式受到的总伤害最小,就应该选择哪一路
    比如3L ...

    [Asm] 纯文本查看 复制代码如果从三行、四行推广到n行,如果我上面的“通俗解释”没问题,应该推广到n行也成立,能否给出数学证明?推广到n行加一下,发现和具体行数无关,只和行的射手数量有关
    优于的原因是   他们两个在边缘    推到N的时候  没有边缘的概念
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部