议员格式
MPS格式是用于存储数学编程模型的最古老和最广泛使用的格式。实际上,广泛使用的这种格式有两种变体。在固定格式中,各个字段必须始终从文件中的固定列开始。自由格式与此非常相似,但是字段由空格字符分隔,而不是出现在特定的列中。这两种格式之间一个重要的实际区别在于名称长度。在固定格式中,行名和列名恰好是8个字符,空格是名称的一部分。在自由格式中,名称可以任意长(尽管Gurobi阅读器对名称长度设置了255个字符的限制),并且名称可以不包含空格。Gurobi MPS阅读器可以读取这两种MPS类型,并自动识别格式。
注意以。开头的任何行*
性格是一种评论。这一行的内容将被忽略。
名称部分
MPS格式文件的第一部分是名字
部分。它给出了模型的名称:
名字AFIRO在固定格式中,模型名称从第15列开始。
OBJSENSE节
的OBJSENSE
Section是最大化目标函数的可选部分。默认情况下,Gurobi假设MPS文件的目标函数应该最小化,在这种情况下OBJSENSE
节可以省略。
为指导Gurobi使目标函数最大化,加线
OBJSENSE马克斯后
名字
部分。
行部分
下一部分是行
部分。它以单词开头行
在它自己的行上,并继续为模型中的每一行使用一行。这些行表示约束类型(E
平等,l
对于小于或等于,或者G
对于大于或等于),以及约束名称。在固定格式中,类型出现在第2列中,行名从第5列开始。这里有一个简单的例子:
行er09 er10 l x05 n成本注意
N
在类型字段中指示行为自由行.第一个自由行作为目标函数。
如果文件包含多个N
行,每个行包括优先级、权重、相对和绝对公差字段,然后将每个这样的行视为多目标模型中的一个目标。附加字段必须出现在名称之后,用空格分隔。例如,下面将捕获一对目标,其中第一个优先级为2,第二个优先级为1(并且两者具有相同的权重、相对和绝对公差):
N obj0 2 1 0 0 N obj1 1 1 0 0详情请参阅多目标,ObjNPriority,ObjNWeight,ObjNAbsTol,ObjNRelTol部分提供有关这些字段含义的信息。注意,多目标优化问题的所有目标都必须是线性的。
LAZYCONS节
下一部分是懒惰的约束
部分。它从这行开始LAZYCONS
,后面可选空格和惰性级别1-3(如果没有指定惰性级别,则假设为1),并为每个惰性约束续写一行。格式与行
节:每行表示约束类型(E
平等,l
对于小于或等于,或者G
对于大于或等于),以及约束名称。在固定格式中,类型出现在第2列中,行名从第5列开始。例如:
懒人e r01 g r07 l s01懒人2 e r02 g r03 l s11
惰性约束是线性约束,它们在语义上等价于标准线性约束(即行
部分)。根据它们的惰性级别,MIP求解器执行它们的方式不同。手机万博登录请参阅有关的说明懒惰的属性获取详细信息。
本节为可选配置。
USERCUTS节
下一部分是用户削减
部分。它从这行开始USERCUTS
,在它自己的行上,并继续为每个用户切割一行。格式与行
节:每行表示约束类型(E
平等,l
对于小于或等于,或者G
对于大于或等于),以及约束名称。在固定格式中,类型出现在第2列中,行名从第5列开始。例如:
用户剪切e r01 g r07 l s01
用户剪切是线性约束,它们在语义上等价于标准线性约束(即行
部分)。请参阅有关的说明懒惰的属性获取详细信息。
本节为可选配置。
列部分
MPS文件的下一个也是通常最大的部分是列
节,其中列出模型中的列以及与每列相关的非零系数。columns部分中的每一行提供一个列名,后面跟着该列的0、1或2个非零系数。首先使用行名,然后使用浮点值指定系数。考虑下面的例子:
列x01 x48 .301 r09 -1。X01 r10 -1.06 x05X02 x21 -1。R09 1。X02成本为-4。第一行表示该列
X01
行中有一个非零X48
与系数小菲
,且行中为非零R09
与系数-1.0
.注意,与同一列关联的多行在文件中必须是连续的。
在固定格式中,列名从第5列开始,第一个非零的行名从第15列开始,第一个非零的值从第25列开始。如果存在第二个非零,则行名从第40列开始,值从第50列开始。
完整性标记
的列
节可以选择包含完整性标记。在一对标记之间引入的变量必须为整数值。标记中的所有变量的默认下界为0,默认上界为1(其他边界可以在界限
部分)。整数节的开头用INTORG
标记:
Mark0000 ' marker ' ' intorg '这个部分的结尾用
意愿
标记:
Mark0000“标记”“意图”第一个字段(以固定格式从第5列开始)是标记的名称(将被忽略)。第二个字段(固定格式的第15列)必须等于字符串
“标记”
(包括单引号)。第三个字段(固定格式的第40列)为“INTORG”
在一开始“意愿”
在整型部分的末尾。
的列
节可以包含任意数量的这样的标记对。
RHS节
MPS文件的下一部分是园艺学会
节,该节指定右边的值。此部分中的每一行可能包含一个或两个右边值。
RHS b x50 310。X51 300。B x05 80。X17 80。上面的第一行表示这一行
×50
右边的值是310
,X51
右边的值是300
.在固定格式中,第一个绑定的变量名从第15列开始,第一个绑定值从第25列开始。对于第二个绑定,变量名从第40列开始,值从第50列开始。RHS的名称在第一个字段(固定格式的第5列)中指定,但是Gurobi阅读器会忽略这个名称。的任何地方都没有提到行的园艺学会
Section,这一行的右边值为0
.您可以通过将负偏移量设置为目标行右侧来定义目标偏移量。例如,如果问题中的线性目标行被称为成本
如果你想给你的目标函数增加1000的偏移量,你可以将以下内容添加到园艺学会
部分:
RHS rhs1成本-1000
范围部分
MPS文件中的下一个部分是可选的界限
部分。默认情况下,每个变量的下界为0,上界为无穷大。本节中的每一行都可以修改变量的下界、上界或两者都可以修改。每一行表示一个绑定类型(在第2列中,格式固定)、一个绑定名称(忽略)、一个变量名(在第15列中,格式固定)和一个绑定值(在第25列中,格式固定)。不同的绑定类型和关联绑定值的含义如下:
罗 | 下界 |
向上 | 上界 |
外汇 | 变量固定在指定的值 |
FR | 自由变量(无下限或上限) |
心肌梗死 | 无限下界 |
PL | 无限上界 |
BV | 变量为二进制(等于0或1) |
李 | 整数变量的下界 |
用户界面 | 整数变量的上界 |
SC | 半连续变量的上界 |
如果 | 半整数变量的上界 |
考虑下面的例子:
边界fr BND x49上升BND x50 80。Lo BND x51 20。外汇BND x52 30。在这个
界限
部分,变量X49
得到的下界∞
(无限上界不变),变量×50
的上界80
(下界不变0
,X51
得到的下界20.
(无限上界不变),和X52
是固定的30.
.
QUADOBJ节
MPS文件中的下一个部分是可选的QUADOBJ
节,其中包含二次客观项。本节中的每一行表示Q矩阵下三角形中的一个非零值。参与二次项的两个变量的名称首先被发现(固定格式从第5列和第15列开始),然后是系数的数值(固定格式在第25列)。按照惯例,Q矩阵有一个隐式的1 / 2乘子。下面是一个包含三个二次项的例子:
Quadobj x01 x01 10.0 x01 x02 2.0 x02 x02 2.0这三项表示二次函数(回想一下,单个非对角线项实际上表示对称Q矩阵中的一对非零值)。
QCMATRIX节
MPS文件中的下一个部分包含零个或多个QCMATRIX
块。这些块包含与二次约束相关联的二次项。模型中的每个二次约束都应该有一个块。
每一个QCMATRIX
块以一行开始,该行表示相关二次约束的名称(以固定格式从第12列开始)。后面跟着一个二次项。每个术语在一行中描述,给出两个涉及的变量的名称(固定格式从第5列和第15列开始),然后是系数(固定格式从第25列开始)。例如:
Qcmatrix qc0 x01 x01 10.0 x01 x02 2.0 x02 x01 2.0 x02 x02 2.0这四行描述了三个二次项:二次约束
QC0
包含条款,,.请注意QCMATRIX
块必须包含一个对称矩阵,例如X01 * X02
术语必须附有匹配项X02 * X01
术语。
二次约束的线性术语QC0
出现在列
部分。意义和右侧值出现在行
而且园艺学会
部分,分别。
PWLOBJ节
MPS文件中的下一个部分是可选的PWLOBJ
节,其中包含分段线性目标函数。本节中的每条线表示分段线性目标函数中的一个点。相关变量的名称首先出现(从第4列开始),然后是该点的x和y坐标(从第14列和第17列开始)。下面是一个包含两个分段线性变量表达式的例子X01
而且X02
,每篇文章都有三点:
X01 1 1 X01 2 2 X01 3 4 x02 1 1 x02 3 5 x02 7
SOS节
MPS文件中的下一个部分是可选的紧急求救信号
部分。单个SOS约束的表示包含一行,提供SOS集的类型(S1
SOS类型1或S2
SOS类型2(固定格式在第2列)和SOS集合的SOS集合名称(固定格式在第5列)。后面有一行代表每个SOS成员。成员行给出了成员的名称(固定格式的第5列)和相关的权重(固定格式的第15列)。下面是一个包含两个SOS2集的示例。
SOS S2 sos1 x1 1 x2 2 x3 3 S2 sos2 x3 1 x4 2 x5
指标约束部分
在MPS格式中,指标约束部分是可选的。它从关键字开始指标
.指示器部分的每一行都以关键字开始如果
(以固定格式放置在第2列),然后是空格和行名(行必须已经在行
部分)。这一行接着是一个二进制变量(以固定格式放在第15列),最后是一个值0
或1
(按固定格式放在第25栏)。
这里有一个简单的例子:
指示灯IF row1 x1 0 IF row2 y1 1 .单击“确定”
本例中的第一个指示器约束说明第一行
必须满足如果x1
取值为0
.
一般约束部分
MPS文件可能包含一个可选的捕获节一般的约束.本节从关键字开始金康合同
.
一般约束可以有两种基本类型:简单的一般限制-最小值,马克斯,或,和,规范,腹肌或PWL,或函数约束-多项式(聚),功率(战俘),指数(经验值或的扩张),对数(日志,LOGA),或后勤(物流)和三角函数(罪,因为,或棕褐色).
每个通用约束都以通用约束类型说明符(最小值,马克斯,或,和,规范,腹肌,PWL,聚,战俘,经验值,的扩张,日志,LOGA,物流,罪,因为,或棕褐色),以固定格式在第二栏找到。后面还可以有空格和约束名。对于一个规范约束时,规范类型(0、1、2或INF)跟在类型说明符后面(可选后跟约束名)。
对于函数约束,下一行定义了一些用于执行分段线性近似的属性。这一行以关键字开始选项(以固定格式在第5列中找到),然后是两个空格,然后是四个值(由两个空格分隔),它们定义FuncPieces
,FuncPieceLength
,FuncPieceError
,FuncPieceRatio
属性值(按此顺序)。
接下来的内容取决于一般约束类型。简单的一般约束以所谓的结果变量的名称开始,放在它自己的行上(固定格式从第5列开始)。为最小值或马克斯约束,后面是一个非空的变量或值列表(每个变量名在自己的行上)。为或,和,规范约束,后面是一列变量(每个变量在自己的行上)。变量必须是二进制的或而且和约束。为腹肌约束,只有一个额外的变量(在它自己的行上)。在固定格式中,所有这些变量或值都从第5列开始。
分段线性约束以所谓的操作数变量的名称开始(以固定格式从第5列开始),然后是所谓的结果变量。接下来的几行包含分段线性函数断点,每个断点表示为一对x和y值。x值必须是非递减的。
函数约束也以操作数变量的名称开头(固定格式从第5列开始),然后是两个空格,最后是结果变量的名称。这就足以定义了经验值日志,物流,罪,因为,棕褐色功能。的战俘,的扩张而且LOGA函数分别需要一个指数或基数,在下一行定义(以固定格式从第5列开始)。对于多项式函数,下面几行包含一个系数(在第5列以固定格式显示),然后是两个空格,然后是相关的幂(仅限自然数)。注意,幂必须是递减的。
另一种通用约束类型是指示器约束,出现在一个单独指示器
节,这是上面描述的。
下面是一个通用约束节的例子:
金康合同最大gc0 r1 (x1, x2) 0.7 x10最小gencons1 r2 y0 10日元r1和把b1 b2或1 r b3 b4规范2 norm2 r3 (x1, y1 z1 ABS GC14 xabs x PWL gc0 x [0] y[0] 1 2 0 1 0 0 0 1 1 2聚GC2选项0 0.01 0.001 1 x y 4 7 2 3罪gc1选项0 0.5 0.01 - 1 e-05 y z LOGA gc6选项0 0.01 0.001 1 x y 10扩展gc4选项0 0.01 0.001 - 1 y z 3
有关更多信息,请参阅一般约束讨论.
场景一节
MPS文件可能包含捕获场景数据的可选部分。一个模型可以有多个场景,其中每个场景定义了对原始模型的一组更改(我们称之为模型)基本模型).
本节从关键字开始场景
,其次是场景的数量。场景描述为目标函数、线性约束的右侧和变量的边界的一组变化。首先陈述客观更改,然后是右侧更改,然后是绑定更改。场景可以是空的(即,与基本模型相同)。
每个场景都以关键字开始名字
(以固定格式从第2列开始),然后是场景名称。
对目标函数的更改定义在列
分段(从固定格式的第2列开始)。每个客观变化都在自己的线上;这一行包含变量名(固定格式从第5列开始)、目标名(固定格式从第15列开始)和修改后的目标值(固定格式从第25列开始)。格式类似于上面的列部分。
对线性约束右侧的更改定义在园艺学会
分段(从固定格式的第2列开始)。右边的每一个变化都在自己的直线上;该行包含右侧说明符(固定格式从第5列开始)、约束名称(固定格式从第15列开始)和右侧值(固定格式从第25列开始)。格式类似于上面右边的部分。
类中定义了对变量边界的更改界限
分段。每个变化的变量边界都在自己的直线上。格式类似于上面的边界部分(有一个小区别,固定格式的第一列和第二列分别为5和8)。
下面以MPS格式为例说明三种场景:
场景3 NAME场景0 NAME场景1 COLUMNS x1 OBJ 0 x2 OBJ 1 RHS RHS1 c1 2 RHS1 c2 2 BOUNDS FR BND1 x1 LO BND1 x3 0.5 UP BND1 x3 1.5 FX BND1 x2 0 NAME场景2 BOUNDS FX BND1 x3 3
有关更多信息,请参阅多场景讨论.
ENDATA
MPS文件的最后一行必须是ENDATA
声明。
额外的笔记
注意,在Gurobi优化器中,MPS模型总是完全精确地编写。这意味着如果您编写了一个模型,然后将其读回来,那么与结果模型相关联的数据将与原始数据完全相同。