数学建模 1 - 从现实问题到数学模型

数学建模 1 - 从现实问题到数学模型

Gavin0576 MSCS@Columbia

欢迎,进来坐吧。先放轻松:这是系列的第一篇博客,我们还不需要优化器、复杂算法,甚至不需要一长串公式。今天只想做一件事:看到一个现实问题时,知道怎样把它缩小成一个能解释、能计算、也能检验的问题。

先猜一道小题。有人平时下午 6:00 在车站等家人接他。某天他 5:30 就到了车站,没有通知家人,而是沿着车通常驶来的路往家走。他们在路上相遇,最后比平时早十分钟到家。他走了多久? 请先猜一个数字。车速、步速和道路长度都不知道,这反而提醒我们:有时真正有用的不是补齐未知数据,而是发现不变的关系。

这篇博客会陪你走过几个具体情境:野外样本的保温箱、校园班车、食堂排班、自动配送车和自习室。每次都先提出问题,猜测答案,再把假设说清楚,从最小的计算开始,最后问什么证据会推翻它。数学建模不是把流行算法贴到一份数据上,而是为了某个明确的目的,用一个更简单的数学对象有控制地替代现实系统。

模型必须回答什么

这不是形式化的检查清单,它在防止一件很常见的事:你认真解出一道数学题,却并没有回答提问者的真实问题。比如有人说“校园班车很差”,这句话根本没法计算。是平均车程过长,晚上没有车,还是学生赶不上 9:00 的课?不同目的对应不同指标,也可能对应完全不同的改进方案。假设管理者真正需要决定的是:在 8:30 增加一辆班车,能否让至少 90% 的乘客在 9:00 前进教室,同时不超出车辆预算?现在才有了可执行的选择和可观察的成功标准。

接着问边界在哪里。学生到站、等车、上车、行驶、下车、步行到教室,这些过程是否都要算?如果成功标准是“9:00 前进入教室”,下车后的步行当然在边界内;只记录汽车到达终点,会回答错一个钟表问题。早餐和下课后的活动可以先排除,但请写出排除项。边界不是越大越好,而是要包含决定目标量的主要机制。

再看 8:35 这一瞬间。要预测后面五分钟,或许需要各站排队人数、车辆位置、空位和道路状态;不需要知道每个人整天的行程。前面这些量就是候选的状态。乘客到站、车辆抵达、坐满后离开、路上行驶,这是改变状态的机制。开始时我们可以用固定到达率和固定车程,但不能把它们伪装成永远成立的事实。雨天如果同时增加乘客、减慢车速,就要把雨天作为输入,或把结论限定在正常天气。

最后,证据要对准最初的问题。记录几天学生真正进入教室的时间,而不只看车辆到终点的时间;比较“9:00 前到达”的预测比例和实际比例,专门看失败的早晨。于是五个问题连成一条线:要做什么选择、哪些事件影响选择、用什么量追踪事件、这些量怎么变化、哪种观察会推翻建议。

先用十名乘客做一个手算检查:8:30 有十人等车,8:35 来一辆只有八个空位的车,第二辆十分钟后才来。如果每个人下车后还要走五分钟,第一辆最多带走八人。程序若说十人都搭上第一辆,缺的不是高级求解器,而是一个容量约束。小例子检查无误,再加多个站、随机到达和实际车程。

我们已经有了目的、边界、状态、机制和检验方法。下面换一个物理问题,让“状态为什么重要”变得更直观。

从目的到状态

想象野外工作人员把室温的小样本瓶依次放进带有冷却储热体的保温箱。为了演示,我们自己选择箱内平均温度的上限为在达到这个上限前,最多能放多少个瓶子? 先别急着算。瓶子的数量本身并不能告诉你箱子是否够冷,随着每次加入而变化的储热体温度才是状态,瓶数则是输出或计数。

请注意,这只是关于储热体平均温度的示例模型,不是现实样本保存方案。真实协议还可能限制每个样本自己的温度、暴露时长、容器位置和污染风险。这些要求要分别检查,不能因为平均箱温合格就宣称样本安全。

先画边界,再列能量平衡

只看一次放瓶步骤,把储热体和新瓶子放在同一个系统边界里。令为储热体的有效热容,为瓶子的有效热容,单位都是焦耳每摄氏度;令为瓶子进入箱子时的温度。假设两者很快达到共同温度,并且这一次放瓶期间与室外的换热可以忽略。冷的储热体吸热,温的瓶子放热,因此

整理得到状态更新式

等式两侧的量纲都是焦耳,更新后的温度是两个旧温度的加权平均,应该位于之间。若程序算出比热瓶还高的温度,先检查符号、边界和单位。瓶子不是每次消耗一份固定的“冷量”;换热取决于当前温差,而温差每放一个瓶子都会改变。

跟着状态一步一步走

取演示数值。这些不是测得的保温箱参数。第一个瓶子使温度变为

只升高约很合理:一个小瓶子的热容远小于储热体。但第二次升温不会完全相同。令

从更新式两边减去,有。相同瓶子连续加入,便得到。若要求,则

由于,除以它时不等号方向要反转:。整数基线允许放入 100 个,因为,而。这不是“实际可以存 100 个样本”的许可,只是给定上限与假设下的计算结果。

如果把“可用热容量”直接除以“每瓶固定消耗量”,就悄悄固定了会变化的温差。那可以拿来估量级,却不能代替逐步更新。今后遇到排队、库存、感染人数或电池电量,也可以先问:下一次事件是否依赖当前状态?如果是,先写更新规则,再数能发生多少次。

在现场检验边界

真要用这个数字,就需要量储热体质量或热容、瓶子的入箱温度、放瓶时间,并在箱体不同位置读温度。上下两个温度计若相差很大,一个温度作为全部状态就不够。没有放瓶时箱子也升温,则隔热损失不能忽略。可以把箱子关好,做一段与十次放瓶等长的对照实验,再比较两个实验中的升温。

记录表至少有瓶子序号、时间、加入前后温度、瓶子类型和开盖时长。十个仔细的观测就能检验第一次升温是否接近。实测变化若明显更大,先查瓶子热容、开盖进来的热量、传感器位置和储热体有效质量。不同瓶子用更新;外界热量进入,则在平衡式里增加以焦耳为单位的项。扩展应该对应被观察到的机制,而不是为了让公式更漂亮。

假如实测在 70 至 90 瓶之间就超过上限,不能把“100”多报几位小数。差异说明基线缺了机制。反过来,如果另一条实际规则要求最多装 40 瓶,继续把热学预测从 100 精调到 98,也不会改变决定。模型复杂到哪一步,应该由决定靠阈值有多近来判断。预测一下:储热体热容减半时,允许瓶数应明显下降;若计算结果反而上升,回头检查机制。

这个问题靠能量守恒追踪状态;有些问题则需要分配、选择或排班。它们同样需要把语言翻译成职责清楚的数学量。

把语言翻译成结构

这不是机械的词语替换,而是诊断。句子如果不能说出哪些东西已知、哪些可以由你决定、什么算成功,等式还没准备好。

例如食堂经理说:“我有四位员工和付款、备餐、取餐三个工位。午餐时每个工位至少有一人。第四个人放在哪里,才能让顾客少等?”先画四个员工圆点和三个工位框,能工作的地方画连线。令表示员工在工位,否则为零。我们选的是半小时内的完整分配,不是让某位员工变成个人。“每人恰好在一个工位”是,“每个工位至少一人”是。这些约束先排除不可执行方案,还没有解决“等待最少”。

下一步才估服务能力。假设第二位付款员工可把半小时处理量从 25 提高到 50,第二位备餐员工可把 40 提高到 70,取餐能力为 80,而这半小时来 60 位顾客。多派员工到付款,三处能力为,瓶颈仍是备餐的 40;派到备餐,则为,瓶颈变成付款的 25。两方案都无法在这个简化的稳态例子中处理全部 60 人。这是有价值的发现:可能需要第五位员工、改变流程,或重新界定眼下的目标。优化不会凭空创造容量。

拿一张纸分成“原问题”和“数学表示”两列。“所有员工都能做每个工位吗?”对应可分配的连线;“取餐必须有人吗?”对应取餐工位约束;“换一个人能减少多少等待?”对应实测服务时间和排队模型。原问题里的句子没有表示,说明可能漏了条件;一个变量找不到原始句子,说明可能在优化别人并不关心的东西。

题目有多个小问时,画依赖箭头:到客预测喂给排班决策,排班喂给成本,几项结果喂给建议。每条箭头写清传递的量。若 12:30 的决策用到了 12:30 之后才知道的特征,准确率再高也是使用了未来信息。至此,我们知道怎样将语言整理为结构;但服务能力、箱体温度等数字仍然依赖假设。下一步就要把这些近似公开。

让假设看得见

“因为这段路短且不拥堵,先假定速度恒定,因此行车时间正比于距离。”这里既说了理由,也说了后果。只列一排没有根据的假设,看似正规,其实只是装饰。

回到保温箱。我们把冷却储热体看成温度均匀的一个整体。可在箱盖附近和箱底各放温度计,比较每次放瓶后的读数。如果一个读,另一个读,单温度状态就不能描述空间差异。此时考虑两区域模型有理由;没有读数之前凭空加空间网格,则没有。

“瓶子热容都为、都从进入”也是近似。轻塑料瓶和重金属罐不一样。记录瓶子类型、内容物、入箱温度和对应热容,顺序已知则逐次更新,顺序未知则按合理顺序或观察到的频率生成情景。要检查开盖漏热,可以测室温、进热功率(瓦,即焦耳每秒)和开盖秒数;功率乘时间就是进入的热量,其单位与每瓶交换的能量一致。

做一本假设台账:一行“温度均匀”,一行“热容相同”,一行“开盖进热可忽略”;每行说明为什么暂时相信、哪个结果依赖它、如何检验。如果现场只需要放 20 瓶,哪怕保守估计降很多,也可能仍够用;若需要放 95 瓶,微小变化都可能跨过上限。敏感性分析要围绕真实决定,而不是为每个参数画华丽的图。

假设清楚之后,不必因为现实复杂而什么也不做,也不要还不知道关键误差就建一个巨型模型。先做最小但不违反主要机制的计算,发现失败后再增加细节。

从基线模型开始,再逐层扩展

如果线性模型已能稳健地支持决定,深度网络不会因为“更新”就自动更好。复杂度要换来可见的预测准确性、真实性、可计算性或决策质量。

保温箱的基线是均匀温度、无漏热的递推式。第一个扩展可以是“十分钟不放瓶时实际升温多少”,而不是立刻换成机器学习。如果闭箱十分钟从升到,快速装箱时漏热可能很小;若升到,不能忽略。扩展要通过实测差异赢得位置。

食堂的基线是半小时需求和容量的平衡。如果管理者关心第 90 百分位的等待时间,就可能需要模拟随机到达和服务时长。把顾客到达、员工空闲、服务结束排成时间事件:有空闲员工就开始服务,否则入队;服务结束就取下一位。把每个人的等待与实测午餐数据比较。高峰时新模型若改变排班建议,扩展解决了真实限制;若两者在观察范围内总得出同一个选择,简单平衡就够用了。

我们现在已有基线和扩展,但一个看着合理的答案并不代表从故事到代码到建议的整个链条都对。下面把“验证”拆开,分别检查不同层面的错误。

验证整条推理链

这些不是同一个检查换五个名字。只通过第一层,完全不能保证第五层通过。最终报告要闭环:问题抽象解答证据决定。COMAP 的官方说明也把建模竞赛看成建模、解题和写作结合的开放任务;提交物是一条有证据的论证,而不是一个能运行的程序(MCM/ICM 官方说明 )。

拿班车逐层检查。第一层,把站点设为十名乘客、八个空位,程序是否留下两人?若没有,代码的上车规则与故事矛盾。这叫实现核对,不意味着现实班车系统一定被正确模拟。

第二层,八个座位不能坐九人;上课到达时间不能早于上车时间;若无人离开队列,下分钟等待人数应等于原人数加新到达者减已上车者。守恒、容量和时间顺序即使没有更多数据也能拦住荒唐输出。

第三层,收集几天真正的到站、上车、车程、进教室时间。某些天估参数,另一些天单独测试;同一批早晨既拟合又验证,容易把旧日特性误当一般规律。还有一种“未来泄漏”:8:30 要作出的预测,却用了那天车后来实际走了多久。始终问决策时刻真实可知的输入是什么。

第四层,假设旧班次使 78% 的人准时,新方案预测 92%。两个方案要面对同样的乘客到达情景、车辆预算和“准时”定义。新方案如果超预算,92% 不是可行的改进;旧方案在雨天测、新方案在晴天测,则比较不公平。基线可以朴素,但测试必须受控。

第五层,若行车时间比上周慢五分钟,新方案还达到 90% 吗?若最繁忙站到达量增加 20%,哪些人会晚到?改输入、重新计算、解释失败机制。如果小幅可信扰动就令方案失效,要把建议写成有条件的,并考虑备用车辆、提前发车或换路线。

结论应该说清行动、指标、基线比较、适用范围和主要失败条件。例如:“在预算允许时,给 8:35 到站的班次增加一辆八座车;演示数据中预测准时率从 78% 到 92%,但车程比正常慢五分钟以上便低于 90%。”这只是说明结论写法的演示句,不是哥伦比亚班车的实测结果。单独写“准确率 92%”,调度员不知道该做什么。

不同问题能得到不同的确定性:通勤题在对称行车条件下得到确定分钟数;两日行程的连续性证明保证某一点存在,却不给地点;保温箱的瓶数依赖测量值与停止规则;班车建议可由未参与拟合的早晨支持,但仍可能怕雨天。认识条件,不等于不敢下结论。

开始计算前的简短检查

暂停一下,试着回答:决策变量或预测量是什么?哪些数是观测,哪些是假设?今天能手算的基线是什么?哪个失败推动下一层?哪张图或哪项测试能支持结论?有一个答不清楚,就别急着启动求解器。下面用食堂把全过程从第一句话走一遍。

把建模循环用在食堂

假设学校想缩短校园食堂的排队时间,但不增加每周人工预算。它仍然只是一段描述,不是一道完整的数学题:谁能作决定?能改变哪些事?什么不可改变?“更好”究竟指平均等待、最糟糕时段,还是顾客没排到队的比例?

第一步:写出决策句

沿用前面的输入—输出句:“给定预测到客量、服务时间、可用员工和工资,选择每个半小时内各工位分配多少员工,在遵守预算和排班规则的情况下尽可能减少等待。”

现在名词有明确的工作:令是时间段集合、是工位集合、是时间段的预期到客率、是工位每位员工的服务率、是该工位该时段的员工数。可以由经理选择;需要观测或估计。若把历史到客量当作决策变量交给优化器,它当然能“优化”出没人来的食堂,但那个数字无法执行。

第二步:画出系统边界

可把到达、点餐、付款、备餐和取餐放入边界,先排除学生拿到餐后的去向。是否包含取餐堵塞,取决于它会不会阻碍上游工位;若能阻碍,就不能随便删去。边界本身没有永久正确的大小,能抓住影响目标量的机制才有用。

在每个量旁写单位:是顾客/分钟,是顾客/(员工·分钟),是顾客/分钟。利用率

没有单位,因为分子分母单位相同。若,平均需求达到或超过名义容量,就不应期待一个稳定的稳态队列。这不是精密排队理论,而是第一眼就能检查的容量基线。

第三步:区分数据与假设

到达时间戳、每笔交易用时和员工排班是观察数据。“服务时间相互独立”“每位员工在这半小时内处理速率恒定”才是假设。不要只有平均服务时间:平均两分钟可能来自多数只要半分钟的简单订单与少数长达十分钟的订单,两个分布会造成不同的高峰等待。

在台账中给每个假设写“理由—后果—测试”。恒定速率在短时段可能还算合理;它使队列计算简化;测试办法是看速率是否在午餐前五分钟系统地变动。无法说出后果的假设太模糊,无法提出测试的假设暂时不能被验证。

第四步:基线与一个扩展

基线可以让员工数足以把估计利用率保持在某个阈值以下,例如,它不考虑随机波动,但容易检查。若需要第 90 百分位等待时间,扩展成队列近似或按顾客事件推进的模拟。两者用相同到客情景比较。建议相同,基线或许够用;只在尖锐午餐峰值分歧,恰好告诉我们波动应放在哪一层。

第五步:怎样推翻模型

留出几天数据评估,不要在所有日子上调完参数,再用相同日子自我表扬。对比实际与预测的队伍长度、平均等待、第 90 百分位等待、超过服务目标的时段比例,并按星期几和一天中的时段看错误。中午准确、临近关门失准,只能说模型有明确适用范围,不是普遍有效。

这些步骤写得抽象,我们先跟经理做一次半小时手算。预计 12:00 至 12:30 有 60 人到付款台,一名员工半小时能服务约 25 人;经理可派两名或三名。你先猜哪种更合理。两人容量 50,若一开始无人排队,粗略平衡后仍会积下约 10 人;三人容量 75,平均而言可以消化 60 人。但这只排除了一个明显超载方案,不保证三人时所有顾客都不等待。

换成每分钟单位:顾客/分钟,顾客/分钟。两人时,三人时。大于一警告持续超载,小于一表示平均容量有余,却不排除某五分钟突然来一大群人。

算到这里,是否该喊“排队论”?如果问题只是“多派一人是否可能必要”,半小时平衡已足以指出两人可能超载。若问题改成“90% 的顾客能否五分钟内排到”,总人数就不够,要看到达时刻与服务时长。这是因为问题需要更精确的答案,不是因为我们更喜欢复杂数学。

还要注意联动:付款多一人,备餐可能少一人,瓶颈只是移动。加一位时薪的员工工作半小时,成本是;必须与预算和减少等待的价值比较。如果没有等待上限或等待价值,“最优排班”还没定义完:对什么目标最优?

举一个反例:60 人里有 30 人在前五分钟抵达,即使三名员工半小时能处理 75 人,那五分钟也只能处理约人,短时队伍仍会增到约 17 或 18 人。只用“半小时总量”的模型漏掉了这个到达峰。真实时间戳能够直接检验恒定到达假设。若有数据,可画累计到达与累计服务能力两条曲线,它们的差可近似解释队伍;再画实测与预测等待,查误差是否聚在午餐高峰。图要证明机制,不能只为了好看。

最后区分五类量:60 人到达是观察或预测,不是你可以改写的决策;员工数是受规则限制的决策;是由工资和时间算出的参数;“付款最多三人”是约束;12:05 队伍里有 18 人则是系统状态。把到客量改成 75,三人利用率升到一;把员工数改成四,在 60 人时利用率降到、成本却升高;把单人容量降到 15,三人也只处理 45。三种变化有不同的现实含义,不应混成一个“参数改变”的情景。

你若能不用希腊字母解释这个例子,就已经抓住核心:“两个人平均服务赶不上到达,所以队伍变长。第三人带来平均余量,但突发午餐客流仍会排队。改变排班前,我要查到达时间戳、其他工位和预算。”符号的工作是把决定说清楚,不是把决定藏起来。

完整的流程已经走过一次。下面不是另开三套流程,而是在同一建模循环里练三种思考方式:用不变量消掉未知速度,用连续性证明某事存在,用阈值拆开物理决策。

先推理,再计算

不变量:提前到达的通勤者

回到开头。平时下午 6:00 在车站接人,某天人 5:30 到站,没打电话,沿原路往家走;家人仍按平时出发,两人在路上相遇,回家早十分钟。他走了多久?很多人看到“提前半小时”就回答三十分钟,可相遇发生在路上,他在 6:00 前已经停止步行。

车速、距离和步速都不知道,但只需一条条件:家人去车站和从车站回家,在那段路上使用相同速度。想象“相遇点到车站”这一段路。平时车向车站走一次,再载人从车站走回来一次;当天这段路两次都省掉。总共省十分钟,每次经过那段路的时间就是五分钟。因此相遇时刻是平时到站的五分钟前,即 5:55。通勤者从 5:30 走到 5:55,走了25 分钟

推翻它也容易:回程车速不同、去回道路不同、家人得知消息提前出发,都会破坏“两段各五分钟”或正常参考时刻。这里所谓不变量,是其他数字未知时仍可利用的对称关系。你当然能写两个人位置随时间变化的方程,添距离与两种速度再求解;但发现省掉两次相同路段更简单,也更清楚地展示答案为什么被确定。

连续性:两天的行程

星期一 9:00,一个人从村庄沿同一路径走向,17:00 前到达;星期二 9:00 他从沿原路返回,17:00 前到达。是否必然存在某个点,他在两天相同的钟表时间都曾站在那里? 两天的速度可以不同,可以停下或折返,不需要先量出整条速度曲线。

把星期一和星期二的行者想象成两个同时出发的“分身”。9:00 两个分身在路径两端,17:00 它们交换了两端。只要都在同一条连续路径上、没有瞬移,它们不可能不相遇却交换顺序。相遇点就是两天在同一时间经过的位置。这个论证保证存在,却不能预测地点在哪里。

用数学写法,把从出发沿路的距离记为,设。9:00 时,17:00 时。连续函数从负值到正值,依介值定理必有某个使。两人的位置于是相同。

钟表时间、同一路径、连续移动,都不是可有可无的文字装饰。若星期二从午夜走到 8:00,两天没有共同的时间段;若回程走另一条路,相等的“离距离”未必指同一个实际地点;若允许瞬移,介值定理前提消失。一个很短的定理,往往藏着必须由建模者说出来的边界和假设。

阈值:配送车与定时闸门

设一辆自动配送车接近校园服务闸门,控制器说闸门还会保持打开秒。仍在入口外的车有两个选项:停在入口前,或继续并在关闭开始前完整通过。当它刚好位于“还能舒适刹停”的边界时,要保持闸门打开多久,才让继续通行也可行? 这是虚构的数学演示,不是真实设备的安全标准;实际系统需要障碍检测、故障安全逻辑和设备验证。

从收到指令到真正刹车有延迟,速度的车先走。随后若以近似恒定减速度停车,再需米。因此舒适停车距离。从这个距离边界以恒速驶向入口,耗时

可是到达入口不等于通过闸门。若闸门区深米,车长米,尾部离开还需大约。在这套简化恒速继续方案下,需要。实际控制器可能有单独的通行保持阶段;模型中仍应把“抵达”和“清空”分开。

取演示数值秒、米/秒、米/秒²、米、米。到达耗秒,完整通过耗秒,总计秒。每项单位都是时间。相信这个数字前,试减弱刹车、拉长车体、加大感应延迟。若闸门内有障碍,系统应触发故障安全响应,而不是用更乐观的时间公式粉饰风险。

几个小例子各自展示了一种数学结构。竞赛题往往不像它们这么整洁:一份题目里可能同时有数据、多个小问、互相依赖的任务和写作要求。我们仍用同一套思路,先组织问题,再选软件。

竞赛题与证据

原课件把国赛题大致归为一些常见风格:A 类常偏工程物理、优化和微分方程;B 类常混合评价、优化和动态模型;C 类常偏大数据、预测、优化和评价。这只是倾向,不是按题号选算法的命令。真正要做的是找到状态、决策、约束、数据和需要提交的证据。国家层面的奖项稀少,可靠且能复核的模型,常比没有解释的复杂流水线更容易让人相信。

第一次打开一份关于河流、交通、供应链或种群的题目,你可能想马上找“正确算法”。先缓一缓,画四个框:正在发生什么、要决定或估计什么、当时已知什么、怎样检验答案。河流污染题里,水流与污染物浓度是发生的过程,预测下游浓度是估计任务,采样地点、流量和时间戳是已知信息,未参与拟合的浓度读数与质量守恒则能用于检查。现在才能判断是否要微分方程、预测模型或优化器。

几个模块之间也有先后。可能先根据观测建流量模型,再预测浓度,最后依据预测选择清理位置。若预测毫无依据,却先开动清理位置优化器,你优化的是自己捏造的数。若三位队友分别做神经网络预测、排队模拟和论文写作,给每个模块写输入—输出契约:预测器输出未来到客分布,模拟器接收分布、服务时间与候选排班后输出等待,方案搜索接收等待与预算后输出可行选择,论文解释各步与测试。箭头上不写输出,团队也就说不清模块之间的数据来源。

课件还提及获奖比例与分层评审。把比例当作历史性的方向信息,不要视为某年某地区的保证。评审者需要追踪:回答了哪个问题、假设有什么依据、怎么求解、怎么验证。很巧妙却无法重跑的计算,仍是脆弱的提交。

长背景段落可以读三遍:第一遍只理解故事,不列式;第二遍标出“预测、最小化、推荐”等目标词,带单位数字,“必须、不能、至多”等硬规则,“大约、可能、变化”等不确定性,以及“之前、之后、明年”等时间顺序;第三遍在任务之间画箭头。比如“用 $10{,}000 的额外午餐人工预算推荐每周排班,使高峰等待减少,同时下学期需求可能上涨 20%”:推荐要求决策,预算是约束,每周带来日与时段下标,20% 应有压力情景,高峰等待不应只看整周平均。做到这一步,还没用著名算法,却已经避开不少错题答案。

新团队可以先做一条朴素但完整的链:用历史平均需求、简单容量、能手算的方案和一张清楚的比较表。它不一定会赢,但能告诉你下一小时该投在哪儿。如果需求增加 20% 就让建议翻转,去加强预测或稳健排班;如果不同预测都得出同一排班,优先把验证论证写清。把时间花在答案敏感处,比所有模块都堆成最大复杂度更容易辩护。

问题地图已经画好,接下来才谈在哪里计算和写作。工具不能替你选边界或证明定理,但能让确定好的工作重复运行、共同检查。

可复现的团队工具

课件给的工具更像一条流水线,不是软件品牌清单:共享知识库保存任务与资料;协作文档同步写作;Python 清洗数据、模拟和优化;LaTeX 写正式技术文档;draw.io 或 PowerPoint 画结构图;语言模型只作经过核查的辅助。

假设三位同学带着题目、数据和截止时间坐到一起。一人先在 Notion 或其他共享笔记里写真实问题、子问题、缺失数据和任务负责人。重要的不是 Notion 这个名字,而是每个人都能看到同一张问题图;否则三个人可能各解一份互相矛盾的题。

早早打开一份 Google Doc 或同类文档,哪怕开头很粗糙:写工作标题、两句问题重述、变量表和暂时空白的结果位。写作会暴露没想明白的目标。如果一句话写着“模型预测最优排班”,却回答不出“最优以什么指标衡量”,数学问题还不完整。文档应跟随推理长出来,而不是最后一夜才接收结果。

需要可重复计算时使用 Python:读 CSV、算保温箱递推、模拟顾客到达、画图或运行优化器。先拿能手算的微型测试核对。保温箱第一瓶应把改成约,并位于原温度与瓶温之间;代码报就违反物理检查。能从原始数据自动生成报告表格的脚本,比填满人工复制数字的笔记更有用。

长报告可以用 LaTeX 或 Overleaf,保持公式、图、表和引用编号一致。课件建议下载比赛当年官方模板并提前在 Overleaf 编译;这是一项很现实的准备:比赛开始前让队友各自试着改一节、添一张图、修一次编译错误,不要在最后一晚发现矩阵符号全坏了。

模块多时,用 draw.io 或 PowerPoint 画依赖图:原始到客时间戳需求预测排班模拟等待统计建议。箭头标清传递量与单位。漂亮但不标输出的箭头只是装饰;粗糙却能揭出缺失输入的图才有意义。

你也可以请 ChatGPT 或 DeepSeek 帮忙解释数学、设想基线、起草测试代码,但输出不等于观测、证明、文献或验证过的实现。它给出热学公式,查单位和热容是否被误当温度;它给出两天行程证明,核对端点与连续性;它给出处,打开真实来源看能否支持所引的具体论断。责任在团队,不在助手。

一个简单的交接习惯很管用:每段工作结束,写下我产出了什么、我检查了什么、下一位还需要什么。“我做了一张图”不够;“我从原始到客 CSV 做了实测与预测到客图,核对时间单位是本地分钟,下一步请查中午的残差峰”就能让队友继续工作。它适用于短练习,也适用于三天竞赛。

工具把过程变得可重复,但一份排版漂亮的文档不证明你理解它。最后试着反向阅读别人的结论,再把同样的思路迁移到一个新问题。

阅读、复现与推广

课件最后给出的准备方法值得保留。先从某一年的官方比赛论文档案里读几篇强论文,第一遍不必弄懂每个代数式,只回答:团队回答了什么真实问题?三四步主要方法是什么?哪张图给了证据?作者承认了什么限制?每问写一句话。如果第一问答不上来,数学还没有与你脑中的目的连接。

第二遍,从摘要中的一个结论往回追。例如“新排班把平均等待减少 18%”:找到对应图表、比较基线、产生数据的现场记录或模拟,再看两个方案是否在同样条件下测试。如果一个用普通早晨,一个用假日高峰,18% 不能照字面解释。反向阅读能帮助你在还不熟悉所有方法时,辨认一篇论文的证据路径。

课件要求摘录好段落,还要解释为什么好。一句话的作用可能是重述决定、说明假设、解释图表或限定结论。“到客量增加 20% 仍可行”只有在正文说明“可行”的定义并提供压力情景时才有意义。漂亮却没有证据的句子不是模型解释;朴素而能重算的比较也可以是很好的写作。

再尝试复现三种不同用途的图:一张展示时间变化,一张展示空间位置,一张展示基线与模型差异。若原始数据不可得,就自己做小型演示数据,并明确标记“演示”,不要假装复现了原论文数字。写轴与单位,说明线、地图或柱状图为何适合所回答的问题。复现图的目的,是搞懂图证明的结论,不是模仿颜色。

复现最好的一篇论文也不用一次照搬全部。先选一个小结果:数据摘要、透明基线,或能手算的中间值。运行前写输入和期望输出;不一致时分别查缺失数据、论文没写的预处理、随机种子和你的程序错误。然后才逐渐复现大一点的部分。再改一个假设做推广:雨天车程延迟可能相关,食堂到客量可能有午餐峰,保温箱可能开盖进热。先预测改变方向,再跑代码,写出哪些结果移动、哪些不变、它教会你原模型的哪个边界。

最后是工具准备:让队友都知道如何用共享笔记、文档、Python、LaTeX 和结构图,合法地分配阅读资料,并让当前官方模板在 Overleaf 编译成功。这不是行政琐事,而是避免竞赛时把时间花在找文件、修图和排查坏公式上。如果有一周,前两天扫论文并选复现目标,第三、四天做基线和图,第五天改假设,第六天在模板中写短报告,第七天用五分钟向另一人解释从问题到证据的整条链。讲不清,就继续修论证。

第一轮成果即使小,也别急着否定它。能回答真实问题、给出基线、解释观测到的限制的一页纸,已经是一次建模。系列后续的博客会加更多数学方法;这一篇先把让它们可信的习惯打好。

换一个问题试试

假设图书馆想减少考试周自习室满员后被拒绝的学生。它第一句话是“做一个最好的使用模型”。先问管理员三句:到底能调整开放时长、预约规则、房间分配还是房间数量?真正关心被拒人数、平均等待、学生满意度,还是空置房间小时数?决定明早要做时,当时已知哪些数据?没有这些答案,“最好”毫无确定意义。

假设具体回答是:“明早决定是否给三间自习室各延长部分开放时间,最多增加六个工作人员小时,希望减少被拒人数。”于是边界包含学生到来、预约、房间与工作人员。令为房间增加的小时数,硬规则是小时,各还要符合房间许可时段。每小时等待人数是状态;旧预约时间是数据;减少被拒人数是可测目标。不用先选优化器,模型已经开始长出结构。

做一个小基线:若每间延时两小时只能多服务一组两小时预约,三间各延时两小时最多再服务三组。这只是粗略上界,前提是实际有需求、每组真的占满两小时。历史记录若显示第三间闭馆后无人预约,加时未必有用;若二十人同一时间抵达而预约通常只持续一小时,原来的“两小时每组”会误报容量。观测告诉我们下一层该考虑预约时长分布、小时高峰或更合理的调度规则。

检验建议可用上一周或上学期考试期记录,模拟旧方案与延时方案在同样日子会各拒绝多少人,并同时报告多出来却空置的房间小时数。开放时间改变后学生也可能改变预约习惯,所以历史回放并非真实未来;还要考虑考试高峰再增加到客量的情景。可执行的结论可能是:“先给房间一、二加时,监测每小时被拒人数,一周后重估。”它比“我们的模型达到最优效率”谦逊,但对管理员更有用。

想想它和保温箱相似在哪里:两者都从模糊请求变成明确目标,都找到了会变化的量(等待学生或储热体温度),都有阈值,也都需要可能推翻建议的测试。不同处也不能忽略:瓶子不会因为保温箱更暖而改变行为,但学生可能因为开放时长改变预约方式。物理守恒在一边给出较强的起点;涉及人的行为时,观察与反馈可能更重要。掌握建模,不只是记住一套流程,还要知道这套类比在哪儿失效。

  • 标题: 数学建模 1 - 从现实问题到数学模型
  • 作者: Gavin0576
  • 创建于 : 2026-09-14 20:00:16
  • 更新于 : 2026-09-16 01:18:04
  • 链接: https://jiangpf2022.github.io/blog/2026/09/14/Mathematical-Modeling-01-From-Reality-to-a-Model-zh/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论