【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南
MATLAB + Gurobi + YALMIP 综合优化教程(进阶)
本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。
一、工具概览
1.1 MATLAB
强大的数学计算与可视化平台,提供矩阵运算、函数拟合、仿真建模等功能。
1.2 YALMIP
- MATLAB 中的建模语言。
- 提供符号变量、约束定义、目标函数表达,统一接口对接多种求解器。
- 安装地址:https://yalmip.github.io/download/
1.3 Gurobi
- 世界领先的商用优化求解器,支持 LP、MILP、QP、MIQP 等问题。
- 官网:https://www.gurobi.com
二、安装与配置
2.1 安装 Gurobi
- 注册账号并下载安装包。
- 安装并获取 license。
- 设置环境变量(Windows 或 Linux):
setx GUROBI_HOME "C:\gurobi\win64\10.0.1" setx PATH "%GUROBI_HOME%\bin;%PATH%"
2.2 MATLAB 中配置 Gurobi
cd 'C:\gurobi\win64\10.0.1\matlab'
gurobi_setup
2.3 安装 YALMIP
addpath(genpath('C:\path\to\yalmip'))
savepath
三、YALMIP 基础建模语法
x = sdpvar(2,1); % 定义变量 x1 和 x2
Constraints = [x(1)+x(2) <= 1, x >= 0]; % 定义约束条件
Objective = -x(1)^2 - 2*x(2)^2; % 目标函数
options = sdpsettings('solver','gurobi');
optimize(Constraints, Objective, options)
value(x) % 查看解
四、YALMIP 与 Gurobi 的集成优化实践案例
4.1 问题背景:生产与运输优化
- 工厂生产成本 + 运输成本最小化
- 满足市场需求、生产能力与运输限制
4.2 模型设定
变量:
- ( x_i ):工厂 (i) 的生产量
- ( y_{ij} ):从工厂 (i) 向市场 (j) 的运输量
目标函数:
min ∑ i c i p r o d x i + ∑ i , j c i j t r a n s y i j \min \sum_i c^{prod}_i x_i + \sum_{i,j} c^{trans}_{ij} y_{ij} mini∑ciprodxi+i,j∑cijtransyij
约束:
- x i ≤ P i m a x x_i \leq P_i^{max} xi≤Pimax
- ∑ j y i j ≤ x i \sum_j y_{ij} \leq x_i j∑yij≤xi
- ∑ i y i j ≥ D j \sum_i y_{ij} \geq D_j i∑yij≥Dj
4.3 MATLAB + YALMIP + Gurobi 实现
% 数据定义
numFactory = 2;
numMarket = 3;Pmax = [100; 80];
D = [50; 60; 40];
c_prod = [4; 5];
c_trans = [2 3 1; 4 2 3];% 决策变量
x = sdpvar(numFactory,1);
y = sdpvar(numFactory,numMarket);% 约束
Constraints = [];
for i = 1:numFactoryConstraints = [Constraints, ...x(i) <= Pmax(i), ...sum(y(i,:)) <= x(i)];
endfor j = 1:numMarketConstraints = [Constraints, ...sum(y(:,j)) >= D(j)];
end% 目标函数
Objective = c_prod' * x + sum(sum(c_trans .* y));% 求解
options = sdpsettings('solver','gurobi','verbose',1);
optimize(Constraints, Objective, options);% 输出
disp('生产计划:')
disp(value(x))
disp('运输计划:')
disp(value(y))
4.4 求解结果分析
- 显示最优生产计划和运输方案
- 可拓展布尔变量、碳排放限制、多目标模型等
4.5 Gurobi 参数控制(可选)
options = sdpsettings('solver','gurobi');
options.gurobi.TimeLimit = 10; % 最大运行时间
options.gurobi.MIPGap = 0.01; % MIP 最优性容差
options.gurobi.OutputFlag = 1; % 控制输出级别
五、常见问题与调试建议(预告)
- 模型 infeasible 如何排查?
- YALMIP 如何调试大模型?
- Gurobi 如何查看日志和中间解?
- 如何切换求解器?
更多内容(待续)
- 非线性与整数混合建模
- 分段函数与逻辑建模
- 多阶段优化与不确定性建模
- 使用 Gurobi 回调函数自定义策略