议员格式

MPS格式是用于存储数学编程模型的最古老和最广泛使用的格式。实际上,广泛使用的这种格式有两种变体。在固定格式中,各个字段必须始终从文件中的固定列开始。自由格式与此非常相似,但是字段由空格字符分隔,而不是出现在特定的列中。这两种格式之间一个重要的实际区别在于名称长度。在固定格式中,行名和列名恰好是8个字符,空格是名称的一部分。在自由格式中,名称可以任意长(尽管Gurobi阅读器对名称长度设置了255个字符的限制),并且名称可以不包含空格。Gurobi MPS阅读器可以读取这两种MPS类型,并自动识别格式。

注意以。开头的任何行性格是一种评论。这一行的内容将被忽略。

名称部分

MPS格式文件的第一部分是名字部分。它给出了模型的名称:

名字AFIRO
在固定格式中,模型名称从第15列开始。

OBJSENSE节

OBJSENSESection是最大化目标函数的可选部分。默认情况下,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
详情请参阅多目标ObjNPriorityObjNWeightObjNAbsTol,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(下界不变0X51得到的下界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
这三项表示二次函数<span>$</span>(10 X01^2 + 2 X01 * X02 + 2 X02 * X01 + 2 X02^2)/2<span>$</span>(回想一下,单个非对角线项实际上表示对称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包含条款< span > < / span > 10美元X01 ^ 2 < span > < / span >美元< span > < / span > 4美元X01 * X02 < span > < / span >美元,< span > < / span > 2 X02 ^ 2美元美元< span > < / span >.请注意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集的类型(S1SOS类型1或S2SOS类型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列),最后是一个值01(按固定格式放在第25栏)。

这里有一个简单的例子:

指示灯IF row1 x1 0 IF row2 y1 1 .单击“确定”

本例中的第一个指示器约束说明第一行必须满足如果x1取值为0

一般约束部分

MPS文件可能包含一个可选的捕获节一般的约束.本节从关键字开始金康合同

一般约束可以有两种基本类型:简单的一般限制-最小值马克斯规范腹肌PWL,或函数约束-多项式(),功率(战俘),指数(经验值的扩张),对数(日志LOGA),或后勤(物流)和三角函数(因为,或棕褐色).

每个通用约束都以通用约束类型说明符(最小值马克斯规范腹肌PWL战俘经验值的扩张日志LOGA物流因为,或棕褐色),以固定格式在第二栏找到。后面还可以有空格和约束名。对于一个规范约束时,规范类型(0、1、2或INF)跟在类型说明符后面(可选后跟约束名)。

对于函数约束,下一行定义了一些用于执行分段线性近似的属性。这一行以关键字开始选项(以固定格式在第5列中找到),然后是两个空格,然后是四个值(由两个空格分隔),它们定义FuncPiecesFuncPieceLengthFuncPieceError,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模型总是完全精确地编写。这意味着如果您编写了一个模型,然后将其读回来,那么与结果模型相关联的数据将与原始数据完全相同。