优化求解器的用户手册,介绍求解器的调用方式、如何输入问题和求解器的APIs清单。优化求解器调用方式在使用之前,请先下载和安装求解器SDK,并获取使用权限,见快速入门(开通和使用)和求解器SDK下载和安装。下面列出简单的示例,求解器细节的调用方式和完整案例可查看更多。V1.x.xPythonJavaC++CC#完整例子的代码请查看更多。V0.x.xPythonJavaC++C完整例子的代码请查看V0.x版本文档。支持求解的优化问题当前版本的求解器支持:线性规划:求解线性规划(LP)的能力已完整。支持原始/对偶单纯形法 (simplex) 和内点法 (interior point)、支持求解大规模网络流优化问题。整数规划:支持求解混合整数线性规划(MILP)问题的分支定界算法 (branch-and-cut solver)。非线性规划:支持求解凸 二次规划(QP)问题、求解半定规划(SDP)问题。优化问题的输入方式优化问题支持3种输入方式:文件输入、数据建模APIs输入、外部建模工具调用。V1.x.x相关联的APIs有多种,同一个数据也可以有多种输入方式。按行输入Python示例简述:用 mindoptpy.Model.modelsense = MDO.MINIMIZE 将目标函数设置为最小化;用 mindoptpy.Model.addVar() 来添加优化变量,并分别定义其下界、上界、目标系数、名称和类型;用 mindoptpy.Model.addConstrs() 来添加约束。按列输入Python示例简述:用 mindoptpy.Model.modelsense = MDO.MAXIMIZE 将目标函数设置为最小化;开始时调用 mindoptpy.Model.addConstrs() 来创建带有指定的左侧和右侧值的约束(无非零元素);创建临时的列对象 mindoptpy.Model.Column() 来按顺序地保存约束和非零元素的值;最后调用 mindoptpy.Model.addVar() 来创建新的变量,及其相应的目标函数系数、列向量中的非零元、下界和上界、变量名以及变量类型。更详细的介绍请查看更多。其中,属性描述(Attributes)列表见更多,且API章节有对应语言的完整例子。V0.x.x相关联的APIs有多种,同一个数据也可以有多种输入方式。按行输入Python示例简述:用 mindoptpy.MdoModel.set_int_attr() 将目标函数设置为最小化;用 mindoptpy.MdoModel.add_var() 来添加四个优化变量,并分别定义其下界、上界、名称和类型;用 mindoptpy.MdoModel.add_cons() 来添加约束。按列输入Python示例简述:用 mindoptpy.MdoModel.set_int_attr() 将目标函数设置为最小化;开始时调用 mindoptpy.MdoModel.add_cons() 来创建带有指定的左侧和右侧值的约束(无非零元素);创建临时的列对象 mindoptpy.MdoCol() 来按顺序地保存约束和非零元素的值;最后调用 mindoptpy.MdoModel.add_var() 来创建新的变量,及其相应的目标函数系数、列向量中的非零元、下界和上界、变量名以及变量类型。更详细的介绍请查看更多V0版文档。其中,模型的属性描述(Model Attributes)列表见更多V0版文档。MindOpt支持一些常见的建模工具,当前支持以下几种:1. MindOpt APL2022年开始支持MindOpt APL建模语言,是MindOpt团队自研的一款建模语言。可免费在MindOpt云上建模求解平台通过浏览器使用建模语言和求解器,还包含案例,供快速入门。使用时,无需安装任何软件,打开浏览器即可使用。语法文档见链接。2. AMPL使用 AMPL 调用 MindOpt 之前需要先安装 MindOpt 和 AMPL 。mindoptampl 应用位于安装包的\bin\mindoptampl。mindoptampl 提供了一些可配置的参数,用户可以通过 AMPL 的option命令设置 mindoptampl_options 参数,如:ampl: option mindoptampl_options 'numthreads=4 maxtime=1e+4';更详细的介绍和案例请查看更多。3. Pyomo使用 Pyomo 调用 MindOpt 之前需要先安装 MindOpt 和 Pyomo。调用 MindOpt 求解器的 Pyomo API 需要使用接口文件 mindopt_pyomo.py。 MindOpt 的 Pyomo 接口是继承自 Pyomo 的 DirectSolver 类,实现代码在安装包的\lib\pyomo\mindopt_pyomo.py。在 Python 代码中导入该文件:from mindopt_pyomo import MindoDirect更详细的介绍和案例请查看更多。4. PuLP使用 PuLP 调用 MindOpt 之前需要先安装 MindOpt 和 PuLP。调用 MindOpt 求解器的 PuLP API 需要使用接口文件 mindopt_pulp.py。 MindOpt 的 PuLP 接口继承自 PuLP 的 LpSolver 类,实现代码在安装包的\lib\pulp\mindopt_pulp.py。在 Python 代码中导入该文件:from mindopt_pulp import MINDOPT更详细的介绍和案例请查看更多。5. JuMPJuMP 是一个基于 Julia 编程语言的开源建模工具。使用 JuMP 调用 MindOpt 之前需要先安装 MindOpt、Julia、JuMP、AmplNLWriter。调用JuMP API来创建建模对象,并指定使用mindoptampl作为求解器。model = Model(() -> AmplNLWriter.Optimizer(mindoptampl))更详细的介绍和案例请查看更多。求解时的参数设置运行求解器可以设置输入参数,V1版文档请参考参数章节。如设置求解器的最大求解时间"MaxTime"。V0版本文档请参考可选输入参数章节。求解结果获取V1.x.x待求解的问题输入后,可以调用optimize()的API来求解,如python的求解指令model.optimize()。求解完后,可以调用API来获取结果,以Python为例:可以调用model.status获取求解的状态。有UNKNOWN、OPTIMAL、INFEASIBLE、UNBOUNDED、INF_OR_UBD、SUB_OPTIMAL。如Python里的MDO.OPTIMAL可以用model.objval获取目标值。还可以调用model.getAttr(MDO.Attr.PrimalObjVal)来获取其他的模型属性值,类似地:SolutionTime对应:总执行时间(秒)DualObjVal对应:对偶目标值ColBasis对应:原始解的基可以调用var.X来变量的解。更多解的属性描述(Attributes)列表见更多。完整的代码示例可参考安装包的example文件夹,或文档更多,和各个语言API文档最后一章,如Python的examples。V0.x.x待求解的问题输入后,可以调用solveProb的API来求解,如python的求解指令model.solve_prob()。求解完后,可以调用API来获取结果,以Python为例:可以调用model.display_results()来打印结果。可以调用model.get_status()获取求解的状态。可以调用model.get_real_attr("PrimalObjVal")来获取原始目标值,类似地:"DualObjVal"对应:对偶目标值"PrimalSoln"对应:原始解"ColBasis"对应:原始解的基更多解的属性描述(Solution Attributes)列表在更多V0版本文档完整的代码示例可参考安装包的example文件夹或文档。求解辅助分析工具、高级建模技巧V0.x.xstatus_code, status_msg = model.get_status()
if status_msg == "INFEASIBLE":
idx_rows, idx_cols = model.compute_iis()完整的 compute IIS 的说明请参阅更多V0版文档。回调功能 (Callback)MindOpt使用经典的分支定界法来求解MIP问题。MindOpt为用户提供回调功能,帮助用户对MIP问题的求解过程进行跟踪与修改。利用回调功能,用户可以提供一些决策以修改求解过程,包括:添加割平面,裁剪不会出现最优解的分支;干预MindOpt的分支选择策略,控制节点二分方法及遍历顺序;添加自定义可行解(比如通过某种启发式算法得到的解),一个较好的可行解可以提高MindOpt的求解效率。可以如下方式建立回调函数:def callback(model, where):完整的 Callback 说明请参阅更多。求解器调参MindOpt Tuner也可以对求解器超参调优,提供业务场景的数据,采用MindOpt Tuner,经过调参后,可以得到一个业务场景定制的更快的求解器。目前部分功能在MindOpt云上平台中可以使用。AI工程师辅助建模AI工程师是在LLM大模型的基础上,结合特定领域软件工具的知识,用于该领域基础技术咨询的一个AI机器人。MindOpt Copilot 是一款帮助用户使用MindOpt技术解决“数学优化”问题的AI工程师。可用于“数学优化”领域的技术咨询。当前,MindOpt Copilot AI工程师支持使用MindOpt Solver优化求解器、MindOpt APL建模语言等工具,通过自然语言和表格数据沟通,自动根据用户的业务问题进行数学建模、列数学公式、码代码、调用MindOpt软件来求解等工序。并且可以将机器人生成的文字、数学公式、代码等,生成项目,快捷地导入开发项目进行开发。2023年9月首次上线,可在MindOpt云上平台中可以使用。其他功能数据脱敏MindOpt的命令行功能里有--sanitize 可进行数据脱敏,方便外发数据用于技术交流或求解器调参改进。其脱敏原理可以参考博客。求解器的执行流程完整APIs和调用方式完整的说明请查阅《MindOpt用户使用手册——完整版》目录示意如下:8.1. 属性8.1.1. 模型属性8.1.2. 变量属性8.1.3. 约束属性8.1.4. 一般约束属性8.1.5. PSD变量属性8.1.6. PSD约束属性8.2. 参数8.2.1. Int参数8.2.2. Double参数8.3. 常量8.3.1. 状态码8.3.2. 错误码8.4. C API8.4.1. 属性存取8.4.2. 参数存取8.4.3. Environment8.4.4. 模型相关8.4.5. 回调函数8.4.6. Examples8.5. C++ API8.5.1. MDOException8.5.2. MDOMatrix8.5.3. MDOVar8.5.4. MDOConstr8.5.5. MDOSOS8.5.6. MDOGenConstr8.5.7. MDOPsdVar8.5.8. MDOPsdConstr8.5.9. MDOLinExpr8.5.10. MDOQuadExpr8.5.11. MDOPsdExpr8.5.12. MDOColumn8.5.13. MDOTempConstr8.5.14. MDOEnv8.5.15. MDOModel8.5.16. MDOCallback8.5.17. Examples8.6. JAVA API8.6.1. MDOException8.6.2. MDOMatrix8.6.3. MDOEnv8.6.4. MDOPsdExpr8.6.5. MDOConstr8.6.6. MDOSOS8.6.7. MDOGenConstr8.6.8. MDOPsdConstr8.6.9. MDOPsdVar8.6.10. MDOColumn8.6.11. MDOVar8.6.12. MDOModel8.6.13. MDOLinExpr8.6.14. MDOQuadExpr8.6.15. MDOCallback8.6.16. Examples8.7. Python API8.7.1. 全局函数8.7.2. MindoptError8.7.3. tuplelist8.7.4. tupledict8.7.5. Var8.7.6. MVar8.7.7. PsdVar8.7.8. Constr8.7.9. SOS8.7.10. GenConstr8.7.11. MConstr8.7.12. PsdConstr8.7.13. TempConstr8.7.14. Column8.7.15. LinExpr8.7.16. QuadExpr8.7.17. MLinExpr8.7.18. MQuadExpr8.7.19. PsdExpr8.7.20. Env8.7.21. Model8.7.22. Examples8.8. C# API8.8.1. MDOException8.8.2. MDOMatrix8.8.3. MDOEnv8.8.4. MDOPsdExpr8.8.5. MDOConstr8.8.6. MDOSOS8.8.7. MDOGenConstr8.8.8. MDOPsdConstr8.8.9. MDOPsdVar8.8.10. MDOColumn8.8.11. MDOVar8.8.12. MDOModel8.8.13. MDOLinExpr8.8.14. MDOQuadExpr8.8.15. MDOCallback8.8.16. Examples