Administrator
发布于 2026-08-19 / 45 阅读
0
0

用图论理解 CS GO地图设计

如果把 CS/CSGO 地图先忽略具体美术、掩体和高度,只看“玩家如何从一个战术区域移动到另一个战术区域”,它基本可以被看成一个带权、有几何嵌入、并且具有阵营非对称性的图。

最基础的抽象就是:

\[G=(V,E)\]

其中:

  • \(V\):关键战术区域,例如出生点、包点、交火点、控制点、转点枢纽

  • \(E\):区域之间可以通行的路径

  • 边权 \(w(e)\):通过这条路径所需的时间

  • 节点/边还可以附加更多属性:视野、掩体、宽度、危险度、投掷物影响、声音传播等

比如经典的 Dust2,极度简化后其实可以画成:


             A点
            /  \
        A大     小道
         |       |
T出生 -- 中路 -- CT出生
         |       |
        B洞 ---- B点

这已经非常接近一个图论问题了。

但真正有意思的是:地图设计里的很多经验法则,其实可以分别对应到不同的数学问题。


1. “转点时间” = 最短路径问题

地图里最基础的量之一就是:

从区域 A 到区域 B 最快需要多久?

这就是经典的 shortest path。

\[d(u,v)=\min_{p:u\rightarrow v}\sum_{e\in p}w(e)\]

比如:

  • T 出生 → A 点

  • T 出生 → B 点

  • CT 出生 → A 点

  • CT 出生 → B 点

  • A 点 → B 点

这些距离之间的比例,实际上决定了大量地图节奏。

例如设:

\[d(T,A)=18s\]

\[d(CT,A)=10s\]

那么 CT 有约 8 秒建立防守阵地。

而如果:

\[d(A,B)=20s\]

那么假打 A 后转 B 的成本就很高。

所以很多所谓的“地图节奏”,其实可以首先转化成一个距离矩阵:

\[D= \begin{pmatrix} d(T,A)&d(T,B)&d(T,M)\\ d(CT,A)&d(CT,B)&d(CT,M)\\ ... \end{pmatrix}\]

地图设计师实际上是在调这个矩阵。


2. “这个位置为什么这么重要?” = 中介中心性

CS 地图里有一些位置一旦控制,整个地图都会发生变化。

比如:

  • Mirage 中路

  • Dust2 中路

  • Inferno 香蕉道

  • Ancient Donut / Mid

图论里有一个很适合描述这种现象的指标:

Betweenness Centrality,中介中心性

\[C_B(v)= \sum_{s\neq v\neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}\]

其中:

  • \(\sigma_{st}\):从 \(s\) 到 \(t\) 的最短路径数量

  • \(\sigma_{st}(v)\):经过节点 \(v\) 的最短路径数量

直觉就是:

有多少重要路线必须经过这个地方?

如果一个节点的 betweenness 极高,它就是一个天然的战略枢纽。

所以“抢中路为什么重要”,可以部分数学化为:

\[C_B(\text{Mid}) \gg C_B(\text{其他区域})\]

但这里还有一个重要设计问题:

如果:

\[C_B(\text{Mid}) \rightarrow 1\]

也就是几乎所有路线都必须经过中路,那么地图通常会变得过于单一。

所以设计好的地图往往是:

中路很重要,但不是唯一答案。


3. “一条路被烟封了是不是整个进攻都没了?” = 最小割问题

这是我觉得和 CS 地图设计特别契合的一个概念:

Minimum Cut。

假设你想从 T 出生到 A 点。

如果只存在:


T ---- 通道 ---- A

那么只要控制“通道”这一条边,就完全阻断进攻。

这个图的 edge connectivity 很低。

而如果:


       路线1
      /     \
T ---         --- A
      \     /
       路线2

那么至少需要控制两个入口。

可以问:

\[\lambda(T,A)=?\]

即:

至少封锁多少条独立路径,才能完全切断 T 到 A 的连接?

这其实非常像 CS 里的防守结构。

一个包点如果只有一个 chokepoint:


T ---> 门 ---> Site

通常会很难设计得有趣。

因为防守方只需要集中资源控制一个 cut。

而如果:


         A Main
        /
T -----          A Site
        \
         Connector

那么进攻者就可以制造多方向压力。


4. “为什么夹击很强?” = 节点不相交路径

图论里有个非常漂亮的概念:

vertex-disjoint paths。

如果 T 到 A 有两条不共享关键节点的路径:

\[P_1:T\rightarrow A\]

\[P_2:T\rightarrow M\rightarrow Connector\rightarrow A\]

那么就可以形成真正意义上的 split。

比如:


           A Main
          /      \
T -------         A
 \               /
  Mid--Connector

这其实是很多 CS 地图最核心的拓扑结构:

\[Spawn \rightarrow \begin{cases} Main\\ Mid\rightarrow Connector \end{cases} \rightarrow Site\]

所以 CS 里的:

  • A split

  • B split

  • mid control

  • connector control

在图论语言里,很多时候就是在争夺:

独立路径的数量和控制权。

甚至可以直接用 Menger's theorem 理解:

两个区域之间有多少条互不共享节点的路径,就等价于至少需要控制多少个节点才能完全切断它们。

这和 chokepoint 设计非常接近。


5. “为什么有些地图转点特别舒服?” = 图的直径

定义:

\[diam(G)=\max_{u,v}d(u,v)\]

即整个地图中最远两个战术节点之间的最短距离。

如果地图 diameter 太大:

转点慢,信息价值持续时间长,赌博防守成本高。

如果 diameter 太小:

防守转点极快,进攻假打价值下降。

因此地图宏观尺度其实可以理解为控制:

\[diam(G)\]

但更重要的是几个局部距离:

\[d(A,B)\]

\[d(M,A)\]

\[d(M,B)\]

\[d(CT,A),d(CT,B)\]

它们共同决定 rotational geometry。


6. “地图是不是太线性?” = 环路数量

一个极端的坏地图可能是:


T -- A -- B -- C -- CT

这是树状甚至近似线性的。

没有多少绕路选择。

而优秀 CS 地图通常存在很多 cycle:


      Mid
     /   \
T --       -- A
 \         /
  B -------

玩家可以:

\[A\rightarrow Mid\rightarrow B\rightarrow A\]

形成闭环。

Cycle 带来的东西很多:

  • 回防路线

  • 绕后

  • fake

  • lurk

  • 信息博弈

  • 二次转点

所以可以用一个很简单的量:

\[\mu=|E|-|V|+1\]

对于连通图,这个是 cycle rank。

它大致表示图里有多少个独立环。

当然不是“越高越好”。

太低:

地图线性。

太高:

路线过于复杂,信息价值降低,防守边界模糊。

所以可能存在某种“合适的 cycle density”。


7. CS 地图其实是“两张图”

因为 CT 和 T 使用同一空间,但路径价值完全不同。

比如同一条路径 \(e\):

\[w_T(e)\neq w_{CT}(e)\]

并不一定是移动速度不同,而是因为:

  • CT 经过这里可能安全

  • T 经过这里需要清很多角

  • CT 可以预瞄

  • T 需要暴露在多个视线里

  • 某个位置容易被 AWP 控制

所以更准确可以定义:

\[G_T=(V,E,W_T)\]

\[G_{CT}=(V,E,W_{CT})\]

同样一张地图,对两个阵营来说实际上是不同的 weighted graph。

这就是 CS 地图设计最有趣的一点。


8. 边权甚至不是常数

简单模型:

\[w(e)=travel\ time\]

更真实的模型则应该是:

\[w(e)= \alpha T(e) +\beta R(e) +\gamma I(e) +\delta U(e)\]

其中:

  • \(T(e)\):移动时间

  • \(R(e)\):死亡风险

  • \(I(e)\):暴露信息量

  • \(U(e)\):utility 消耗

比如 Banana 可能只有 6 秒路程,但因为要吃:

  • HE

  • molotov

  • flash

  • spam

实际“成本”非常高。

所以游戏里的“距离”并不是欧几里得距离:

\[d_{game}(A,B)\neq d_{euclidean}(A,B)\]

更像一个风险加权的最短路径问题。


9. 但单纯图论还不足以描述 CS 地图

这是最重要的限制。

如果只画:


A -- B -- C

你会丢失很多 CS 最重要的信息:

  • 谁先看到谁

  • 掩体

  • 架枪角度

  • peek advantage

  • 路径宽度

  • 高低差

  • 投掷物

  • 声音

  • 穿墙

  • 交火距离

所以我会把一张 CS 地图拆成至少 三张相互耦合的图:

Movement Graph

描述:

人能怎么走。

Visibility Graph

如果两个区域之间可以直接形成视线:

\[(v_i,v_j)\in E_{vision}\]

Utility Graph

描述:

烟、火、闪能够影响哪些区域。

于是一个区域可能:


Movement:
A ---- B

Visibility:
A ========= C

Utility:
D ~~~~~~~~> B

虽然 A 和 C 不能直接走过去,但它们可能能交火。

这就比单纯的 path graph 准确很多。


10. 把“CS 地图设计”抽象成一个数学优化问题

可以写成:

\[\max_G \quad F( RouteDiversity, TimingBalance, StrategicDepth, InformationValue, CombatQuality )\]

subject to:

\[d(T,A)-d(CT,A)\in[a_1,a_2]\]

\[d(T,B)-d(CT,B)\in[b_1,b_2]\]

\[k(T,A)\ge 2\]

\[k(T,B)\ge 2\]

\[C_B(M)\in[c_1,c_2]\]

\[diam(G)\in[d_1,d_2]\]

也就是说我们希望:

包点有至少两种进攻方式,中路具有战略价值,但不能成为唯一必争节点,CT 有时间建立防守,但不能转点快到让 fake 失去意义,整个地图有足够环路产生绕后、lurking 和转点,但又不能复杂到信息毫无价值。

这已经非常接近一个多目标图优化问题。


总结

你的直觉其实可以继续往前推一步:

CS 地图不是“把几个交火点用路径连接起来”,而是在设计一个有权重、有环、有瓶颈、有阵营非对称性的网络,然后再把这个网络嵌入二维/三维几何空间。

甚至可以反过来做地图设计:

先生成图 → 检查图论性质 → 再把图 embedding 成实际地图。

这会很像 procedural level generation。

而且这里面其实很可能能发展出一套挺系统的“CS 地图拓扑理论”:用 最短路径、minimum cut、betweenness centrality、cycle rank、vertex-disjoint paths 这 5 个指标,就已经能解释相当大一部分“为什么某些 CS 地图结构好玩”。


评论