MOSEK 求解器文档

 


MOSEK 是丹麦MOSEK ApS公司开发的高性能数学规划求解器,专为求解大规模优化问题而设计。MOSEK 采用先进的数值算法,支持线性规划(LP)、混合整数线性规划(MILP)、二次规划(QP)、二次约束二次规划(QCQP)、二阶锥规划(SOCP)、半定规划(SDP)以及非线性凸优化等多种问题类型。作为 GAMS 平台的核心求解器之一,MOSEK 以其卓越的数值稳定性、求解速度和并行计算能力著称,广泛应用于金融投资组合优化、能源系统规划、供应链管理、工程设计优化、机器学习、控制理论等商业和科研领域。MOSEK 支持多核并行计算,能够充分利用现代计算硬件资源加速求解过程,并提供丰富的参数设置选项,使用户能够精细控制求解行为。

 

章节导航

 


 

1. Introduction(引言)

MOSEK 是一款功能强大的数学优化求解器,专门用于解决大规模复杂优化问题。它采用先进的算法实现高效的求解性能,能够处理多种优化问题类型。以下是 MOSEK 支持的主要问题类别及其特点:

问题类型 说明 典型应用
线性规划(LP) 目标函数和约束均为线性函数 生产计划、资源分配
混合整数线性规划(MILP) 包含整数变量的线性规划 排班调度、设施选址
二次规划(QP/QCP) 目标函数包含二次项或二次约束 投资组合优化、模型预测控制
二阶锥规划(SOCP) 约束为二阶锥形式 稳健优化、工程结构设计
半定规划(SDP) 矩阵变量满足半正定约束 最大割问题、LMI控制
非线性凸优化 凸可微非线性目标与约束 信号处理、统计学

 

MOSEK 的主要特点包括:高效的 LP/MILP/QP/SOCP/SDP 求解能力;出色的数值稳定性和求解精度;支持多核并行计算和大规模分布式计算;与 GAMS 平台无缝集成,通过 OPTION LP=MOSEK; 即可调用;提供丰富的参数设置选项,灵活控制求解过程;支持热启动(Warm Start),加速重复求解场景。MOSEK 以其在金融优化和能源领域中的卓越表现,成为业界公认的顶级优化求解器之一。

 

2. Options(求解器选项)

在 GAMS 中调用 MOSEK 求解器,只需在模型文件中添加以下语句:

OPTION LP=MOSEK;
OPTION MIP=MOSEK;
OPTION NLP=MOSEK;
OPTION QCP=MOSEK;

用户可以通过 GAMS 的 option 语句直接设置 MOSEK 参数,或使用 MOSEK 的专用选项文件(如 mosek.opt)来配置。选项文件的格式为每行一个参数,参数名与参数值之间用空格隔开,示例:

MSK_IPAR_LOG 10
MSK_DPAR_OPTIMIZER_FEAS_TOL 1.0e-7
MSK_IPAR_INTPNT_MAX_ITERATIONS 400

在 GAMS 中,通过 option mosek = "参数名=参数值"; 的方式也可直接设置选项。MOSEK 的参数分为整数参数(MSK_IPAR_*)、双精度浮点参数(MSK_DPAR_*)和字符串参数(MSK_SPAR_*)三类。关键参数类别包括:求解容差设置(可行性容差、最优性容差)、算法选择(原始单纯形法、对偶单纯形法、内点法)、预处理选项、输出控制(日志级别、迭代输出频率)、时间限制与迭代限制等。

 

3. LogFile(日志文件)

MOSEK 的日志文件功能提供了详细的求解过程记录,对于调试模型和分析求解性能至关重要。MOSEK 支持不同级别的日志详细程度,从简洁的摘要输出到详细的迭代日志,可通过参数 MSK_IPAR_LOG 控制日志级别:

日志级别 输出内容 推荐场景
0(无输出) 不输出任何日志信息 批量求解
1(仅错误) 仅输出错误信息 生产环境
5(标准) 求解摘要、迭代过程、最终结果 日常求解(默认)
10(详细) 全部迭代日志、预处理细节、算法切换信息 性能分析

 

日志文件通常包含以下内容:

  • 求解器版本信息 — MOSEK 版本号、构建信息
  • 问题统计 — 变量数(含整数变量数)、约束数、非零元素数、半定矩阵维度等
  • 预处理结果 — 问题化简后的规模、冗余约束消除信息
  • 迭代过程 — 每次迭代的迭代次数、原始目标值、对偶目标值、原始不可行度、对偶不可行度、互补间隙等
  • 求解状态 — Optimal(最优)、Infeasible(不可行)、Unbounded(无界)、Dual Infeasible(对偶不可行)等
  • 最终结果汇总 — 最优目标值、求解时间、迭代次数、内存使用量

用户可以通过参数 MSK_SPAR_LOG_FILE 指定日志文件的输出路径,也可将日志信息重定向到 GAMS 的输出流中一并显示。

 

4. SemidefiniteProgram(半定规划)

MOSEK 是少数能够高效求解半定规划(SDP)问题的商业求解器之一。半定规划是锥优化的重要分支,其约束条件要求矩阵变量为半正定矩阵。在 GAMS 中,用户可以通过 SDP 工具在模型中对半定矩阵变量进行建模。MOSEK 支持以下 SDP 相关功能:

  • 半定矩阵变量的声明 — 在 GAMS 中使用 positive variable X(i,j); 结合 SDP 工具声明对称半正定矩阵变量
  • 半定锥约束的定义 — 使用 psdcon 等约束类型定义矩阵必须属于半定锥
  • 目标函数中的矩阵变量 — 目标函数可以包含矩阵变量的迹(Trace)或内积
  • 对称矩阵的向量化处理 — 将对称矩阵的上三角元素向量化,以减少变量数量

典型的 SDP 应用问题包括:

  • 最大割问题(Max-Cut) — 使用 Goemans-Williamson 半定松弛进行近似求解
  • 矩阵完备化问题(Matrix Completion) — 在已知部分元素的条件下恢复低秩矩阵
  • 控制系统中的 LMI 问题 — 线性矩阵不等式在控制器设计中的应用
  • 传感器网络定位 — 使用 SDP 松弛进行分布式定位求解

MOSEK 采用原始-对偶内点法求解 SDP 问题,其算法具有良好的数值稳定性和可扩展性,能够处理数百维的半定矩阵变量。对于大规模 SDP 问题,MOSEK 通过利用矩阵的稀疏性结构和并行计算技术来提升求解效率。

 

5. DetailedDescription(详细说明)

下表列出了 MOSEK 求解器的主要参数选项,包括参数名称、描述说明、数据类型和默认值。用户可根据具体问题特性调整这些参数以获得最佳求解性能。

 

参数名称 描述说明 类型 默认值
MSK_IPAR_OPTIMIZER 选择求解算法:0=默认自动选择,1=内点法,2=原始单纯形法,3=对偶单纯形法,4=原始单纯形法(热启动),5=对偶单纯形法(热启动),6=并发(同时运行多种算法) 整数 0(自动)
MSK_DPAR_OPTIMIZER_FEAS_TOL 原始可行性容差,控制约束违反程度的允许范围,值越小精度越高 双精度 1.0e-8
MSK_DPAR_INTPNT_QO_TOL_DFEAS 内点法的对偶可行性容差 双精度 1.0e-8
MSK_DPAR_INTPNT_QO_TOL_PFEAS 内点法的原始可行性容差 双精度 1.0e-8
MSK_DPAR_INTPNT_QO_TOL_REL_GAP 内点法相对对偶间隙容差,求解器认为达到此间隙即收敛 双精度 1.0e-8
MSK_IPAR_INTPNT_MAX_ITERATIONS 内点法最大迭代次数上限 整数 400
MSK_DPAR_OPTIMIZER_MAX_TIME 求解最大时间限制(秒),超过此时间求解器将终止并返回当前最佳解 双精度 1.0e15(无限)
MSK_IPAR_SIM_MAX_ITERATIONS 单纯形法最大迭代次数 整数 10000000
MSK_DPAR_SIM_FEAS_TOL 单纯形法可行性容差 双精度 1.0e-7
MSK_IPAR_LOG 日志输出级别:0=无输出,1=仅错误,2-4=逐步详细,5=标准输出,6-10=详细调试输出 整数 5
MSK_IPAR_LOG_FILE 日志文件输出级别(0=禁用日志文件,1=启用日志文件输出) 整数 0
MSK_SPAR_LOG_FILE 日志文件的输出路径,指定后将日志写入文件 字符串 ""(空字符串)
MSK_IPAR_NUM_THREADS 并行计算线程数,0=自动检测并使用所有可用核心 整数 0(自动)
MSK_IPAR_PRESOLVE_USE 预处理开关:0=禁用预处理,1=启用预处理(推荐),2=仅预处理但不求解 整数 1(启用)
MSK_IPAR_MIO_MODE 混合整数优化模式:0=自动选择,1=传统的分支定界,2=使用卫星求解器加速 整数 0(自动)
MSK_DPAR_MIO_DISABLE_TERM_TIME MIP求解时间限制(秒),超过则终止 双精度 1.0e15(无限)
MSK_DPAR_MIO_TOL_ABS_GAP MIP绝对间隙容差,当前最佳解与对偶界的绝对差距小于此值即终止 双精度 1.0e-6
MSK_DPAR_MIO_TOL_REL_GAP MIP相对间隙容差,当前最佳解与对偶界的相对差距小于此值即终止 双精度 1.0e-4
MSK_IPAR_SDP_CONVERSION SDP问题转换方式:0=不使用转换,1=自动选择合适的转换方法 整数 1(自动)
MSK_IPAR_INFEAS_REPORT_AUTO 不可行性报告开关:0=禁用,1=启用自动不可行性分析报告 整数 0

 

MOSEK 求解状态码含义:Optimal(求解成功,找到最优解)、Primal Infeasible(原始问题不可行)、Dual Infeasible(对偶问题不可行,原始问题无界)、Near Optimal(接近最优解,满足容差)、Unknown(求解过程被中断,如超时)。用户可通过 GAMS 的模型状态和求解状态输出来获取收敛信息。

 

6. SettingUpLicense(许可证设置)

MOSEK 采用许可证文件机制进行授权管理,许可证文件通常命名为 mosek.lic。正确配置许可证是正常使用 MOSEK 求解器的前提。以下是许可证设置的详细说明:

 

6.1 许可证文件获取

用户购买 MOSEK 后,MOSEK ApS 会通过电子邮件发送许可证文件(mosek.lic),其中包含授权信息、有效期和授权的功能模块。请妥善保管该文件,切勿泄露给未授权用户。

 

6.2 许可证文件放置位置

MOSEK 在启动时会按照以下顺序自动搜索许可证文件:

  1. 环境变量 MOSEKLM_LICENSE_FILE 指定的路径(优先级最高)
  2. 当前工作目录下的 mosek.lic
  3. 用户主目录下的 ~/mosek/mosek.lic(Linux/Mac)或 %USERPROFILE%\mosek\mosek.lic(Windows)
  4. MOSEK 安装目录下的 mosek.lic

 

6.3 环境变量设置

推荐通过设置环境变量 MOSEKLM_LICENSE_FILE 来指定许可证文件路径:

  • Windowsset MOSEKLM_LICENSE_FILE=C:\ProgramData\MOSEK\mosek.lic(或在系统属性中设置永久环境变量)
  • Linux/Macexport MOSEKLM_LICENSE_FILE=/opt/mosek/mosek.lic(可添加到 .bashrc.zshrc 中)

 

6.4 浮动许可证配置

如果使用的是浮动许可证(Floating License),需要配置许可证服务器:

  1. 在许可证服务器上安装 MOSEK 许可证管理器(MOSEK License Manager)
  2. 将许可证文件放置在服务器上,启动许可证服务
  3. 在客户端设置 MOSEKLM_LICENSE_FILE 指向服务器,格式为 port@hostname(例如 27000@licserver.company.com

 

6.5 GAMS 中的许可证配置

对于 GAMS 用户,MOSEK 的许可证需与 GAMS 许可证配合使用。在 GAMS 环境中,MOSEK 的许可证路径可通过以下方式配置:

  • 确保 MOSEKLM_LICENSE_FILE 环境变量已正确设置
  • 或在 GAMS 工作目录中放置 mosek.lic 文件
  • 或在 GAMS 的配置文件 gamsconfig.yaml 中指定 MOSEK 许可证路径

 

6.6 验证许可证配置

使用以下方法验证许可证是否正确配置:

  • 在命令行执行 mosekmosek --license,查看许可证状态
  • 在 GAMS 中运行一个简单的 LP 问题(如 solve test using lp minimizing z;),观察求解器是否正常调用
  • 查看求解日志中的许可证信息行,确认授权状态和有效期

 

6.7 常见问题排查

问题现象 可能原因 解决方法
License Not Found 错误 许可证文件路径不正确或环境变量未设置 检查环境变量和文件路径
License Expired 错误 许可证已过有效期 联系供应商续订
Feature Not Available 错误 当前许可证不包含所需功能模块 检查授权功能列表
Server Not Responding 错误 浮动许可证服务器未启动或网络不通 检查服务器状态及网络连接

 

完成上述配置后,重新启动 GAMS 即可正常调用 MOSEK 求解器。如仍有问题,请查看 MOSEK 安装目录下的日志文件或联系技术支持获取帮助。

 

 

在线留言

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

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

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