优化求解器之MPS文件的格式简介

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。

这篇文章是系列文章的开篇,将对MPS格式的文件进行简要的介绍。顾名思义,MPS文件是以 .mps 后缀结尾的一种文件格式,是用于表达线性和整数规划问题的一种标准格式,现在许多的优化求解器都支持这种格式。MPS文件是一种旧格式文件类型,格式是固定的列格式。下列通过一个具体的优化模型来讲述MPS文件的命名规范。


线性规划模型:

max     x1 + 2 x2 + 3 x3 + x4

s.t.       − x1 + x2 + x3 + 10 x4 ≤ 20

          x1 − 3 x2 + x3 ≤ 30

          x2 - 3.5 x4 = 0

          0 ≤ x1 ≤ 40,x2 ≥ 0,x3 ≥ 0,2 ≤ x4 ≤3



其对应的MPS文件内容为(绿色部分是小编加的解释说明,原文件中没有):

NAME       MindOptExample#NAME表示这个优化模型的名字,可不写内容

ROWS       #ROWS定义各行名字,包括目标函数与约束条件

N  obj      #N表示自由行,obj是对目标函数的命名,可任意取名

L  c1         #L表示该行小于等于, c1是对该行的命名,可任意取名

L  c2      

E  c3         #E表示该行等于

COLUMNS  #COLUMS定义各列名字

   x1               obj                 -1   c1                  -1

   x1                c2                   1  

   x2                obj                 -2   c1                   1

   x2                c2                  -3   c3                   1

   x3                obj                 -3   c1                   1

   x3                c2                   1    

   MARK0000  'MARKER'             'INTORG'

   x4                obj                 -1   c1                  10

   x4                c3                -3.5

   MARK0001  'MARKER'             'INTEND'

RHS  #RHS定义约束条件等号右边的值

   rhs               c1                  20   c2                  30              

BOUNDS #BOUNDS定义决策变量的上界或下界

UP bnd       x1                  40  #UP 表示上界

LO bnd       x4                   2  #LO 表示下界

UP bnd       x4                   3

ENDATA   #ENDATA表示MPS文件结束


结合上述优化模型来说明MPS文件的命名规范:


  1. MPS文件的内容固定从每行的第 2、5、15、25、40 和 50 列开始写,并且区分大小写。


  1. MPS文件中每行(包括目标函数和约束)和每列(变量)都有一个名字。


  1. 第一行为NAME区域,表示这个优化模型的名字,后面可以不写内容,写在第15列。


  1. ROWS用来定义每个行的名字,包括目标函数与约束条件。在 ROWS 部分,约束矩阵的每一行必须有一个行类型和指定的行名称。第2列或第3列为约束,其中
  • E 表示该行等于
  • L 表示该行小于等于, c1是对改行的命名,可以任意取名
  • G 表示该行大于等于
  • N 表示自由行, obj是对目标函数的命名,可以任意取名


  1. COLUMNS用来定义各列(变量)名字。在 COLUMNS 部分,变量名称与目标系数和所有非零约束矩阵元素一起定义。从第5列开始写,表示所在行的名字。如果变量系数为0,则不写入。
  • 第一列要空
  • 第二列表示列的名字,也就是求解变量
  • 第三列表示所在行的名字
  • 第四列表示所在行与列对应的系数
  • 其中 MARK0000‘MARKER’‘INTORG’与 MARK0001‘MARKER’ ‘INTEND’分别表示整数变量的起止
  • 第五列、第六列分别与第三列、第四列的含义相同


  1. RHS定义约束条件等号右边的值。从第5列开始写,第5列表示所在行的名字
  • 第一列要空
  • 第二列表示 rhs 名字,可以任取
  • 第三列表示所在行的名字
  • 第四列表示所在行对应的 RHS 值
  • 第五列、第六列分别与第三列、第四列的含义相同


  1. BOUNDS用来定义决策变量的上界或下界,第2列写约束条件,其中
  • UP表示小于等于
  • LO表示大于等于
  • FX表示该变量为固定值
  • FR表示该变量的范围为 ( − ∞ , ∞ )
  • MI 表示下界为负无穷
  • PL 表示上界为正无穷

另外,MPS 变量默认的范围为 [ 0 , ∞ )


  1. ENDATA表示MPS文件结束。


FREE MPS

此外,MindOpt 支持 Free MPS 格式。Free MPS 格式与 fixed MPS 格式类似,相对来说限制更少。


例如,Free MPS 格式允许定义更长的名称,或是支持指定超过12位的值。其中字段没有 fixed MPS 中严格的固定的列位置的限制,它们可以写在除第一列之外的任何地方,每个字段与下一个字段之间用一个或多个空格隔开,但是它们必须按照相同的固定格式出现。在rows和bounds的代码部分,可以是小写或大写,并且可以从任意位置开始。重复的列名有时会被跳过,并在其中放置系统自定义的名称。


但是,与MPS格式相比,Free MPS 格式有一个重要的限制:名称中不能包含空格。需要注意的是,Free MPS 解析器不能读取所有的 fixed MPS 格式,名称中的空格或以空格开头的名称在读取时可能会产生问题。


OBJSENSE

和许多其他求解器一样,MindOpt 也在 free MPS 格式中增加了一个“规则” OBJSENSE,用来指明优化方向。这是一个可选的部分,在 OBJSENSE 下方的一行将通过MAXIMIZE, MAX, MINIMIZE, MIN 关键字来指明优化方向。若未指定,则默认使用极小化方向(类似 fixed MPS 格式)。

格式如下:

OBJSENSE

MAX

此外,这个 OBJSENSE 的部分应写在 ROWS 之前。


更细节的MPS格式说明见:http://web.mit.edu/lpsolve_v5520/doc/mps-format.htm



联系我们:

邮箱:solver.damo@list.alibaba-inc.com

钉钉群:32451444

更多更新通知:https://solver.damo.alibaba.com

钉钉答疑群.png

相关文章
优化求解器之Pyomo建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之Pyomo建模工具简介
|
编译器 Linux Windows
优化求解器之AMPL建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之AMPL建模工具简介
|
Perl 存储 文件存储
优化求解器之LP文件的格式简介
在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。
优化求解器之LP文件的格式简介
|
7月前
|
达摩院 Linux 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
### MindOpt 优化求解器月刊(2024年3月) - 发布亮点:MAPL建模语言升级至V2.4,支持云上无安装使用和向量化建模语法。 - 新增功能:Linux用户可本地安装`maplpy`,并支持Python与MAPL混编。 - 实例分享:介绍背包问题的组合优化,展示如何在限定容量下最大化收益。 - 用户投稿:探讨机票超售时的最优调派策略,以最小化赔付成本。 - 加入互动:官方钉钉群32451444,更多资源及。 [查看详细内容](https://opt.aliyun.com/)
132 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
7月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
245 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
7月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
7月前
|
机器学习/深度学习 达摩院
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
150 0
|
4月前
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
4月前
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
4月前
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。

热门文章

最新文章