|
|
Gurobi 求解器文档本文档详细介绍 GAMS 与 Gurobi 求解器的接口。Gurobi 是一款高性能数学规划求解器,能够高效求解线性规划(LP)、混合整数规划(MIP)、二次规划(QP)、二次约束规划(QCP)以及二阶锥规划等问题。GAMS 提供了与 Gurobi 求解器的完整接口,允许用户在 GAMS 建模系统中直接使用 Gurobi 的全部求解能力。 目录1. 引言Gurobi 优化器(Gurobi Optimizer)是全球领先的数学规划求解引擎,由 Gurobi Optimization 公司开发。它被公认为性能最强、速度最快的商业求解器之一,广泛应用于学术研究、工业工程、金融投资、供应链管理、能源优化等领域。 Gurobi 求解器支持的优化问题类型包括:
GAMS/Gurobi 接口(也称为 GAMS/Gurobi 链接)将 Gurobi 的高效求解引擎无缝集成到 GAMS 建模环境中。用户无需学习 Gurobi 的原生 API,只需通过 GAMS 的标准建模语法即可定义模型并调用 Gurobi 求解。该接口自动处理 GAMS 模型与 Gurobi 数据结构之间的转换,包括矩阵生成、求解参数传递、结果回传等。 Gurobi 求解器的核心优势在于:
2. 如何使用 Gurobi 运行模型2.1 基本用法在 GAMS 中使用 Gurobi 求解器,只需在模型中通过 OPTION LP = GUROBI; /* 线性规划使用 Gurobi */ OPTION MIP = GUROBI; /* 混合整数规划使用 Gurobi */ OPTION QCP = GUROBI; /* 二次约束规划使用 Gurobi */ OPTION NLP = GUROBI; /* 非线性规划(QCP 子集)使用 Gurobi */ 指定求解器后,使用标准的 SOLVE mymodel USING LP MINIMIZING z; GAMS 会自动调用 Gurobi 引擎,并将求解结果返回给 GAMS 环境。 2.2 使用选项文件如需传递 Gurobi 特定参数,可以在 GAMS 模型所在的目录下创建一个名为 * 在 GAMS 模型中指定选项文件 OPTION GUROBI = gurobi.opt; * gurobi.opt 文件内容示例: * Threads 4 * MIPGap 1e-4 * TimeLimit 3600 * Method -1 * Presolve 2 * MIPFocus 1 Gurobi 的选项也可以在 GAMS 模型内部使用 $ONECHO > gurobi.opt Threads 8 MIPGap 0.001 TimeLimit 1800 $OFFECHO OPTION GUROBI = gurobi.opt; 2.3 支持的模型类型GAMS/Gurobi 接口支持以下 GAMS 模型类型:
当模型类型为 NLP 或 DNLP 但实际为二次形式时,Gurobi 也可以自动识别并求解。 3. GAMS/Gurobi 概述3.1 求解算法Gurobi 为不同模型类型提供了多种求解算法: 线性规划(LP)算法
混合整数规划(MIP)算法Gurobi 的 MIP 求解器采用了经典的分支定界(Branch-and-Bound)框架,并集成了大量先进技术:
二次规划与二阶锥规划对于 QP 和 QCP 问题,Gurobi 使用障碍法(Barrier)结合交叉技术(Crossover)获得顶点解。SOCP 问题通过圆锥优化技术求解。 3.2 并行计算Gurobi 支持多线程并行计算,线程数可通过 3.3 高级功能解决方案池(Solution Pool)对于 MIP 问题,Gurobi 可以搜索并保留多个最优或次优解。用户可以通过 不可行性系统(IIS - Irreducible Inconsistent Subsystem)当模型不可行时,Gurobi 能够计算不可约矛盾子系统(IIS),帮助用户快速定位造成不可行的最小约束集。 灵敏度分析Gurobi 支持对 LP 问题求解后进行灵敏度分析,包括目标函数系数的变化范围和约束右端项的变化范围。 冲突分析(Conflict Refinement)对于不可行的 MIP 模型,Gurobi 可执行冲突分析,返回一组小的不可行约束子集用于诊断。 3.4 GAMS/Gurobi 数据传递机制GAMS/Gurobi 接口通过以下流程完成求解:
4. GAMS 选项GAMS/Gurobi 接口支持通过 GAMS 标准选项控制求解行为。以下是常用的 GAMS 选项及其与 Gurobi 参数的对应关系:
4.1 常见 GAMS 求解控制选项
5. 选项摘要Gurobi 提供了丰富的参数选项(200+),涵盖算法选择、容差控制、输出设置、性能调优等方面。下表列出最常用的 Gurobi 参数,完整选项列表请参考 Gurobi 官方文档中的参数参考表。
6. GAMS/Gurobi 日志文件6.1 日志输出概述Gurobi 在求解过程中会输出详细的日志信息,通过分析日志,用户可以了解求解进度、诊断性能瓶颈并判断是否需要调整参数。GAMS/Gurobi 的日志输出通常出现在 GAMS 的 LST 文件以及控制台输出中。 6.2 LP 求解日志示例及解读 Gurobi Optimizer version 11.0.0 build v11.0.0rc0 (win64)
CPU model: Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz
Thread count: 8 physical cores, 16 logical cores
Optimize a model with 5000 rows, 10000 columns and 35000 nonzeros
Coefficient statistics:
Matrix range [1e-03, 1e+06]
Objective range [1e-01, 1e+03]
Bounds range [1e-01, 1e+04]
RHS range [1e-02, 1e+05]
Presolve removed 200 rows and 500 columns
Presolve time: 0.15s
Presolved: 4800 rows, 9500 columns, 32000 nonzeros
Iteration Objective Primal Inf. Dual Inf. Time
0 2.5000000e+03 1.200000e+02 2.000000e+01 0s
100 1.2500000e+03 5.000000e+01 8.000000e+00 0s
500 8.0000000e+02 1.000000e+01 2.000000e+00 0s
1000 7.5000000e+02 2.000000e+00 5.000000e-01 0s
1500 7.4000000e+02 0.000000e+00 0.000000e+00 0s
Solved in 1500 iterations and 0.25 seconds (0.05 work units)
Optimal objective 7.40000000e+02
日志解读:
6.3 MIP 求解日志示例及解读 Gurobi Optimizer version 11.0.0 build v11.0.0rc0 (win64)
Optimize a model with 2000 rows, 3000 columns and 12000 nonzeros
Model fingerprint: 0x1234abcd
Variable types: 2000 continuous, 1000 integer (500 binary)
Presolve removed 300 rows and 200 columns
Presolve time: 0.10s
Presolved: 1700 rows, 2800 columns, 10000 nonzeros
Root relaxation: objective 1.500000e+02, 120 iterations, 0.02 seconds
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
0 0 150.00000 0 50 -0.00000 150.00000 - - 0s
H 0 0 1020.0000000 150.00000 85.3% - 0s
0 0 175.00000 0 45 1020.00000 175.00000 82.8% - 0s
H 0 0 850.0000000 175.00000 79.4% - 0s
H 0 0 650.0000000 200.00000 69.2% - 0s
0 0 250.00000 0 30 650.00000 250.00000 61.5% - 0s
0 0 320.00000 0 20 650.00000 320.00000 50.8% - 0s
0 0 400.00000 0 15 650.00000 400.00000 38.5% - 0s
0 0 450.00000 0 10 650.00000 450.00000 30.8% - 0s
0 0 480.00000 0 5 650.00000 480.00000 26.2% - 0s
0 0 500.00000 0 0 650.00000 500.00000 23.1% - 0s
0 2 500.00000 0 0 650.00000 500.00000 23.1% - 0s
5412 521 512.00000 15 15 612.00000 520.00000 15.0% 15.2 5s
10200 1245 530.00000 20 10 605.00000 535.00000 11.6% 14.8 10s
15000 412 602.00000 545.00000 9.47% 13.5 15s
22000 311 cutoff 600.00000 555.00000 7.50% 12.1 20s
Cutting planes:
Gomory: 12
Cover: 8
Clique: 5
Flow cover: 3
MIR: 10
Explored 28500 nodes (350000 simplex iterations) in 30.45 seconds (12.5 work units)
Thread count was 8 (of 16 available processors)
Solution count 5: 600 602 605 ... 612
Optimal solution found (tolerance 1.00e-04)
Best objective 6.0000000000e+02, best bound 6.0000000000e+02, gap 0.0000%
MIP 日志各列解读:
日志中的关键信息:
6.4 通过日志诊断问题
7. 选项详细说明7.1 算法选择选项Method(LP 算法选择)说明:指定连续模型(LP、QP)的求解算法。
建议:对于大规模问题(10 万+ 变量或约束),建议尝试 Method=2(障碍法)并对比性能。 QCPMethod(二次约束规划算法选择)类似于 Method,但针对 QCP 和 MIQCP 问题。默认 -1(自动),通常选择障碍法。 NodeMethod(MIP 节点算法选择)指定 MIP 求解过程中各节点的 LP 松弛求解算法。默认 -1(自动),通常使用对偶单纯形法。 7.2 MIP 策略选项MIPFocus控制 MIP 求解器的搜索策略焦点:
VarBranch(变量分支策略)
Heuristics(启发式时间比例)设定 MIP 求解中用于启发式搜索的时间比例(0.0 到 1.0)。默认 0.05(5%)。增加该值有助于更快找到可行解,但可能降低整体效率。 Cuts(割平面全局控制)控制所有割平面类型的整体强度:
个别割平面类型(如 GomoryCuts、CoverCuts、CliqueCuts 等)可以独立设置。 7.3 预处理选项Presolve(预处理强度)
通常情况下,预处理可以大幅缩小模型规模,加速求解。如果怀疑预处理导致问题(如数值异常),可尝试将 Presolve 设为 0。 Aggregate(变量聚合)启用(1)或禁用(0)变量聚合。聚合可以减少变量数量,但可能掩盖模型结构。默认启用。 DualReductions(对偶归约)启用(1)或禁用(0)基于对偶的模型归约。注意:关闭后 Gurobi 将无法检测无界问题,但可以保留所有约束用于 IIS 分析。 7.4 解决方案池选项PoolSolutions设置解池的最大容量,默认 10。Gurobi 在求解过程中会保留最多该数量的最优解。适用于需要多个替代方案的分析场景。 PoolSearchMode
PoolGap解池中解与最优解之间的最大允许相对间隙。例如 PoolGap=0.1 表示解池中的解与最优解之间的差距不超过 10%。 7.5 不可行性分析与可行性松弛IIS(不可约矛盾子系统)当模型不可行时,调用 Gurobi 的 SOLVE mymodel USING LP MINIMIZING z; * 如果模型不可行,Gurobi 会自动计算并报告 IIS IIS 输出示例: IIS computed: 10 rows, 5 columns Feasibility condition: 5 constraints cannot be satisfied simultaneously FeasRelax(可行性松弛)当模型不可行时,可以通过可行性松弛(Feasibility Relaxation)构造一个松弛模型,通过放松约束来获得可行解。通过 7.6 GAMS 特定选项GAMS 选项文件(GUROBI.opt)中的特殊指令除了 Gurobi 标准参数外,选项文件还支持以下 GAMS 接口专用指令:
7.7 数值稳定性选项FeasibilityTol(原始可行性容差)约束违反的最大允许值。默认 1e-6。对于数值困难的问题,可适当放宽到 1e-6 到 1e-5 之间。 OptimalityTol(对偶可行性容差)对偶约束违反的最大允许值。默认 1e-6。 BarConvTol(障碍法收敛容差)障碍法算法的对偶间隙收敛容忍度。默认 1e-8。越小越精确,但可能增加迭代次数。 ScaleFlag(模型缩放)控制 Gurobi 对模型矩阵的缩放策略:0=禁用, 1=基础缩放, 2=积极缩放(默认)。对于数值问题,可尝试不同缩放级别。 ObjScale(目标函数缩放)自动缩放目标函数,改善数值稳定性。默认 0(自动)。 7.8 自动参数调优(Tune)Gurobi 提供了自动参数调优工具(Tune),可以通过在选项文件中设置以下参数启用: TuneResults 1 TuneOutput 1 TuneTimeLimit 3600 调优工具会尝试多组参数组合,返回最优的参数设置。适用于需要对某个特定模型进行深度优化的场景。 8. 设置 GAMS/Gurobi 链接许可证8.1 许可证概述要使用 GAMS/Gurobi 接口,需要同时拥有有效的 GAMS 许可证和 Gurobi 许可证。GAMS/Gurobi 链接许可证允许用户在 GAMS 环境中调用 Gurobi 求解器。该许可证由 Gurobi Optimization 公司签发,可通过 GAMS 分销商(如上海卡贝信息技术有限公司)购买。 8.2 获取许可证
图 1:从 Gurobi 官网用户中心下载许可证 8.3 安装许可证Gurobi 许可证可以通过
图 2:从 Gurobi 用户中心复制 grbgetkey 命令 在命令行中执行 grbgetkey 命令: grbgetkey 12345678-1234-1234-1234-1234567890ab 系统会提示指定许可证文件的存储位置,按回车接受默认路径即可。安装完成后,Gurobi 会在用户主目录下生成 8.4 许可证文件示例
# Gurobi license file TYPE=TOKEN TOKEN_SERVER=licenseserver.company.com TOKEN_PORT=61000 EXPIRATION=2026-12-31 或对于单机版许可证: # Gurobi license file TYPE=INDIVIDUAL KEY=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX EXPIRATION=2026-12-31 8.5 验证许可证安装完成后,可以通过以下方式验证 Gurobi 是否能在 GAMS 中正常使用:
$title Gurobi License Test Variable x, z; Equation obj; obj.. z =e= x; x.lo = 0; x.up = 10; Model test /all/; OPTION LP = GUROBI; SOLVE test USING LP MINIMIZING z; Display "Gurobi 许可证验证成功", z.l; 如果求解成功且输出中包含 "Gurobi Optimizer version" 信息,则说明许可证已正确安装。 8.6 常见问题
8.7 环境变量Gurobi 使用以下环境变量定位许可证:
在 GAMS 中也可以通过选项文件或命令行参数传递这些设置。 8.8 GAMS/Gurobi 链接版本兼容性建议使用与 GAMS 版本兼容的 Gurobi 版本。下表列出了兼容性参考:
* 具体兼容性请参考 GAMS 发行说明。
在线留言尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||