Gurobi 求解器文档


本文档详细介绍 GAMS 与 Gurobi 求解器的接口。Gurobi 是一款高性能数学规划求解器,能够高效求解线性规划(LP)、混合整数规划(MIP)、二次规划(QP)、二次约束规划(QCP)以及二阶锥规划等问题。GAMS 提供了与 Gurobi 求解器的完整接口,允许用户在 GAMS 建模系统中直接使用 Gurobi 的全部求解能力。

目录

1. 引言

Gurobi 优化器(Gurobi Optimizer)是全球领先的数学规划求解引擎,由 Gurobi Optimization 公司开发。它被公认为性能最强、速度最快的商业求解器之一,广泛应用于学术研究、工业工程、金融投资、供应链管理、能源优化等领域。

Gurobi 求解器支持的优化问题类型包括:

  • 线性规划(LP) — 目标函数和约束条件均为线性
  • 混合整数线性规划(MILP / MIP) — 部分或全部变量为整数
  • 二次规划(QP) — 目标函数为二次、约束为线性
  • 二次约束规划(QCP) — 约束条件中包含二次表达式
  • 混合整数二次规划(MIQP / MIQCP) — 整数变量与二次表达式的组合
  • 二阶锥规划(SOCP) — 支持二阶锥约束
  • 广义非线性约束 — 支持 Max、Min、Abs、And、Or 等函数约束

GAMS/Gurobi 接口(也称为 GAMS/Gurobi 链接)将 Gurobi 的高效求解引擎无缝集成到 GAMS 建模环境中。用户无需学习 Gurobi 的原生 API,只需通过 GAMS 的标准建模语法即可定义模型并调用 Gurobi 求解。该接口自动处理 GAMS 模型与 Gurobi 数据结构之间的转换,包括矩阵生成、求解参数传递、结果回传等。

Gurobi 求解器的核心优势在于:

  • 卓越的求解性能 — 在多类标准测试集上均表现优异,尤其擅长 MIP 问题
  • 先进的算法技术 — 包含多种单纯形法、障碍法(内点法)、分支定界、割平面、启发式方法等
  • 多核并行计算 — 自动利用多核 CPU 加速求解过程
  • 分布式优化 — 支持多机分布式 MIP 求解(需额外许可)
  • 丰富的参数调优 — 提供 200+ 参数选项,灵活控制求解行为
  • 自动参数调优(Tune) — 内置参数自动搜索工具
  • 解决方案池(Solution Pool) — MIP 多解搜索
  • 不可行性分析(IIS) — 快速定位不可行模型的冲突约束

2. 如何使用 Gurobi 运行模型

2.1 基本用法

在 GAMS 中使用 Gurobi 求解器,只需在模型中通过 OPTION 语句指定求解器为 GUROBI:

  OPTION LP  = GUROBI;     /* 线性规划使用 Gurobi */
  OPTION MIP = GUROBI;     /* 混合整数规划使用 Gurobi */
  OPTION QCP = GUROBI;     /* 二次约束规划使用 Gurobi */
  OPTION NLP = GUROBI;     /* 非线性规划(QCP 子集)使用 Gurobi */

指定求解器后,使用标准的 SOLVE 语句求解模型:

  SOLVE mymodel USING LP MINIMIZING z;

GAMS 会自动调用 Gurobi 引擎,并将求解结果返回给 GAMS 环境。

2.2 使用选项文件

如需传递 Gurobi 特定参数,可以在 GAMS 模型所在的目录下创建一个名为 gurobi.opt 的选项文件,并在 GAMS 模型中通过 OPTION GUROBI = gurobi.opt; 指定该文件:

  * 在 GAMS 模型中指定选项文件
  OPTION GUROBI = gurobi.opt;
  
  * gurobi.opt 文件内容示例:
  * Threads       4
  * MIPGap        1e-4
  * TimeLimit     3600
  * Method        -1
  * Presolve      2
  * MIPFocus      1

Gurobi 的选项也可以在 GAMS 模型内部使用 $ONECHO / $OFFECHO 嵌入方式传递:

  $ONECHO > gurobi.opt
  Threads   8
  MIPGap    0.001
  TimeLimit 1800
  $OFFECHO
  OPTION GUROBI = gurobi.opt;

2.3 支持的模型类型

GAMS/Gurobi 接口支持以下 GAMS 模型类型:

模型类型说明
LP线性规划
MIP混合整数线性规划
QCP二次约束规划(含 QP 二次目标)
MIQCP混合整数二次约束规划
RMP带松弛的 MIP
CNS约束非线性系统(满足约束即可)
DNLP带非连续导数的非线性规划(自动转换)

当模型类型为 NLP 或 DNLP 但实际为二次形式时,Gurobi 也可以自动识别并求解。

3. GAMS/Gurobi 概述

3.1 求解算法

Gurobi 为不同模型类型提供了多种求解算法:

线性规划(LP)算法

  • 对偶单纯形法(Dual Simplex) — 默认算法,适合大多数 LP 问题
  • 原始单纯形法(Primal Simplex) — 适合热启动或多阶段求解场景
  • 障碍法(Barrier / Interior Point) — 适合大规模 LP 问题,尤其是结构稀疏的问题
  • 并发法(Concurrent) — 同时运行多种算法,取最先完成的结果

混合整数规划(MIP)算法

Gurobi 的 MIP 求解器采用了经典的分支定界(Branch-and-Bound)框架,并集成了大量先进技术:

  • 预处理(Presolve) — 模型简化、约束消除、变量聚合等
  • 切割平面(Cutting Planes) — Gomory 割、覆盖割、Flow cover 割、Clique 割等十多种割平面
  • 启发式方法(Heuristics) — 包括 RINS、RENS、零目标启发式、邻域搜索等
  • 节点探测(Node Probing) — 变量固定与推断
  • 对称性检测(Symmetry Detection) — 打破对称性加速搜索
  • 子 MIP 求解(Sub-MIP) — 对子问题调用 MIP 求解
  • 可行解搜寻(Feasibility Pump) — 快速寻找可行解

二次规划与二阶锥规划

对于 QP 和 QCP 问题,Gurobi 使用障碍法(Barrier)结合交叉技术(Crossover)获得顶点解。SOCP 问题通过圆锥优化技术求解。

3.2 并行计算

Gurobi 支持多线程并行计算,线程数可通过 Threads 参数设置。对于 MIP 问题,Gurobi 会利用多线程并行探索分枝树的多个节点;对于 LP 问题,障碍法可利用多线程加速矩阵分解。此外,Gurobi 还支持分布式 MIP 求解(Distributed MIP),多台计算机协同求解同一 MIP 问题。

3.3 高级功能

解决方案池(Solution Pool)

对于 MIP 问题,Gurobi 可以搜索并保留多个最优或次优解。用户可以通过 PoolSolutionsPoolGap 参数控制解池的大小和质量范围。

不可行性系统(IIS - Irreducible Inconsistent Subsystem)

当模型不可行时,Gurobi 能够计算不可约矛盾子系统(IIS),帮助用户快速定位造成不可行的最小约束集。

灵敏度分析

Gurobi 支持对 LP 问题求解后进行灵敏度分析,包括目标函数系数的变化范围和约束右端项的变化范围。

冲突分析(Conflict Refinement)

对于不可行的 MIP 模型,Gurobi 可执行冲突分析,返回一组小的不可行约束子集用于诊断。

3.4 GAMS/Gurobi 数据传递机制

GAMS/Gurobi 接口通过以下流程完成求解:

  1. GAMS 将模型转换为标准 MPS 或 LP 格式表示
  2. 接口读取模型数据并构建 Gurobi 内部数据结构
  3. 应用用户指定的求解参数(来自选项文件和 GAMS 选项)
  4. 调用 Gurobi 求解引擎
  5. 求解完成后,将结果(变量值、约束对偶、求解状态等)回传到 GAMS 符号表
  6. GAMS 将结果显示给用户或在模型中进一步使用

4. GAMS 选项

GAMS/Gurobi 接口支持通过 GAMS 标准选项控制求解行为。以下是常用的 GAMS 选项及其与 Gurobi 参数的对应关系:

GAMS 选项对应 Gurobi 参数默认值说明
ResLimTimeLimit1e10求解时间限制(秒)。设为 0 表示无限制。
IterLimIterationLimit2e9单纯形法迭代次数限制。Barrier 法不受此限制。
OptCAMIPGapAbs0MIP 绝对最优性间隙。|BEST_BOUND - BEST_OBJECTIVE| ≤ OptCA。
OptCRMIPGap1e-4MIP 相对最优性间隙。|BEST_BOUND - BEST_OBJECTIVE| / |BEST_OBJECTIVE| ≤ OptCR。
ThreadsThreads0(自动)并行线程数。0 表示使用全部可用核。
OptFile指定 Gurobi 选项文件路径。
SysOutOutputFlag1是否输出求解日志。
SaveFile0是否保存工作文件(.g00/.gdx)。

4.1 常见 GAMS 求解控制选项

  • OPTION RESLIM = 3600; — 将求解时间限制设为 1 小时
  • OPTION ITERLIM = 500000; — 将迭代次数限制设为 500,000
  • OPTION OPTCR = 0.01; — 允许 1% 的相对最优性间隙
  • OPTION OPTCA = 0.001; — 允许 0.001 的绝对最优性间隙
  • OPTION THREADS = 8; — 使用 8 个线程并行求解
  • OPTION OPTFILE = 1; — 启用选项文件 gurobi.opt
  • OPTION SYSOUT = ON; — 在屏幕输出详细求解日志

5. 选项摘要

Gurobi 提供了丰富的参数选项(200+),涵盖算法选择、容差控制、输出设置、性能调优等方面。下表列出最常用的 Gurobi 参数,完整选项列表请参考 Gurobi 官方文档中的参数参考表。

参数名类型默认值说明
算法选择
Methodint-1-1=自动, 0=原始单纯形, 1=对偶单纯形, 2=障碍法, 3=并发, 4=并行障碍法
QCPMethodint-1QCP 求解算法:-1=自动, 0=原始单纯形, 1=对偶单纯形, 2=障碍法
NodeMethodint-1MIP 节点处的 LP 求解算法
FeasRelaxint0可行性松弛:0=否, 1=最小化加权偏差
容差与终止
MIPGapdouble1e-4MIP 相对最优性间隙
MIPGapAbsdouble0MIP 绝对最优性间隙
FeasibilityToldouble1e-6原始可行性容差
OptimalityToldouble1e-6对偶可行性容差
BarConvToldouble1e-8障碍法收敛容差
TimeLimitdoubleInfinity求解时间限制(秒)
IterationLimitdoubleInfinity迭代次数限制
NodeLimitdoubleInfinityMIP 节点数限制
SolutionLimitint2e9MIP 可行解数量限制
CutoffdoubleInfinity目标值截止(搜索优于该值的解)
BestObjStopdoubleInfinity找到 ≤ 该目标值时停止
BestBdStopdoubleInfinity边界 ≥ 该值时停止
MIP 策略
MIPFocusint00=均衡, 1=侧重可行解, 2=侧重最优性, 3=侧重边界
MIPGapEffortint0控制 MIPGap 的严格程度
VarBranchint-1变量分支策略:-1=自动, 0=伪代价, 1=强分支, 2=推断, 3=最小编导
BranchDirint0分支方向:-1=下分支优先, 0=自动, 1=上分支优先
Heuristicsdouble0.05启发式搜索时间比例
RINSint-1RINS 启发式频率:-1=自动, 0=禁用
SubMIPNodesint500子 MIP 节点限制
Symmetryint-1对称性检测:0=禁用, 1=保守, 2=积极
Disconnectedint-1分离组件策略
FracCutsint-1分数割平面:-1=自动, 0=禁用, 1-3=逐渐积极
GomoryPassesint-1Gomory 割平面轮次
CoverCutsint-1覆盖割平面
CliqueCutsint-1团割平面
ZeroHalfCutsint-1半整数割平面
ModKCutsint-1模 K 割平面
NetworkCutsint-1网络割平面
SubMIPCutsint-1子 MIP 割平面
FlowCoverCutsint-1Flow cover 割平面
MIPSepCutsint-1MIP 分离割平面
RLTCutsint-1RLT 割平面
预处理
Presolveint-1预处理:-1=自动, 0=禁用, 1=保守, 2=积极
PrePassesint-1预处理轮次:-1=自动
Aggregateint1聚合:0=禁用, 1=启用
PreDepRowint-1冗余行检测
PreSparsifyint0约束矩阵稀疏化
DualReductionsint1对偶归约(关闭后不删除不可行约束)
解池与多解
PoolSolutionsint10解池容量
PoolGapdoubleInfinity解池相对间隙
PoolSearchModeint00=默认, 1=收集更多解, 2=最佳多解搜索
输出控制
OutputFlagint10=关闭日志输出, 1=开启
LogFilestring""日志文件路径
LogIntervaldouble5日志输出间隔(秒)
DisplayIntervaldouble5控制台刷新间隔(秒)
MIPIntervalint1e4MIP 日志节点间隔
BarQCPConvToldouble1e-6QCP 障碍法收敛容差
性能调优
Threadsint0并行线程数(0=自动)
ConcurrentMIPint0并发 MIP 求解器数量
MIPIntervalint1e4MIP 节点间隔
Cutsint-1全局割平面控制:-1=自动, 0=禁用, 1-3=逐渐积极
CutPassesint-1割平面轮次限制
CutAggPassesint-1割平面聚合轮次
MinRelNodesint0启用相对 MIP 间隙的节点数
PumpPassesint-1Feasibility Pump 轮次
NormAdjustint-1障碍法调整参数
ObjScaledouble0目标函数缩放
ScaleFlagint2模型缩放:0=禁用, 1=适中, 2=积极
BarHomogeneousint0障碍法齐次模式(用于检测不可行或无界)
网络优化
NetworkAlgint-1网络单纯形法:-1=自动, 0=禁用
NetworkCostsint-1网络单纯形法预处理
分布式优化
DistributedMIPint0分布式 MIP 工作者数量
WorkerPoolstring""分布式工作者池连接地址
WorkerPasswordstring""工作者池密码

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

日志解读:

  • Presolve — 预处理阶段移除了 200 行和 500 列,耗时 0.15 秒
  • Iteration — 当前单纯形法迭代次数
  • Objective — 当前目标函数值
  • Primal Inf. / Dual Inf. — 原始和对偶不可行度,趋于 0 表示收敛
  • Time — 累计求解时间
  • Optimal objective — 最终最优目标值

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 日志各列解读:

列名说明
Nodes Expl已探索的节点数
Nodes Unexpl待探索的节点数(栈中)
Obj当前节点的松弛目标值
Depth当前节点在分枝树中的深度
IntInf当前节点中整数不可行变量的数量
Incumbent当前找到的最佳可行解目标值
BestBd当前最优边界(对偶下界)
Gap最优间隙 |Incumbent - BestBd| / |Incumbent|
It/Node每个节点的平均 LP 单纯形迭代次数
Time累计求解时间

日志中的关键信息:

  • H 标记表示通过启发式方法找到了新的可行解
  • cutoff 表示该节点被剪枝(不可能产生更优解)
  • Cutting planes 部分总结了生成的各类割平面数量
  • Solution count 表示解池中的可行解数量
  • gap 0.0000% 表示已证明最优

6.4 通过日志诊断问题

  • Gap 长时间不下降 — 可尝试调整 MIPFocus 或增加 Cutting plane 强度
  • 节点进度极慢 — 可尝试减少线程数或调整 NodeMethod
  • 长期未找到可行解 — 可增加 Heuristics 参数或启用更多 RINS 轮次
  • 障碍法收敛慢 — 可调整 BarConvTol 或 NormAdjust
  • 内存不足 — 可减少线程数、增加 NodefileStart 参数将节点存储到磁盘

7. 选项详细说明

7.1 算法选择选项

Method(LP 算法选择)

说明:指定连续模型(LP、QP)的求解算法。

  • -1(自动):Gurobi 根据模型特征自动选择算法。通常对 LP 选择对偶单纯形法,对 QP 选择障碍法。
  • 0(原始单纯形法):适合热启动场景或具有特殊结构的问题。
  • 1(对偶单纯形法):默认选择,对于大多数 LP 问题性能优异,特别适合行数多于列数的问题。
  • 2(障碍法/内点法):适合大规模 LP 问题(5 万行以上),特别是结构稀疏的问题。能充分利用多线程。
  • 3(并发法):同时启动原始单纯形、对偶单纯形和障碍法,取最先完成的结果。
  • 4(并行障碍法):多线程障碍法。

建议:对于大规模问题(10 万+ 变量或约束),建议尝试 Method=2(障碍法)并对比性能。

QCPMethod(二次约束规划算法选择)

类似于 Method,但针对 QCP 和 MIQCP 问题。默认 -1(自动),通常选择障碍法。

NodeMethod(MIP 节点算法选择)

指定 MIP 求解过程中各节点的 LP 松弛求解算法。默认 -1(自动),通常使用对偶单纯形法。

7.2 MIP 策略选项

MIPFocus

控制 MIP 求解器的搜索策略焦点:

  • 0(均衡模式):在寻找可行解和证明最优性之间取得平衡。
  • 1(侧重可行解):优先寻找可行解,适合难以找到初始可行解的问题。
  • 2(侧重最优性):优先提升边界和缩小间隙,适合已经找到可行解但需证明最优的问题。
  • 3(侧重边界):最大程度提升最佳边界,适合需要快速评估下界的问题。

VarBranch(变量分支策略)

  • -1(自动):Gurobi 自动选择分支策略
  • 0(伪代价分支):基于历史伪代价
  • 1(强分支):尝试多种分支选择最佳(最慢但最有效)
  • 2(推断分支):基于约束推断
  • 3(最小编导分支):减少分支树规模

Heuristics(启发式时间比例)

设定 MIP 求解中用于启发式搜索的时间比例(0.0 到 1.0)。默认 0.05(5%)。增加该值有助于更快找到可行解,但可能降低整体效率。

Cuts(割平面全局控制)

控制所有割平面类型的整体强度:

  • -1(自动):Gurobi 自动决定割平面策略
  • 0(禁用):关闭所有割平面
  • 1(保守):生成少量割平面
  • 2(正常):标准割平面生成
  • 3(积极):生成更多割平面

个别割平面类型(如 GomoryCuts、CoverCuts、CliqueCuts 等)可以独立设置。

7.3 预处理选项

Presolve(预处理强度)

  • -1(自动):Gurobi 自动选择
  • 0(禁用):不进行预处理,适合调试或非常特殊的问题
  • 1(保守):基础预处理
  • 2(积极):更全面的预处理,可能减少更多变量和约束

通常情况下,预处理可以大幅缩小模型规模,加速求解。如果怀疑预处理导致问题(如数值异常),可尝试将 Presolve 设为 0。

Aggregate(变量聚合)

启用(1)或禁用(0)变量聚合。聚合可以减少变量数量,但可能掩盖模型结构。默认启用。

DualReductions(对偶归约)

启用(1)或禁用(0)基于对偶的模型归约。注意:关闭后 Gurobi 将无法检测无界问题,但可以保留所有约束用于 IIS 分析。

7.4 解决方案池选项

PoolSolutions

设置解池的最大容量,默认 10。Gurobi 在求解过程中会保留最多该数量的最优解。适用于需要多个替代方案的分析场景。

PoolSearchMode

  • 0(默认模式):求解过程不变,自动收集搜索中发现的解
  • 1(多解模式):花费更多努力寻找更多可行解
  • 2(最佳多解模式):寻找 N 个最优解(N = PoolSolutions)

PoolGap

解池中解与最优解之间的最大允许相对间隙。例如 PoolGap=0.1 表示解池中的解与最优解之间的差距不超过 10%。

7.5 不可行性分析与可行性松弛

IIS(不可约矛盾子系统)

当模型不可行时,调用 Gurobi 的 computeIIS() 方法可以找到一个不可行的最小约束子集。在 GAMS 中,可以通过以下方式触发 IIS:

  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)构造一个松弛模型,通过放松约束来获得可行解。通过 FeasRelax 参数控制松弛的目标是最小化加权偏差。

7.6 GAMS 特定选项

GAMS 选项文件(GUROBI.opt)中的特殊指令

除了 Gurobi 标准参数外,选项文件还支持以下 GAMS 接口专用指令:

  • haltlevel — 控制终止级别:0=无, 1=警告, 2=错误
  • haltmode — 控制错误处理模式
  • printlevel — 控制输出详细程度
  • scaleopt — 附加缩放选项
  • saveopt — 保存选项到文件
  • readopt — 从文件读取选项

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 官方网站(www.gurobi.com)或授权分销商处购买 GAMS/Gurobi 链接许可证
  2. 购买后,Gurobi 会向您注册的邮箱发送许可证确认邮件
  3. 登录 Gurobi 用户中心,下载许可证文件或获取 grbgetkey 密钥

从 Gurobi 网站下载许可证

图 1:从 Gurobi 官网用户中心下载许可证

8.3 安装许可证

Gurobi 许可证可以通过 grbgetkey 命令安装。以下图片展示了获取 grbgetkey 命令的过程:

复制 grbgetkey 命令

图 2:从 Gurobi 用户中心复制 grbgetkey 命令

在命令行中执行 grbgetkey 命令:

  grbgetkey 12345678-1234-1234-1234-1234567890ab

系统会提示指定许可证文件的存储位置,按回车接受默认路径即可。安装完成后,Gurobi 会在用户主目录下生成 gurobi.lic 许可证文件。

8.4 许可证文件示例

gurobi.lic 文件的内容示例如下:

  # 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 中正常使用:

  1. 在 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 常见问题

问题可能原因解决方法
GAMS 找不到 Gurobi 求解器 GAMS 版本不支持 Gurobi 或 PATH 环境变量未设置 确认 GAMS 版本 ≥ 24.8;检查 PATH 中是否包含 Gurobi 安装目录
"License expired" 错误 Gurobi 许可证已过期 联系分销商续期许可证
"No Gurobi license found" 错误 gurobi.lic 文件未找到或位置不正确 确认 gurobi.lic 位于用户主目录或 GRB_LICENSE_FILE 环境变量指定路径
"Invalid license key" 错误 许可证密钥无效或已撤销 联系 Gurobi 支持或分销商
求解速度比预期慢 许可证限制了求解规模或使用了试用版 确认是否为完整版许可证;检查 Threads 参数设置

8.7 环境变量

Gurobi 使用以下环境变量定位许可证:

  • GRB_LICENSE_FILE — 指定 gurobi.lic 文件的完整路径
  • GRB_DEBUG — 启用调试模式(1=启用),用于诊断许可证问题
  • GRB_HOME — 指定 Gurobi 安装目录

在 GAMS 中也可以通过选项文件或命令行参数传递这些设置。

8.8 GAMS/Gurobi 链接版本兼容性

建议使用与 GAMS 版本兼容的 Gurobi 版本。下表列出了兼容性参考:

GAMS 版本兼容 Gurobi 版本
GAMS 45+Gurobi 11.x
GAMS 42-44Gurobi 10.x
GAMS 38-41Gurobi 9.x
GAMS 34-37Gurobi 8.x
GAMS 30-33Gurobi 7.x

* 具体兼容性请参考 GAMS 发行说明。

 


 

在线留言

尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

400-621-1085

(节假日期间办公室座机如无人接听,请选择其他联系方式,感谢理解!祝您节日快乐!)

 

联系我们 快速链接 相关产品 上海卡贝信息技术有限公司

©2025  上海卡贝信息技术有限公司

产品中心

下载中心

站点地图

隐私政策

 

销售QQ咨询

产品QQ咨询

淘宝店铺

 

GAMS:概述

最近更新

相关文档

下载试用

购买咨询

Berkeley Madonna

iThink

Stella Architect

IBM SPSS Modeler

DecisionTools Suite

NeuralTools

Frontier Analyst

Vensim

RISKOptimizer

PrecisionTree

LINGO

LINDO API

What'sBest!

@RISK

BARON

BayesiaLab

Oracle Crystal Ball

GEMPACK

GTAP Database

TreeAge