建模的完整机制——从解构到可用的模型

正向建模回答「模型从哪里来」(观察→比较→抽象→命名)。但一次完整的建模,细节远比四步多:解构要找到的是稳定关系,抽象不是删除细节而是保留重要关系,模型是有目的的结构,分类也是建模,概念与模型不同,模型可以组合、有层级,具体化是建模的反方向,而验证让模型逐渐接近现实。 本篇是正向建模(03-建模与逆向/01)的完整展开。


一、具体事物不是模型

三个不同的游戏:平台跳跃、射击、解谜。

直接记忆每个游戏的所有细节,得到的是「三个游戏的清单」。但它们有共同结构:

1
2
3
4
5
6
7
玩家
↓操作
角色
↓影响
世界状态
↓达成
目标

模型不是某一个具体事物,而是多个具体事物共有的结构。 单独一个例子无法建模——建模需要多个实例,才能分辨「哪些是巧合、哪些是结构」。


二、解构不是简单地「拆东西」

把汽车拆成零件:发动机、车轮、方向盘……这只是罗列。

解构真正的重点是:找到部分之间稳定的关系

1
2
3
方向盘 → 控制 → 车轮转向
油门 → 控制 → 发动机转速
发动机 → 驱动 → 车轮

同样的零件,如果关系不同,就是不同的系统。解构 = 拆出对象 + 找出对象之间的稳定关系。 只拆出对象没有关系,得到的不是结构,是清单。


三、解构的重点是找到稳定关系

为什么强调「稳定」?

因为同一个事物,不同时刻看,细节在变,但有些关系不变:

1
输入 → 控制系统 → 运动状态 → 位置变化

无论具体车型是什么,这条链都成立。建模要找的正是这种跨实例、跨时间仍然成立的关系——它们才是可复用的部分。


四、从多个实例中寻找共同结构

1
2
3
4
5
6
7
实例 1:平台跳跃游戏
实例 2:射击游戏
实例 3:解谜游戏
↓ 比较
共同:玩家 → 操作 → 世界状态 → 目标
↓ 抽象
游戏模型

比较的作用是过滤偶然

  • 平台跳跃有「跳跃」——射击没有 → 跳跃不是共同结构
  • 都有「玩家操作改变世界状态」——三个都有 → 这才是结构

从多个实例中找共同结构 = 比较 → 过滤偶然 → 保留共同。 这就是正向建模第二步「比较」的完整含义。


五、抽象不是删除细节,而是保留重要关系

抽象经常被误解成「把话说得更模糊」。不是。

研究「如何控制汽车运动」:

1
2
需要保留:输入 → 控制系统 → 运动状态 → 位置变化
可以忽略:车身颜色、座椅材料、音响、空调

抽象做了两件事:

1
2
3
4
5
6
具体信息
↓ 区分
├── 对当前问题重要
└── 对当前问题不重要
↓ 保留重要结构
↓ 隐藏无关细节

抽象不是让模型包含更少的信息,而是让模型只保留对当前问题重要的信息。 同一辆车,研究发动机和研究交通流,保留的信息完全不同——所以抽象永远相对于「目的」而言。


六、同一个事物可以产生多个模型

汽车:

1
2
3
研究发动机:汽车 → 发动机 → 燃烧 → 能量转换 → 机械运动
研究交通: 汽车 → 道路 → 车辆 → 交通规则 → 交通流
研究体验: 驾驶者 → 操作 → 反馈 → 感受

三个模型都对,视角不同。没有「唯一正确的模型」,只有「适合当前目标/问题/观察角度的模型」。 强行追求一个全能的模型,得到的往往是哪个问题都解释不好的大杂烩。


七、模型实际上是一个「有目的的结构」

1
2
3
4
5
6
现实
↓ 观察
↓ 选择关注对象 ← 由目标决定
↓ 寻找关系
↓ 保留重要结构
↓ 模型

设计刹车系统 → 发动机颜色无意义;设计外观 → 车身结构重要。

模型一定与问题、目标和观察角度有关。 模型不是现实的复制,而是现实被目标过滤后的结构。


八、分类也是一种建模

苹果、香蕉、橙子 → 共同:可食用、植物产生、有果实结构 → 「水果」

汽车、自行车、飞机 → 共同:承载人员、能够移动、需要动力 → 「交通工具」

1
2
3
多个具体实例
↓ 寻找共同特征 / 结构
↓ 形成类别

概念不是凭空产生的,而是对大量具体事物中稳定结构的压缩。 分类、目录、类型系统、继承体系,本质都是建模——用关系建立层级模型。


九、概念与模型的区别

「汽车」是一个概念——确定「它是什么」。

要描述汽车如何运行,需要更多关系:

1
驾驶者 → 输入 → 控制系统 → 动力系统 → 运动 → 车辆状态

这已经不只是概念,而是模型。

1
2
概念:确定「它是什么」
模型:描述「它由什么组成、如何联系、如何运行」

模型通常包含:对象 + 属性 + 关系 + 规则 + 机制 + 状态。具体包含什么,取决于建模目标。


十、模型还可以继续组合

运动模型 + 碰撞模型 + 生命值模型:

1
2
3
4
5
运动模型:输入 → 速度 → 位置
碰撞模型:对象 A ↔ 对象 B → 碰撞
生命值模型:伤害 → 生命值变化
↓ 组合
战斗模型:移动 → 碰撞 → 伤害 → 生命值变化

模型可以组合成更大的模型。 组合的方式与拆解相反:先各自建模,再按关系连接。这正是「系统 = 多个结构通过机制连接」在建模层面的对应。


十一、建模存在层级

1
2
3
底层模型:位置、速度(最具体)
中层模型:移动、碰撞(组合底层)
高层模型:战斗、关卡(组合中层)

层级不是随意分的:低层模型被高层模型组合,高层模型依赖低层模型。 拆解是沿层级向下,建模是沿层级向上(或按目标直接选取某一层)。


十二、具体化是建模的反方向

1
2
3
模型(抽象结构)
↓ 具体化
具体实例 / 实现

游戏模型 → 具体的平台跳跃游戏;循环模型 → 具体的 while 循环。

建模:具体 → 抽象;具体化:抽象 → 具体。 正向建模的产物是模型,具体化的产物是新的实现(这正是 03-建模与逆向/02-逆向应用 的内容——模型 → 解构 → 具体)。


十三、解构与建模形成循环

1
2
3
4
5
       ┌────── 建模 ──────┐
↓ │
具体事物 → 解构 → 抽象 → 模型
↑ ↓
└── 具体化 ← 应用 ─┘

应用模型产生新的系统 → 观察新系统 → 发现新的结构 → 修正模型。

这不是一次性的过程。 模型会随着新实例不断被修正——这与 03-建模与逆向/03-双向循环 完全一致,本篇是循环中「建模」那一步的细节展开。


十四、模型并不一定正确

1
2
3
原模型:A → B
新观察:A → C → B ← 模型不完整
或: A → B(仅当条件成立) ← 模型需要加条件

模型不是终点,而是假设与现实之间的中间结构。 模型可能不完整、可能缺条件、可能只在特定范围成立——知道这一点,才能正确地使用和修正它。


十五、验证让模型逐渐接近现实

1
模型 → 预测 → 现实/实验 → 观察结果 → 比较 → 发现差异 → 修改模型

例:认为「攻击 → 生命值 -10」,运行后发现「攻击 → 护甲计算 → 生命值 -6」——模型需要增加攻击力、护甲、伤害计算规则。

验证不是可选的收尾,而是建模的一部分。 模型的价值在于预测;预测与现实的差异,就是模型需要修改的地方。


十六、好的模型不是越复杂越好

1
2
❌ 把所有细节塞进模型 → 无法复用、无法解释
✅ 只保留与目的相关的结构 → 清晰、可复用、可验证

两个判断标准:

1
2
1. 对当前问题,模型是否只保留了重要关系?(简洁)
2. 模型能否解释已有的所有实例?(覆盖)

好的模型 = 足够覆盖 + 尽量简洁。 简洁让模型可理解、可复用;覆盖让模型不失效。两者冲突时,先保覆盖,再压缩简洁。


十七、从具体到抽象,再从抽象回到具体

完整的能力是双向的:

1
2
具体 → 抽象(建模):看到很多例子,提炼共同结构
抽象 → 具体(应用):拿模型去识别、实现、解释新问题

只会建模不会应用 = 有模型但用不出来;只会应用不会建模 = 只会套现成方案。

建模与应用的完整循环,才是把知识变成能力的方式。 本篇展开「具体 → 抽象」这一半的机制;03-建模与逆向/02-逆向应用 展开「抽象 → 具体」那一半。


与其他线的关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
本线 ←→ 正向建模(03-建模与逆向/01)
01 是四步骨架(观察→比较→抽象→命名)
本线是骨架的完整展开(稳定关系/保留重要关系/有目的的结构/组合/层级/验证)

本线 ←→ 逆向应用(03-建模与逆向/02)
建模(具体→抽象)与具体化(抽象→具体)是同一个循环的两个方向

本线 ←→ 双向循环(03-建模与逆向/03)
循环讲模型不断被使用和修正;本线讲「建模」这一步内部怎么做

本线 ←→ 模型转为流程(03-建模与逆向/04)
04 讲模型怎么展开成步骤;本线讲模型本身怎么建出来

本线 ←→ 分类/目录/类型系统
分类也是建模——继承体系、类型系统都是「用关系建立层级模型」

收束

1
2
3
4
5
6
7
8
9
10
11
12
建模不是简单四步,而是完整机制:
解构要找稳定关系(不是罗列零件)
抽象是保留重要关系(不是删除细节)
模型是有目的的结构(随目标而变)
分类也是建模(概念 = 稳定结构的压缩)
概念 ≠ 模型(概念定「是什么」,模型描述「如何运行」)
模型可以组合、有层级
具体化是建模的反方向
模型不一定正确,验证让它接近现实
好的模型 = 足够覆盖 + 尽量简洁

完整循环:具体 → 抽象(建模)→ 具体(应用)→ 新实例 → 修正模型

建模的机制 = 从具体事物中,为目标保留重要结构,并通过验证不断逼近现实。 这是所有「理解世界」的底层动作——分类、概念、类型系统、架构设计,都是它的应用。