笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
数学建模第五课:从矩形面积最大问题学会建立优化模型 - majorArcs
先聊点题外话。我当年第一次接触数学建模的时候,看到“优化模型”这四个字,第一反应是“这不就是求个最大值最小值吗,高中就学过了”。后来真做了几个题才发现,建模比赛里百分之七八十的题目,本质上都在跟你绕优化这个圈子——不管是物理题里的能量最小,经济题里的利润最大,还是调度题里的成本最低,脱了马甲全是优化。所以这节课的内容,说它是数学建模的基石一点都不夸张。
咱们从一个特别朴素的问题入手:给你一根长度为 L 的导线,围成一个矩形,问你长和宽各取多少,面积最大?
这个问题看起来人畜无害,但它背后藏着的建模思路,跟你在国赛题里遇到的那些复杂模型是一模一样的。咱们今天就把它掰开揉碎了讲清楚。
优化问题的通用格式
先看一个所有优化模型都长这样的骨架:
max 或 min 目标函数
s.t. 约束条件
就这么简单。max 或者 min 是你要干的事,目标函数是你关心的那个指标,s.t. 是 subject to 的缩写,后面跟的是现实条件给你上的枷锁。
但光知道这个格式没用,你得知道怎么把一个实际问题塞进这个框子里。这就涉及到建模的第一步——也是最容易翻车的一步:搞清楚三要素。
第一步:三要素,一个都不能少
- 优化目标:你到底想让什么最大或最小?利润?面积?时间?能耗?
- 决策变量:你能拍板决定什么?价格定多少?长取多少?走哪条路线?
- 约束条件:有什么限制?资源有限?预算有限?物理规律不允许?
拿导线围矩形来说:
- 优化目标:面积最大
- 决策变量:长 w,宽 h
- 约束条件:周长固定(2(w+h)=L),且长宽不能是负数
把这三要素用数学语言写出来,模型就立住了。
第二步:建立数学模型
符号定义这块儿,写清楚是给阅卷老师看的,也是给自己看的。建模最忌讳的就是符号混乱,写到后面自己都忘了哪个字母是啥意思。
设:
- L:导线总长(已知常数)
- w:矩形的长(决策变量)
- h:矩形的宽(决策变量)
- S:矩形面积,S = wh
约束条件拆开看:
- 周长约束:2(w+h) = L,也就是 w+h = L/2
- 非负约束:w ≥ 0, h ≥ 0(虽然实际物理上 w、h 应该大于 0,但数学上取等号边角情况也得考虑进去)
所以完整的模型就是:
max S = wh
s.t. w + h = L/2
w ≥ 0, h ≥ 0
这里有个细节值得注意:我们用的是等式约束,不是不等式约束。为什么?因为导线总长 L 是固定的,你不可能用不完,也不可能不够用,必须全部用完,所以是严格的等式。
第三步:求解模型——解析法
这道题结构太简单了,不需要上什么高端算法,直接解析法暴力破解。
由约束条件 w+h=L/2,把 h 用 w 表示:h = L/2 - w。代入目标函数:
S(w) = w(L/2 - w) = (L/2)w - w²
这是一个开口向下的二次函数,最大值在顶点处。求导:
S'(w) = L/2 - 2w = 0
解得:w = L/4
代回去:h = L/4
最大面积:S_max = (L/4) × (L/4) = L²/16
另解——均值不等式:
wh ≤ ((w+h)/2)² = (L/4)² = L²/16
当且仅当 w=h 时取等号。这个方法更优雅,但不如求导法有普适性。建议两个都掌握,比赛时哪个顺手用哪个。
第四步:结果分析
算出了答案不等于完事儿了,你得验证这个答案是不是靠谱。
可行性验证:w+h = L/4 + L/4 = L/2,满足约束。且 w,h ≥ 0。可行解,没问题。
最优性验证:S''(w) = -2 < 0,说明这是极大值点。而且这个二次函数只有一个驻点,所以这个极大值就是全局最大值。
所以结论是:当矩形为正方形时,面积最大。
这个结论本身不意外,小学奥数就学过。但咱们要的不是这个结论,而是得到这个结论的完整流程——这个流程,才是建模比赛里真正值钱的东西。
敏感性分析:参数变了会怎样?
建模比赛里,题目给的参数往往不是精确值,而是带有误差或者不确定性的。这时候你就得问自己:如果 L 不是精确的那个数,而是稍微偏了一点,我的最优解会怎么变?
这就是敏感性分析(也叫灵敏度分析)。
数学定义:
设有含参优化模型:
min f(x, p)
s.t. g(x, p) ≤ 0
其中 p 是不确定参数向量。最优目标值 f*(p) 对参数 p_i 的敏感度定义为:
S_i = ∂f*/∂p_i
这是绝对变化率。如果想看相对变化,用弹性形式:
S(x_i*, p_i) = (Δx_i*/x_i*) / (Δp_i/p_i) ≈ (∂x_i*/∂p_i) × (p_i/x_i*)
这个式子表达的意思是:参数 p_i 每变化 1%,最优解 x_i* 大约变化 S 个百分点。
回到矩形问题:
本例中唯一的参数就是 L。最优解:
w* = h* = L/4,S_max = L²/16
对 L 求导:
∂w*/∂L = ∂h*/∂L = 1/4
∂S_max/∂L = L/8
也就是说:导线长度每增加 1 个单位,最优长和宽各增加 1/4 个单位,最大面积增加约 L/8 个单位。
再算弹性:
s(w, L) = (∂w*/∂L) × (L/w*) = (1/4) × (L/(L/4)) = 1
s(h, L) = 同理 = 1
弹性为 1 说明什么?说明 L 每变化 1%,最优长和宽也各变化 1%。最优解随 L 等比例变化,这是一个非常干净漂亮的性质。
注意,这个例子参数单一,敏感度可以解析求出。真实比赛里的模型参数动辄十几个,这时候就只能靠计算机做数值模拟了——比如给每个参数加个小扰动,看输出怎么变,然后画个 tornado chart 那种东西。
稳健性分析:决策变量偏了会怎样?
敏感性分析扰动的是输入参数,稳健性分析则是直接扰动决策变量——假设我没法精确取到最优解,稍微偏了一点,目标函数会恶化多少?
数学定义:
设最优解为 w* = L/4,h* = L/4。让 w 偏离一个小量 δ,即:
w = L/4 + δ
由约束得:h = L/4 - δ
此时面积:
S = (L/4 + δ)(L/4 - δ) = L²/16 - δ²
面积损失:
ΔS = δ²
关键观察:面积损失是 δ 的二阶小量。
这意味着什么?意味着即使你长宽各偏了 0.1 个单位,面积损失也只有 0.01 个平方单位。最优解附近非常平缓,容错性很强——你不需要精确定位到那个最优点,只要在它附近,结果都不会太差。
这在工程上是个极其重要的性质。因为现实中你不可能把尺寸控制到绝对精确,总会有加工误差、装配误差。如果一个模型的最优解是“针尖上的最大值”,稍微偏一点性能就急剧下降,那这个最优解在工程上毫无意义。而矩形这个例子恰恰相反,它的稳健性非常好。
注意区分:敏感性和稳健性不是一回事
这两个概念太容易混淆了,我当年就栽过跟头。一句话总结:
- 敏感性分析:扰动输入参数(比如 L),观察最优解和最优值的变化
- 稳健性分析:扰动决策变量(比如 w),观察目标函数本身的变化
一个是看“参数不准”的影响,一个是看“执行不到位”的影响。别搞混了。
优化模型的五层分类体系
最后聊聊优化模型的分类。为什么要分类?因为不存在一个万能算法能解所有优化问题。你面对一个实际问题,第一步得搞清楚它属于哪一类,才能对症下药选对求解工具。
分类体系从上到下分五层:
第一层:原始问题
就是现实中的实际问题,还没经过数学抽象的那个东西。这是分类的起点。
第二层:按目标函数数量划分
- 单目标优化:只有一个目标函数,最常见
- 多目标优化:两个及以上可能相互冲突的目标。注意,多目标优化一般没有唯一最优解,而是得到一组帕累托最优解集——你在这个目标上好了,那个目标上就差了,得权衡
第三层:按约束条件划分
- 无约束优化:决策变量自由取值,理论分析简单,是有约束问题的基础
- 有约束优化:决策变量要满足等式或不等式约束。绝大多数工程、经济问题都是这类
第四层:按决策变量类型划分
- 连续变量优化:变量可在区间内取任意实数,比如连续生产计划
- 整数/离散变量优化:变量只能取整数或有限离散值,比如背包问题、选址问题
- 混合变量优化:同时含连续和整数变量,即混合整数规划,工业调度里很常见
第五层:按函数数学性质划分
- 线性 / 非线性:目标与约束全是线性函数就是线性优化,有任何一个非线性就是非线性优化
- 凸 / 非凸:凸优化要求目标函数凸、可行域为凸集,一个巨大的好处是局部最优即全局最优;非凸优化有多个局部最优解,求解难度指数级上升
- 可微 / 不可微:可微函数可以用梯度类算法;不可微函数求不了梯度,得用次梯度或者启发式智能算法
层级之间自由组合:上层任意一个类别可以跟下层任意一个类别搭配。比如“单目标-有约束-连续-凸非线性优化”、“多目标-无约束-离散-非凸优化”,等等。这个五层框架基本能覆盖运筹优化领域绝大部分数学模型。
写在最后
回头看这个矩形面积问题,它简单到甚至算不上一个真正的“建模题”——但它把优化建模的完整流程跑通了一遍:三要素分析 → 建立模型 → 求解 → 结果分析(可行性 + 敏感性 + 稳健性)。
这一套流程,跟你在国赛题里面对一个复杂的生产调度问题时用的方法论,是完全一样的。区别只在于:那道题的目标函数可能是个几千维的非线性不可微函数,约束条件可能是一堆乱七八糟的不等式,求解得靠启发式算法跑上几个小时。
但核心思路不变:先想清楚目标、决策与约束,再选择合适的数学工具与求解算法,最后对结果进行验证与评估。
把这个流程刻在脑子里,比记住任何具体的算法都重要。