这篇文章是系列文章的开篇,将对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文件的命名规范:
- MPS文件的内容固定从每行的第 2、5、15、25、40 和 50 列开始写,并且区分大小写。
- MPS文件中每行(包括目标函数和约束)和每列(变量)都有一个名字。
- 第一行为NAME区域,表示这个优化模型的名字,后面可以不写内容,写在第15列。
- ROWS用来定义每个行的名字,包括目标函数与约束条件。在 ROWS 部分,约束矩阵的每一行必须有一个行类型和指定的行名称。第2列或第3列为约束,其中
- E 表示该行等于
- L 表示该行小于等于, c1是对改行的命名,可以任意取名
- G 表示该行大于等于
- N 表示自由行, obj是对目标函数的命名,可以任意取名
- COLUMNS用来定义各列(变量)名字。在 COLUMNS 部分,变量名称与目标系数和所有非零约束矩阵元素一起定义。从第5列开始写,表示所在行的名字。如果变量系数为0,则不写入。
- 第一列要空
- 第二列表示列的名字,也就是求解变量
- 第三列表示所在行的名字
- 第四列表示所在行与列对应的系数
- 其中 MARK0000‘MARKER’‘INTORG’与 MARK0001‘MARKER’ ‘INTEND’分别表示整数变量的起止
- 第五列、第六列分别与第三列、第四列的含义相同
- RHS定义约束条件等号右边的值。从第5列开始写,第5列表示所在行的名字
- 第一列要空
- 第二列表示 rhs 名字,可以任取
- 第三列表示所在行的名字
- 第四列表示所在行对应的 RHS 值
- 第五列、第六列分别与第三列、第四列的含义相同
- BOUNDS用来定义决策变量的上界或下界,第2列写约束条件,其中
- UP表示小于等于
- LO表示大于等于
- FX表示该变量为固定值
- FR表示该变量的范围为 ( − ∞ , ∞ )
- MI 表示下界为负无穷
- PL 表示上界为正无穷
另外,MPS 变量默认的范围为 [ 0 , ∞ )
- 以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