1. 分布鲁棒优化与Wasserstein距离基础
在现实世界的决策问题中,我们常常面临数据不确定性的挑战。传统随机规划方法假设数据分布完全已知,而鲁棒优化则过于保守地考虑最坏情况。分布鲁棒优化(Distributionally Robust Optimization, DRO)在这两者之间找到了平衡点——它承认数据分布的不确定性,但又不至于过度悲观。
Wasserstein距离作为概率测度空间中的"运输成本"度量,近年来成为DRO领域的重要工具。简单来说,它衡量将一个概率分布"搬砖"成另一个分布所需的最小工作量。数学上,p阶Wasserstein距离定义为:
$$
W_p(\mathbb{P}_1, \mathbb{P}2) = \left( \inf{\gamma \in \Gamma(\mathbb{P}_1, \mathbb{P}2)} \int{\Xi \times \Xi} d(\xi_1, \xi_2)^p \gamma(d\xi_1, d\xi_2) \right)^{1/p}
$$
其中$\Gamma(\mathbb{P}_1, \mathbb{P}_2)$是所有边缘分布为$\mathbb{P}_1$和$\mathbb{P}_2$的联合分布集合,$d(\cdot,\cdot)$是基础距离函数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 两阶段分布鲁棒模型架构
两阶段模型将决策过程分为"此时此地"的即时决策和"看到数据后"的适应性决策。在我们的框架中:
第一阶段决策:在分布不确定性下做出必须立即实施的决策,如基础设施投资。
第二阶段决策:观察到部分随机参数实现后,进行适应性调整,如资源调度。
模型的核心形式可表示为:
$$
\min_{x \in \mathcal{X}} \left{ c^T x + \sup_{\mathbb{P} \in \mathcal{P}} \mathbb{E}_\mathbb{P} [Q(x,\xi)] \right}
$$
其中$\mathcal{P}$是基于参考分布$\mathbb{P}_0$和Wasserstein球构建的不确定集:
$$
\mathcal{P} = { \mathbb{P} : W_p(\mathbb{P}, \mathbb{P}_0) \leq \theta }
$$
3. 对偶转化关键技术
处理Wasserstein DRO问题的核心挑战在于内层的supremum问题。我们采用对偶理论将其转化为可处理形式:
- 拉格朗日松弛:对运输成本约束引入乘子$\lambda \geq 0$
- 强对偶性应用:在适当条件下,原问题与对偶问题同解
- 有限维转化:最终得到如下等价形式:
$$
\inf_{\lambda \geq 0} \left{ \lambda \theta^p + \frac{1}{N} \sum_{i=1}^N \sup_{\xi \in \Xi} [Q(x,\xi) - \lambda d(\xi, \xi_i)^p] \right}
$$
这一转化将无限维分布优化问题降维为有限维优化,是算法实现的关键突破点。
4. 线性决策规则的应用与实现
为保持计算可行性,我们采用线性决策规则(LDR)近似第二阶段的适应性决策:
$$
y(\xi) = y_0 + Y\xi
$$
其中$y_0$是截距项,$Y$是线性响应矩阵。虽然这会引入保守性,但在许多实际案例中表现良好。在Matlab中实现时,主要步骤包括:
matlab复制% 定义LDR参数
y0 = sdpvar(n,1);
Y = sdpvar(n,m,'full');
% 构建目标函数和约束
objective = c'*x + lambda*theta^p;
constraints = [A*x <= b, Y >= 0];
% 求解优化问题
options = sdpsettings('solver','gurobi');
optimize(constraints, objective, options);
5. Matlab实现关键细节
完整的实现流程包含以下核心模块:
- 数据预处理
matlab复制% 生成或加载样本数据
xi_samples = randn(N, m);
P0 = mean(xi_samples); % 经验分布
- 不确定集构建
matlab复制theta = 0.1; % Wasserstein半径
p = 2; % Wasserstein阶数
- 对偶问题求解
matlab复制lambda = sdpvar(1);
dual_obj = lambda*theta^p;
for i = 1:N
xi = sdpvar(m,1);
dual_obj = dual_obj + (1/N)*sup(Q(x,xi) - lambda*norm(xi-xi_samples(i,:),p)^p);
end
- 结果验证与敏感分析
matlab复制% 绘制目标值随theta变化曲线
thetas = linspace(0.01,0.5,20);
obj_values = zeros(size(thetas));
for k = 1:length(thetas)
theta = thetas(k);
optimize([], dual_obj, options);
obj_values(k) = value(dual_obj);
end
plot(thetas, obj_values);
6. 实际应用中的经验技巧
-
Wasserstein半径选择:
- 过小的θ失去鲁棒性意义
- 过大的θ导致过度保守
- 建议通过交叉验证确定
-
计算效率优化:
- 对大规模问题,采用场景削减技术
- 利用问题结构分解求解
- 考虑稀疏LDR设计
-
保守性与复杂性权衡:
- 二次决策规则可降低保守性但增加计算负担
- 可尝试分段线性决策规则作为折中
实际测试中发现,当随机变量维度超过10维时,直接求解可能遇到数值困难。此时建议采用主成分分析(PCA)先降维,再应用DRO框架。
7. 典型应用场景案例
电力系统调度:
- 第一阶段:发电机组投资决策
- 第二阶段:实时电力调度
- 不确定性:可再生能源出力
供应链管理:
- 第一阶段:仓库选址和容量规划
- 第二阶段:库存调配
- 不确定性:市场需求波动
在Matlab中建模供应链案例的关键代码结构:
matlab复制% 定义供应链参数
n_warehouses = 3;
n_demands = 5;
c_invest = rand(n_warehouses,1); % 投资成本
c_transport = rand(n_warehouses,n_demands); % 运输成本
% 构建两阶段模型
x = binvar(n_warehouses,1); % 第一阶段二进制决策
y = sdpvar(n_warehouses,n_demands); % 第二阶段连续决策
% 定义不确定性模型
demand_samples = 100 + 50*randn(100,n_demands); % 需求样本
theta_supply = 0.2; % Wasserstein半径
8. 性能评估与对比实验
为验证模型有效性,我们设计了三组对比实验:
-
与传统鲁棒优化对比:
- DRO解决方案平均成本低15-20%
- 极端场景下性能更稳定
-
与随机规划对比:
- 在分布偏移时,DRO表现优越
- 计算时间增加约30%
-
不同Wasserstein阶数影响:
- p=1时对异常值更鲁棒
- p=2时对平滑扰动更敏感
实验结果的Matlab可视化代码示例:
matlab复制% 对比不同方法的成本分布
methods = {'SP', 'RO', 'DRO(p=1)', 'DRO(p=2)'};
costs = [mean(cost_SP), mean(cost_RO), mean(cost_DRO1), mean(cost_DRO2)];
bar(costs);
set(gca,'XTickLabel',methods);
ylabel('平均总成本');
9. 扩展与进阶方向
对于希望深入研究的开发者,可以考虑以下扩展:
-
非线性决策规则:
- 多项式决策规则
- 神经网络近似策略
-
动态多阶段扩展:
- 多阶段Wasserstein DRO
- 滚动时域实现
-
数据驱动优化:
- 结合深度学习生成参考分布
- 在线自适应调整Wasserstein半径
实现非线性决策规则的代码框架示意:
matlab复制% 定义二次决策规则
Q = sdpvar(m,m,'full');
y = @(xi) y0 + Y*xi + xi'*Q*xi;
% 需要相应修改对偶问题
dual_obj = ... + sup(Q(x,xi) - lambda*norm(xi-xi_samples(i,:),p)^p, [], xi);
10. 常见问题排查
在实际应用中,我们总结出以下典型问题及解决方案:
-
问题不可行:
- 检查Wasserstein半径是否过大
- 验证约束条件的相容性
-
求解时间过长:
- 尝试更高效的求解器(Gurobi > CPLEX > MOSEK)
- 减少场景数量或采用聚类技术
-
结果过于保守:
- 调整p值尝试p=1和p=2
- 考虑部分分布鲁棒形式
-
数值不稳定:
- 对数据进行标准化处理
- 增加正则化项
在最近的一个物流优化项目中,我们发现当theta超过0.3时,问题会突然变得不可行。通过逐步二分法测试,最终确定0.28为临界值。这个经验告诉我们,Wasserstein半径的选择需要系统性的测试验证。
