← Back to Home

七桥问题

18世纪的哥尼斯堡城(今俄罗斯加里宁格勒),一条普雷格尔河穿城而过,河中有一座小岛,河上一共架着七座桥, 把城市分成的四块陆地连在一起:北岸、南岸、岛,以及岛东侧的陆地。

当地人中间流传一个游戏:能不能找到一条路线,从随便哪块陆地出发,把七座桥每座恰好走一次, 不用回到起点?在往下看之前,可以自己先在脑子里试几条路线——大部分人试几次就会发现,好像怎么走都会有一座桥被落下,或者被重复走过。

北岸 A 南岸 B 岛 C 东岸 D A B C D 度=3(奇) 度=3(奇) 度=5(奇) 度=3(奇)

点击「抽象成图」,看看地图怎么变成一个数学对象。

建模

把每块陆地看成一个点(顶点),每座桥看成一条连接两个点的线(边)。 地理上的"能不能走完七座桥",就变成了图上的"能不能一笔画出经过每条边恰好一次的路径"。 这一步决定了用什么数学对象表示现实——不关心桥有多长、路有多宽,只关心哪两块地之间有几座桥。

求解

点击「显示每个点的度数」:数一数每个顶点连出去几条边。A=3,B=3,C=5,D=3,四个顶点全是奇数。 欧拉证明的规律是:一笔画路径存在,当且仅当奇数度顶点的个数是 0 个或 2 个。这里是 4 个,所以这样的路线根本不存在。 这一步是在已经建好的模型上,用数学工具推出结论。

建模和求解,是两件事

建模回答"用什么表示这个问题";求解回答"表示出来之后怎么算出答案"。建模错了,后面算得再对也没用; 建模是对的,求解方法选得不同,也可能得到差别很大的结果——甚至像七桥问题这样,求解的结论是"无解",这本身也是一个完整的答案。

再看三个例子

同样的建模/求解拆分,不只适用于图论。换几个场景再看一遍,会发现"求解"这一步经常是可以脱离具体场景、 只针对模型本身来做的通用数学操作。

电梯调度

这个例子比七桥问题更进一步:七桥的建模步骤基本是唯一的(陆地变点,桥变边), 但电梯问题的建模需要自己做选择——选什么状态变量、优化什么目标,都会直接影响最后的结果。这也更接近比赛里真实的建模过程。

先明确假设

  • 一栋 5 层楼,只有 1 部电梯
  • 乘客的呼叫时间、出发楼层、目的楼层是随机给定的,电梯只能在乘客呼叫之后才知道这个请求
  • 每层运行时间、开关门时间、每位乘客上下电梯时间都是固定值,不考虑加减速
  • 电梯有容量上限,超过上限的乘客只能等电梯下一趟再来

模型参数

目标定义 — 点一个,看下面表格里对应的列

$$W_{total}=\sum_i (t_i^{pickup}-t_i^{request})$$ 总等待时间最短
$$W_{max}=\max_i (t_i^{pickup}-t_i^{request})$$ 最长等待时间最短(公平)
$$E=\sum |\Delta floor|$$ 总运行距离最短(省电)

求解 — 三种策略跑同一批请求

t = 0.0

点几次「重新生成乘客请求」,多看几组结果:很少有一种策略在所有指标上都最好。这正是"选目标"这一步的意义 —— 目标不同,"更好的调度"指的是不同的东西。

定价与利润最大化

建模

设价格为 $p$,需求量是价格的函数 $D(p)$,成本为 $c$,利润:

$$\pi(p) = (p - c)\,D(p)$$

求解

对 $\pi(p)$ 求导,令 $\dfrac{d\pi}{dp}=0$,解出最优价格 $p^*$。这一步是纯数学操作, 跟"定价"这个场景已经没关系了——任何这种形状的函数求极值,步骤都一样。

背包 / 装箱问题

建模

$n$ 件物品,第 $i$ 件重量 $w_i$、价值 $v_i$,容量上限 $W$。目标:选一个子集,使得

$$\sum_{i=1}^{n} w_i x_i \leq W,\quad \max \sum_{i=1}^{n} v_i x_i$$

求解

贪心算法(按性价比排序)速度快但不保证最优;动态规划能保证最优,但计算量更大。 同一个模型,两种求解方法各有代价,在论文里要能说清楚选哪种、为什么。

阶段产物回答的问题
建模图、函数、约束条件——一个数学对象用什么表示这个问题?
求解具体数值、算法、证明表示出来之后,答案是什么?

LaTeX 怎么打公式

刚才的利润函数、背包约束,光靠 Word 自带的公式编辑器写起来很别扭,尤其是论文里反复出现的求和、极限、分段函数。 LaTeX 是建模论文的标准写法——记号是文本,渲染出来才是公式,方便修改、方便和队友对着改。

行内公式用一对 $ 包起来,比如 \$x^2\$ 会渲染成 $x^2$;独立成行的公式用 $$ 包起来,会单独居中显示,比如上面利润函数那一行。

写法渲染说明
x^2$x^2$上标
x_i$x_i$下标
\frac{a}{b}$\frac{a}{b}$分数
\sqrt{x}$\sqrt{x}$根号
\sum_{i=1}^{n}$\sum_{i=1}^{n}$求和
\int_0^1$\int_0^1$积分
\lim_{x \to \infty}$\lim_{x \to \infty}$极限
\leq \; \geq \; \neq$\leq \; \geq \; \neq$不等号
\alpha \; \beta \; \pi \; \Delta$\alpha \; \beta \; \pi \; \Delta$希腊字母
\begin{cases}...\end{cases}$$f(x)=\begin{cases}1 & x\geq 0\\-1 & x<0\end{cases}$$分段函数

更完整的例子(矩阵、多行对齐等)见 LaTeX 公式演示页

试一试

在线 LaTeX 公式挑战

看图打公式:屏幕上给出一个渲染好的目标公式,照着写出对应的 LaTeX 代码,实时预览,看谁先打对、打得快。

12 道题,从上标分数到分段函数,难度递增。

开始挑战 →