不确定下的优化
教科书里的优化问题,参数都是给定的常数。现实里几乎没有这种事:需求会变、天气会变、价格会变、工期会拖。这一页讲的是三种处理不确定的方式——用概率算期望(随机规划)、不问概率只防最坏(鲁棒优化)、允许小概率失败(机会约束),以及它们各自的代价。
LAB 01
报童问题
一个临界分位数就定下了最优订货量,看它随成本比例怎么移动
问题
卖报纸的每天早上要决定进多少份:进多了剩下作废,进少了错过生意。需求是随机的,怎么定这个量?答案出奇地简洁——一个由成本比例决定的分位数,和需求分布的形状无关。
模型
报童问题的临界分位数解。
Q* = F−1( cu ⁄ (cu + co) )
cu 是缺货一件的损失,co 是积压一件的损失,F 是需求的分布函数。这个比值叫临界比。缺货成本远大于积压成本时(如急救药品),Q* 会推到分布的很高分位上。临界比率 cu/(cu+co)—
公式给的最优订货量 Q*—
曲线扫出来的最优点—
对应的期望利润—
报童问题是随机优化里最小的一个,也是最有用的一个。早上订多少份报纸:订多了,卖不掉的只能按残值处理;订少了,来买的人空手而归。结论出奇地干净——最优订货量就是需求分布的一个分位数,这个分位数等于"缺货成本 ÷ (缺货成本 + 过剩成本)"。默认参数下临界比率是 0.5714,Q* = 157.2;公式值和扫描出来的最高点完全重合。把进货成本从 20 拖到 35(利润变薄):临界比率掉到 0.1429,Q* 降到 107——比均值还少 43 份。反过来把成本降到 10:临界比率升到 0.857,Q* 涨到 193。这条规律的实用含义很硬:毛利越高的商品越应该多备货(缺货的损失大),毛利越薄、残值越低的商品越应该少备(压货的损失大)。"备货 = 平均需求"这个直觉,只有在临界比率恰好等于 0.5 时才对,也就是缺货和过剩的单位损失一样大——这在现实里几乎不发生。(同一条公式换个名字就是服务水平:下面阴影部分的面积就是"不缺货的概率"。所以"我们要做到 95% 的服务水平"这句话,其实是在说"我认为缺货成本是过剩成本的 19 倍"。很多时候这个隐含的判断从来没被明说过。)
LAB 02
两阶段随机规划
先建产能再看需求:情景树上算期望成本
问题
建厂房要在知道需求之前决定,而生产可以等需求明朗之后再调整。这种"先决策、再观测、再决策"的结构是供应链、能源、金融里最常见的形状,也是随机规划的标准模型。
模型
两阶段随机规划:第一阶段"此时此刻",第二阶段"见机行事"。
minx cTx + Eξ[ Q(x, ξ) ], Q(x,ξ) = miny { qTy : Wy ≥ h(ξ) − T(ξ)x }
x 是第一阶段决策(建多大产能),y 是第二阶段的补救(临时加班、外购)。随机解的价值 VSS = 用"需求取均值"求出的解的成本 − 随机规划解的成本,它量的正是"不确定性本身值多少钱"。随机规划的最优产能—
只按平均需求算出来的产能—
随机解比「平均值解」好多少(VSS)—
完美信息还能再省多少(EVPI)—
"先建产能,再看需求"是两阶段随机规划的标准形态:第一阶段的决策必须在不确定揭晓之前定下来,第二阶段可以见机行事(这里是自产还是外包)。很多人的做法是把随机需求换成它的平均值,解一个确定性问题——这叫"平均值解"。默认参数下它给出 K=100(正好是均值),而真正的随机最优是 K=115。把这个平均值解放回真实情景里评估,期望成本高出 4.1%。这个差额就是 VSS,随机规划的价值。把建设成本 a 从 1.0 降到 0.5,VSS 涨到 13.3%;升到 1.5,VSS 掉到 0.8%。规律是:第一阶段决策越便宜、第二阶段的补救越贵,提前多备一点就越值,"按平均值办事"错得就越多。还要注意最后一行的 EVPI:它是"如果能提前知道需求"能再省下的钱,也就是信息本身的价值上限。默认参数下 EVPI 是 35.93,远大于 VSS 的 9.69——这说明在这个问题上,花钱去把需求预测做准,比花力气把优化模型做精,回报大得多。这两个数字都能算出来,而它们回答的是做项目时最该先问的一个问题:到底该往哪儿投入。(顺带一提"平均值的陷阱":一个人平均水深一米的河,他仍然可能淹死。把随机变量换成均值再优化,得到的从来不是"平均意义上的最优"。)
LAB 03
鲁棒优化
不问概率只问最坏:不确定集一放大,解怎么变保守
问题
有时候你根本不知道概率分布,或者根本不想赌——比如桥梁的承载、医院的应急容量。这时候该问的不是"平均会怎样",而是"最坏会怎样"。鲁棒优化就是为这个问题设计的。
模型
鲁棒对应问题:对不确定集内的所有情形都可行。
minx maxξ∈U f(x, ξ) s.t. g(x, ξ) ≤ 0 ∀ξ ∈ U
U 是不确定集(盒式、椭球、预算约束型)。关键在于 U 的大小:太小等于没考虑不确定,太大解会保守到没法用。Bertsimas–Sim 的"预算"型不确定集让保守程度变成一个可以连续调节的参数 Γ。不做任何保护时的目标值—
当前 Γ 下的目标值—
为了鲁棒付出的代价—
这个解被违反的概率—
鲁棒优化不问"概率是多少",只问"最坏能坏到哪儿"。问题在于,如果所有不确定系数同时取最坏值,解会保守到没法用——而这种事实际上几乎不可能发生。Bertsimas 和 Sim 的办法是引入一个预算 Γ:假设最多只有 Γ 个系数同时取最坏,其余的取名义值。Γ=0 就是完全不防(名义解),Γ 等于系数个数就是完全防死(传统最坏情况)。把 Γ 从 0 拖到 2,看上下两条曲线怎么反向移动。上面的目标值一路下降——这就是"鲁棒的代价";下面的违约概率也一路下降。关键在于这两条曲线的形状不一样:违约概率掉得很快,而目标值掉得相对慢。前面一小段 Γ 买到的保护最划算——花百分之几的目标值,换掉大部分的违约风险;再往后就是边际收益递减,为了把最后几个百分点的风险也消掉,要付出不成比例的代价。这条"代价 vs 风险"的曲线才是鲁棒优化真正的交付物。它不替你决定该选哪个 Γ——那是一个业务问题,取决于违约的后果有多严重。但它把这个权衡明确地摆出来了,而不是藏在一个"我们用了鲁棒优化"的说法里。
LAB 04
机会约束
允许 5% 的概率违约,成本能省多少
问题
"绝对不能违约"往往贵得离谱。如果允许 5% 的概率超出容量,成本能省多少?这一台把"可靠性"变成一个可以和成本放在一起权衡的量——这正是电网、通信、库存规划里天天在做的事。
模型
机会约束:约束只要以足够高的概率成立即可。
P( g(x, ξ) ≤ 0 ) ≥ 1 − α; ξ 正态时可化为 aTx + z1−α‖Σ1/2x‖ ≤ b(二阶锥)
α 是允许的违约概率,z 是标准正态分位数。正态假设下机会约束是凸的(二阶锥规划),可以高效求解;一般分布下它通常非凸,要用样本近似或 CVaR 这类凸的替代。对应的正态分位点 z—
需要建的产能 K—
产能成本—
比「按 μ+3σ 设计」省了—
"绝对不能缺货"这个要求,在需求无界的时候是无法满足的。正态分布的尾巴伸向无穷,要保证 100% 不缺货就得建无穷大的产能。所以现实里的写法永远是"以 95% 的概率不缺货"——这就是机会约束。它有一个很好用的性质:当不确定量是正态的时候,机会约束可以直接改写成一条确定性约束:K ≥ μ + z_{1−ε}·σ。整个随机性被压缩成了一个分位点 z。ε=5% 时 z=1.645,ε=1% 时 z=2.326,ε=0.1% 时 z=3.090。把 ε 从 30% 一路拖到 0.1%,盯住那条成本曲线。你会看到它在 ε 很小的地方陡然上翘——从 5% 降到 1%,成本只多几个百分点;从 1% 降到 0.1%,又要多一截;而想真正做到 0,曲线直接冲出图外。这条曲线说的是所有可靠性设计的共同规律:可靠性的最后几个 9 是最贵的。数据中心的 99.9% 与 99.999%、电网的备用容量、医院的急诊床位,都在这条曲线上找位置。注意 σ 的作用:把 σ 从 40 降到 20,同样的 ε 下产能需求少了一半的安全余量。降低不确定性本身,往往比堆产能便宜得多——这就是需求预测、提前锁单、柔性产能这些做法的价值所在。
这一页想说的
三种处理不确定的方式对应三种问法。随机规划问"平均会怎样",需要概率分布,给出 VSS 与 EVPI 两个可算的数;鲁棒优化问"最坏会怎样",只需要范围,给出一条代价与风险的权衡曲线;机会约束问"允许多大概率出问题",在正态假设下能直接化成一条确定性约束。共同的一句话是:把随机变量换成它的平均值再优化,得到的既不是最优,也不是平均意义上的最优。