XPRESS 求解器 — FICO XPRESS
FICO XPRESS 是一款业界领先的高性能商业数学规划求解器,由 FICO(Fair Isaac Corporation)公司开发,专为解决大规模、复杂的优化问题而设计。XPRESS 支持线性规划(LP)、混合整数规划(MIP)、二次规划(QP)、二次约束规划(QCP)、非线性规划(NLP)等多种问题类型,以其卓越的求解速度和数值稳定性在全球范围内获得广泛认可。作为 GAMS 生态系统中的核心求解器之一,XPRESS 与 GAMS 建模环境实现无缝集成,使建模人员能够充分利用其强大的求解能力。
XPRESS 在供应链优化、生产与物流调度、金融投资组合优化、能源规划、石油化工、航空调度等领域拥有极为丰富的成功案例,是大规模工业化优化问题的理想选择。
目录
FICO XPRESS 求解器是 FICO 公司开发的企业级数学优化引擎,自推出以来一直是全球优化领域的标杆产品,在性能基准测试中持续保持领先地位。XPRESS 的核心特点包括:
- 多问题类型支持:可处理 LP、MIP、QP、QCP、NLP 以及多目标优化问题,覆盖广泛的优化应用场景。
- 多种求解算法:提供原始单纯形法、对偶单纯形法、网络单纯形法、障碍法(内点法)以及非线性规划算法,自动选择最优求解策略。
- 先进的 MIP 引擎:集成割平面生成、启发式算法、节点探测、分支策略、对称性检测等核心技术,大幅提升整数规划求解效率。
- 强大的预处理能力:在求解前自动简化模型,消除冗余约束和变量,收紧边界,减少问题规模,提高求解速度。
- 冲突分析(Infeasibility Analysis):在模型不可行时提供详细的不可行原因分析(IIS),帮助建模人员快速定位和修正问题。
- 多线程与分布式并行:支持多核并行和跨机器的分布式求解,充分利用计算资源处理超大规模问题。
- 数值稳定性:采用先进的数值线性代数技术,确保在广泛问题类型中保持高度稳定的求解性能。
在 GAMS 中使用 XPRESS 求解器非常简单。以下是在 GAMS 模型中调用 XPRESS 的基本方法:
2.1 基本调用
在 GAMS 模型中,通过在 solve 语句中指定求解器名称即可调用 XPRESS:
Model mymodel /all/;
Solve mymodel using LP maximizing profit;
如需明确指定使用 XPRESS,可以在 GAMS 模型代码中使用 Option 语句设置:
Option LP = xpress;
Option MIP = xpress;
Option QCP = xpress;
Option NLP = xpress;
2.2 从命令行调用
在命令行中运行 GAMS 时,可以通过以下方式指定 XPRESS 求解器:
gams mymodel.gms lp=xpress
gams mymodel.gms mip=xpress
2.3 选项文件
XPRESS 求解器的选项可以通过选项文件(xpress.opt)进行配置。在 GAMS 模型中通过以下方式引用:
$onecho > xpress.opt
* XPRESS 选项文件示例
defaultalgs=4
mipalg=4
mipthreads=4
cputime=3600
outputlog=1
$offecho
mymodel.optfile = 1;
2.4 GAMS 示例模型
以下是一个完整的 GAMS 模型示例,演示如何使用 XPRESS 求解一个简单的混合整数规划问题:
Set
i /1*5/
;
Variables
x(i) 生产数量
profit 总利润
;
Binary Variable x(i);
Parameters
price(i) 产品单价 /1 100, 2 120, 3 150, 4 80, 5 200/
cost(i) 生产成本 /1 60, 2 70, 3 85, 4 50, 5 110/
cap(i) 产能限制 /1 100, 2 80, 3 60, 4 120, 5 50/
;
Equations
obj 目标函数
capcon(i) 产能约束
;
obj.. profit =e= sum(i, (price(i) - cost(i)) * x(i));
capcon(i).. x(i) =l= cap(i);
Model prodplan /all/;
Option MIP = xpress;
Solve prodplan using MIP maximizing profit;
Display profit.l, x.l;
XPRESS 提供了丰富且精细的选项参数,允许用户根据具体问题的特征调整求解行为。以下按分类列出最常用的选项参数:
3.1 算法控制选项
| 选项名 |
默认值 |
说明 |
| DEFAULTALGS |
4 |
LP 求解算法选择:1=原始单纯形法,2=对偶单纯形法,3=网络单纯形法,4=自动选择,5=障碍法(内点法) |
| BARALG |
0 |
障碍法算法:0=自动,1=同伦法,2=不可行-不可行法,3=不可行-可行法,4=可行-不可行法 |
| MIPALG |
4 |
MIP 求解算法:4=自动选择 |
| MIPTHREADS |
0 |
MIP 并行求解线程数:0=自动(使用全部可用核心),正整数=指定线程数 |
| THREADS |
0 |
LP 及障碍法求解使用的线程数 |
| CHOLESKYALG |
0 |
Cholesky 分解算法:0=自动,1=外存模式,2=内存模式 |
| PRESOLVE |
1 |
预处理开关:0=关闭,1=开启(推荐),2=完全预处理 |
| SCALING |
1 |
模型缩放:0=关闭,1=平衡缩放,2=行缩放,3=列缩放,4=几何缩放 |
3.2 MIP 搜索策略选项
| 选项名 |
默认值 |
说明 |
| MIPABSSTOP |
0 |
MIP 绝对停止容差,当 MIP 间隙的绝对值小于此值时停止求解 |
| MIPRELSTOP |
1e-4 |
MIP 相对停止容差,当 (|bestbound-bestint|)/(|bestint|+1e-10) 小于此值时停止 |
| MIPMAXTIME |
-1 |
MIP 求解最大时间限制(秒),-1 表示无限制 |
| MIPMAXNODE |
-1 |
MIP 最大节点数限制 |
| MIPMAXSOL |
-1 |
MIP 找到的最优解数量上限 |
| CUTSTRATEGY |
0 |
割平面生成策略:0=自动,1=保守,2=中等,3=激进 |
| HEURSTRATEGY |
0 |
启发式搜索策略:0=自动,1=关闭,2=基本,3=增强 |
| MIPFOCUS |
0 |
MIP 搜索侧重:0=自动,1=寻找可行解,2=证明最优性,3=同时兼顾 |
| BRANCHSTRATEGY |
0 |
分支策略:0=自动,1=向下分支优先,2=向上分支优先 |
| NODESELECTION |
3 |
节点选择策略:1=深度优先,2=广度优先,3=最佳优先 |
| VARSELECTION |
0 |
变量选择策略:0=自动,1=最大不可行性,2=伪代价,3=强分支 |
| MIPADDCPUNODES |
0 |
MIP 额外节点处理 CPU 时间限制 |
3.3 求解限制选项
| 选项名 |
默认值 |
说明 |
| CPUTIME |
1e8 |
CPU 时间限制(秒) |
| MAXTIME |
-1 |
求解总时间限制(秒),-1 表示无限制 |
| ITERLIM |
2e9 |
最大迭代次数限制 |
| LPITERLIM |
2e9 |
LP 求解的最大迭代次数限制 |
| MIPABSCUTOFF |
-1e8 |
MIP 绝对截断值,目标函数低于此值的分支将被修剪 |
| MIPRELCUTOFF |
0 |
MIP 相对截断值 |
3.4 输出控制选项
| 选项名 |
默认值 |
说明 |
| OUTPUTLOG |
1 |
日志输出级别:0=无输出,1=正常输出,2=详细输出,3=调试输出 |
| MIOLOG |
-1 |
MIP 日志显示频率,-1 表示自动计算 N 值 |
| MIPTRACE |
-1 |
MIP 轨迹文件输出级别 |
| SOLUTIONFILE |
0 |
解文件输出:0=不输出,1=输出到文件 |
3.5 数值与精度选项
| 选项名 |
默认值 |
说明 |
| FEASTOL |
1e-6 |
LP 可行性容差 |
| OPTIMALITYTOL |
1e-6 |
LP 最优性容差 |
| MIPADDCUTOFF |
1e-6 |
MIP 整数可行性容差 |
| ETOL |
1e-6 |
数值计算精度容差 |
| CONTRAINDICATE |
0 |
指示矛盾约束的检测级别 |
4.1 LP 求解算法
XPRESS 为线性规划问题提供了多种求解算法,用户可通过 DEFAULTALGS 选项选择:
- 原始单纯形法(Primal Simplex - DEFAULTALGS=1):从原始可行解出发,逐步改进目标函数值。适合变量数量远多于约束数量的问题,以及热启动(Warm Start)场景。
- 对偶单纯形法(Dual Simplex - DEFAULTALGS=2):从对偶可行解出发,是目前 XPRESS 默认且最稳健的 LP 求解算法。适合约束数量远多于变量数量的问题,以及 MIP 求解过程中的节点松弛求解。对偶单纯形法具有出色的数值稳定性和较快的迭代收敛速度。
- 网络单纯形法(Network Simplex - DEFAULTALGS=3):专门针对网络流问题进行了深度优化,对于具有网络结构的问题速度极快。
- 障碍法/内点法(Barrier/Interior Point - DEFAULTALGS=5):采用原-对偶路径跟踪算法(Primal-Dual Path Following),适合大规模稀疏 LP 问题,可利用多线程并行加速矩阵分解过程。对于超过数十万变量或约束的问题,障碍法通常是最快的选择。
XPRESS 的自动算法选择机制(DEFAULTALGS=4)会根据问题的结构特征(如行列比、稀疏模式、变量边界等)自动选择最适合的算法,对于绝大多数问题都能提供良好的性能。
4.2 MIP 求解策略
XPRESS 的 MIP 求解器集成了一系列先进的求解技术,使其在工业界和学术界 MIP 基准测试中持续保持领先:
- 预处理(Presolve):在分支定界求解前自动简化模型,消除冗余约束和变量,收紧边界,固定某些变量的取值,检测不可行性。XPRESS 的预处理器在 MIP 求解中通常能减少 30%~70% 的问题规模。
- 割平面生成(Cut Generation):自动生成各类割平面,包括 Gomory 割(Gomory Cuts)、混合整数舍入割(MIR Cuts)、覆盖割(Cover Cuts)、团割(Clique Cuts)、流覆盖割(Flow Cover Cuts)、GUB 割(Generalized Upper Bound Cuts)等。CUTSTRATEGY 选项控制割平面生成的激进程度。
- 启发式算法(Heuristics):包括取整启发式(Rounding Heuristics)、RINS(Relaxation Induced Neighborhood Search)、局部分支(Local Branching)、引导改进(Guided Improvement)、可行性泵(Feasibility Pump)等。HEURSTRATEGY 选项控制启发式搜索的强度。
- 分支策略(Branching):采用强分支(Strong Branching)、伪代价分支(Pseudocost Branching)和基于可靠性的分支(Reliability Branching)等多种策略的混合体,智能选择分支变量以最小化搜索树规模。
- 节点探测(Node Probing):通过向前探测技术推断变量之间的逻辑关系,推导出额外的定界约束。
- 对称性检测(Symmetry Detection):自动检测模型中的对称结构(如对称变量的置换对称性),并添加对称性打破约束(Symmetry Breaking Constraints),避免等价的重复搜索。
4.3 QP 与 QCP 求解
对于二次规划问题,XPRESS 支持凸二次目标函数(QP)和凸二次约束(QCP)。求解算法包括:
- 扩展单纯形法(Extended Simplex):将对偶单纯形法和原始单纯形法扩展到二次规划,适用于中小规模的凸 QP 问题。
- 障碍法(Barrier):对于大规模 QP 和 QCP 问题通常效率更高,能够充分利用问题的稀疏结构。
- 序列二次规划(SQP):适用于更广泛的非线性凸优化问题,通过逐次求解二次近似来逼近原问题的最优解。
4.4 不可行性分析(Infeasibility Analysis)
当模型不可行时,XPRESS 提供强大的不可行性分析工具,帮助建模人员快速诊断和修复问题:
- 冲突分析(Conflict Analysis - IIS):自动识别导致不可行的最小约束子集(IIS,Irreducible Inconsistent Subsystem)。IIS 是一个精简的约束集合,移除其中任意一个约束都会使剩余子问题可行,从而精准定位导致不可行的根源。
- 可行松弛(Feasibility Relaxation):自动分析并推荐最小程度的约束松弛方案,计算出需要放宽哪些约束、放宽多少才能使模型变为可行。
在 GAMS 中启用不可行性分析的方式:
$onecho > xpress.opt
conflictanalysis=1
$offecho
mymodel.optfile = 1;
4.5 多线程与并行求解
XPRESS 支持多线程并行求解,可充分利用现代多核处理器的计算能力:
- MIP 并行:通过 MIPTHREADS 选项控制 MIP 分支定界树搜索的并行线程数。不同线程同时探索不同的分支节点,通过负载均衡机制确保各线程的工作量分配合理。
- 障碍法并行:通过 THREADS 选项控制障碍法中矩阵分解(Cholesky/LU 分解)的并行度,可显著加速大规模 LP/QP 问题的求解。
- 分布式并行(XPRESS Distributed MIP):支持跨多台机器的分布式 MIP 求解,各节点通过网络通信共享边界信息和最优解,适合超大规模单一 MIP 问题的加速求解。
4.6 多目标优化
XPRESS 支持多目标优化(Multi-Objective Optimization),通过两种策略处理多个冲突的优化目标:
- 加权和法(Weighted Sum):为每个目标分配权重,组合成单一目标函数进行优化,适用于各目标重要性明确且可量化比较的场景。
- 分层法(Lexicographic / Priority Order):按用户指定的优先级逐层优化,高优先级目标的值被固定为最优值后,继续优化低优先级目标。适用于各目标优先级明确的场景。
XPRESS 可以自动生成帕累托最优前沿,帮助决策者理解不同目标之间的权衡关系。
5.1 模型调试技巧
- 求解不可行模型:启用冲突分析功能(CONFLICTANALYSIS=1),检查不可行约束子系统的定位结果。首先检查约束边界是否一致(如上限低于下限),变量边界是否合理,以及是否有输入数据错误。
- 求解无界模型:检查目标函数系数方向是否正确,变量边界是否设置不当导致目标值无限增长。特别注意自由变量的边界设置。
- 数值稳定性:避免在模型中使用极端的系数值(如 1e+10 或 1e-10 量级),对系数矩阵进行归一化处理可以显著提高数值稳定性。启用 SCALING 选项可自动进行模型缩放。
5.2 性能优化建议
- 选择合适的算法:大部分 LP 问题使用默认的自动算法选择(DEFAULTALGS=4)即可获得良好性能。对于数值敏感的问题可尝试对偶单纯形法,对于大规模稀疏问题可尝试障碍法。
- MIP 性能调优:如果求解时间过长,可以尝试调整 CUTSTRATEGY 和 HEURSTRATEGY 参数。若目标是快速获得可行解,可设置 MIPFOCUS=1;若需要严格证明最优性,可设置 MIPFOCUS=2。
- 利用多线程:设置 MIPTHREADS 为实际可用的物理核心数(非逻辑线程数),过多的线程可能导致内存带宽竞争和收益递减。通常 4~8 线程的加速效果最明显。
- 合理设置停止标准:如果实际业务不需要严格最优解,适当放宽 MIPRELSTOP(如设为 1e-3 或 1e-2)可以大幅缩短求解时间。
- 模型规模控制:在建模时尽量使用紧缩的边界,减少不必要的变量,利用 GAMS 的建模特性减少模型中的对称性。
- 热启动(Warm Start):在求解系列相似问题时,使用前一次求解的基解作为初始点可以显著加速 LP 求解过程。
5.3 常见问题排除
- "Resource limit reached":求解器达到时间或迭代限制,增加 CPUTIME 或 ITERLIM 限制值。
- MIP 间隙收敛缓慢:尝试提高 CUTSTRATEGY 级别(设为 2 或 3),或调整分支策略 NODESELECTION。
- LP 求解出现数值警告:检查模型系数的数量级是否跨度过大,启用 SCALING 选项,或考虑对系数进行手工缩放。
- XPRESS 未找到任何可行解:检查模型是否确实可行(可通过移除整数约束测试松弛问题),增加 HEURSTRATEGY 级别,或设置 MIPFOCUS=1 优先寻找可行解。
- 求解结果不符合预期:检查模型的数学表达式是否正确,约束方向是否设置正确,目标函数系数符号是否与预期一致。
5.4 与其他求解器的配合
在 GAMS 环境中,XPRESS 可以与其他求解器配合使用,实现混合求解策略:
- CONOPT / MINOS + XPRESS:先用 CONOPT 或 MINOS 求解连续 NLP 松弛问题得到初始解或可行点,然后将该解作为 XPRESS MIP 求解的起始点(热启动)。
- XPRESS + BARON:对于含有非凸非线性约束的 MINLP 问题,可先用 XPRESS 求解 MIP 部分,再使用 BARON 进行全局优化。
- XPRESS 多实例并行:在同一台机器上启动多个 XPRESS 求解器实例,以不同参数设置并行求解同一模型,采用最优结果。
5.5 性能基准参考
根据第三方基准测试(如 Mittelmann 和 Hans Mittelmann 的 LP/MIP 基准测试),XPRESS 在以下方面表现突出:
- LP 求解速度在障碍法和大规模问题上与 CPLEX 和 Gurobi 并列第一梯队。
- MIP 求解在复杂整数规划问题上具有业界领先的鲁棒性和求解速度。
- 在 MIP 启动求解、热启动场景下,XPRESS 的对偶单纯形法具有显著优势。
6.1 许可证文件
FICO XPRESS 求解器需要有效的许可证才能运行。许可证通常以文件形式提供:
- xpauth.xpr:XPRESS 认证文件,包含许可证密钥信息。这是 XPRESS 许可证的核心文件。
- Community 许可:FICO 提供免费的 XPRESS Community Edition,适用于小规模的非商业用途问题(通常限制变量数不超过 2,000 个,约束数不超过 10,000 个)。
- 商业许可:完整的商业许可支持无限规模的问题,并提供全面的技术支持服务,包括单机许可证、并发网络许可证(Floating License)和分布式许可证等多种形式。
6.2 环境变量设置
为确保 XPRESS 能够正确找到许可证文件,需要设置以下环境变量:
XPRESSDIR=C:\xpress (XPRESS 安装目录)
XPAUTH_PATH=C:\xpress\licenses\xpauth.xpr (许可证文件完整路径)
在 Windows 系统中,可以通过"系统属性"→"高级"→"环境变量"进行设置;在 Linux 系统中,可以在 .bashrc 或 .profile 文件中添加以下行:
export XPRESSDIR=/opt/xpress
export XPAUTH_PATH=/opt/xpress/licenses/xpauth.xpr
6.3 许可证验证
安装完成后,可以通过以下方式验证许可证是否配置正确:
- 在命令行中运行
xpress -v 或 xpress -license 查看许可证信息,确认许可证类型、过期日期和可用功能。
- 在 GAMS 中运行一个简单模型,检查求解日志中是否显示 XPRESS 许可证状态为有效。
- 检查 XPRESS 日志输出中的许可证信息行,确认许可证类型(Community 或商业版)、过期日期和可用功能模块。
6.4 GAMS 中的许可证集成
当 XPRESS 与 GAMS 配合使用时,GAMS 会在求解过程中自动调用 XPRESS 并传递许可证信息。通常只需确保 XPRESS 本身的许可证配置正确即可。如果 GAMS 报告 XPRESS 许可证错误,请检查:
- XPRESS 安装目录是否在系统 PATH 环境变量中。
- XPAUTH_PATH 环境变量是否指向正确的许可证文件。
- XPRESS 和 GAMS 的版本是否兼容。
- 是否有足够的许可证可用(例如并发许可证是否已被其他用户占用)。
- GAMS 的求解器配置文件(gamsinst.cmd)中 XPRESS 求解器是否已正确注册。
6.5 常见许可证问题
- "No license found":检查 XPAUTH_PATH 环境变量和许可证文件是否存在,确认文件路径和文件名拼写正确。
- "License expired":许可证已过期,请联系 FICO 或上海卡贝信息技术有限公司续期。
- "License feature not available":当前许可证不包含所请求的功能模块,请确认许可证类型是否涵盖所需求解功能。
- "Concurrent license checkout failed":并发许可证已满,请等待其他用户释放或购买更多许可证。
- "Host ID mismatch":许可证绑定的主机信息与当前机器不符,请确认许可证与当前机器的 MAC 地址或主机名匹配。
如需获取 XPRESS 许可证或技术支持,请联系上海卡贝信息技术有限公司:
全文完
|