议员格式
议员格式
MPS格式是存储数学编程模型的最古老和最广泛使用的格式。这种格式实际上有两种广泛使用的变体。在固定格式中,各个字段必须始终从文件中的固定列开始。自由格式非常类似,但字段由空白字符分隔,而不是出现在特定列中。两种格式之间的一个重要的实际区别是名称长度。在固定格式中,行和列名是8个字符,空格是名称的一部分。在自由格式中,名称可以任意长(尽管Gurobi阅读器对名称长度设置了255个字符的限制),并且名称不能包含空格。Gurobi MPS阅读器读取MPS类型,并自动识别格式。
请注意,以*
性格是一种评论。该行的内容将被忽略。
名称部分
MPS格式文件中的第一个部分是的名字
部分。它给出了模型的名称:
名字AFIRO在固定格式中,模型名称从第15列开始。
行部分
下一部分是行
部分。它以单词开头行
在它自己的行上,然后继续为模型中的每一行写一行。这些行表示约束类型(E
平等,l
小于或等于或G
对于大于或等于),以及约束名称。在固定格式中,类型出现在第2列中,行名从第5列开始。下面是一个简单的例子:
行e r09 e r10 l x05 n成本注意,一个
N
在type字段中指示行是自由行.用第一个自由行作为目标函数。如果文件包含多个N
行,每一行都包含一个优先级、权重、相对和绝对容差域,然后每一行都被视为多目标模型中的一个目标。附加字段必须出现在名称后面,用空格分隔。例如,下面将捕获一对目标,其中第一个优先级为2,第二个优先级为1(两者具有相同的权重,以及相对和绝对公差):
N obj0 2 1 0 N obj1 1 1 0请参阅多目标,ObjNPriority,ObjNWeight,ObjNAbsTol,ObjNRelTol部分以获取关于这些字段含义的信息。注意,多目标优化问题的所有目标必须是线性的。
LAZYCONS节
下一部分是懒惰的约束
部分。它从一行开始LAZYCONS
,可选,后面跟着一个空格和一个懒惰级别1-3(如果没有指定懒惰级别,则假设1),然后为每个懒惰约束继续一行。格式与行
Section:每一行表示约束类型(E
平等,l
小于或等于或G
对于大于或等于),以及约束名称。在固定格式中,类型出现在第2列中,行名从第5列开始。例如:
懒人e r01 g r07 l s01懒人2 e r02 g r03 l s11
延迟约束是线性约束,它们在语义上与标准线性约束等价(即行
部分)。根据它们的懒惰程度,MIP求解器会以不同的方式执行它们。手机万博登录请参阅有关的描述懒惰的属性的细节。
本章节为可选内容。
列部分
MPS文件的下一个也是通常最大的部分是列
部分,其中列出模型中的列以及与每列相关的非零系数。columns部分中的每一行都提供一个列名,后面跟着该列的零、一或两个非零系数。系数首先使用行名,然后使用浮点值指定。考虑以下例子:
列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“标记”“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。看BND x51 20。外汇BND x52 30。在这个
界限
部分,变量X49
得到的下界∞
(无穷上界不变),变量×50
的上界80
(下界不变0
,X51
得到的下界20.
(无限上界不变),且X52
是固定在30.
.QUADOBJ节
MPS文件中的下一个部分是可选的QUADOBJ
段,其中包含二次目标项。本节中的每一行表示Q矩阵下三角形中的一个非零值。参与二次项的两个变量的名称首先找到(以固定格式从第5和15列开始),然后是系数的数值(以固定格式从第25列开始)。按照惯例,Q矩阵有一个隐式的二分之一乘数。下面是一个包含三个二次项的例子:
Quadobj x01 x01 10.0 x01 x02 2.0 x02 x02 2.0这三项代表二次函数 (回想一下,单非对角线项实际上代表对称Q矩阵中的一对非零值)。
QCMATRIX节
MPS文件中的下一个部分包含零个或多个QCMATRIX
块。这些块包含与二次约束相关的二次项。模型中每个二次约束都应该有一个块。
每一个QCMATRIX
Block以指示相关二次约束名称的一行开始(以固定格式从第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 10
SOS节
MPS文件中的下一个部分是可选的紧急求救信号
部分。单个SOS约束的表示包含一行,用于提供SOS集的类型(S1
SOS类型1或S2
第2类SOS(固定格式见第2栏)和SOS集合的名称(固定格式见第5栏)。接下来是每一个SOS成员的一行。成员行给出了成员的名称(固定格式的第5列)和相关的权重(固定格式的第15列)。下面是包含两个SOS2集的示例。
SOS S2 sos1 x1 1 x2 2 x3 3 S2 sos2 x3 1 x4 2 x5 3
指标约束部分
在MPS格式中,指标约束部分是可选的。它以关键字开头指标
.指示符部分后面的每一行都以关键字开头如果
(以固定格式放置在列2),后跟一个空格和一个行名(行必须已经在行
部分)。该行接着是一个二进制变量(以固定格式放置在第15列),最后是一个值0
或1
(以固定格式列于第25栏)。
这里有一个简单的例子:
指示灯IF row1 x1 0 IF row2 y1 1
本例中的第一个指示符约束说明第一行
必须满足,如果x1
取一个值0
.
一般的约束部分
一个MPS文件可能包含一个可选的部分来捕获一般的约束.本节以关键字开始金康合同
.
一般约束可以有两种基本类型:简单的一般的约束,最小值,马克斯,或,和,腹肌或PWL,或函数约束-多项式(聚)、电力(战俘),指数(经验值或的扩张)、对数(日志或LOGA)及三角函数(罪,因为,或棕褐色).
每个通用约束都以通用约束类型说明符(最小值,马克斯,或,和,腹肌,PWL,聚,战俘,经验值,的扩张,日志,LOGA,罪,因为,或棕褐色),以固定格式载于第2栏。可以选择后面跟着空格和约束名。
对于函数约束,下一行定义了一些用于执行分段线性近似的属性。该行以关键字开头选项(在固定格式的第5列中找到),后面跟着两个空格,后面跟着四个值(用两个空格隔开),这些值定义FuncPieces
,FuncPieceLength
,FuncPieceError
,FuncPieceRatio
属性值(按此顺序)。
下面的内容取决于一般约束类型。简单的一般约束以所谓的合成变量的名称开始,放在它自己的行上(以固定格式从第5列开始)。为最小值或马克斯约束,后面是一个非空的变量或值列表(每个变量名在自己的行上)。为或和和Constraints,后面是一个二进制变量列表(每个都在自己的行上)。为腹肌约束,后面跟着一个额外的变量(在它自己的行上)。在固定格式中,所有这些变量或值都从第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 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格式的三种场景:
scenario 3 NAME scenario0 NAME scenario1 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 scenario2 BOUNDS FX BND1 x3 3
欲了解更多信息,请咨询多个场景的讨论.
ENDATA
MPS文件的最后一行必须是ENDATA
声明。
额外的笔记
请注意,在Gurobi优化器中,MPS模型总是完全精确地编写的。这意味着,如果您编写了一个模型,然后将其读取回来,与结果模型相关联的数据将与原始数据逐位相同。