议员格式


议员格式

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
请参阅多目标ObjNPriorityObjNWeightObjNAbsTol,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(下界不变0X51得到的下界20.(无限上界不变),且X52是固定在30.

QUADOBJ节

MPS文件中的下一个部分是可选的QUADOBJ段,其中包含二次目标项。本节中的每一行表示Q矩阵下三角形中的一个非零值。参与二次项的两个变量的名称首先找到(以固定格式从第5和15列开始),然后是系数的数值(以固定格式从第25列开始)。按照惯例,Q矩阵有一个隐式的二分之一乘数。下面是一个包含三个二次项的例子:

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块。这些块包含与二次约束相关的二次项。模型中每个二次约束都应该有一个块。

每一个QCMATRIXBlock以指示相关二次约束名称的一行开始(以固定格式从第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列开始)。下面是一个包含两个变量分段线性表达式的例子X01X02,各有三个点:

X01 1 1 X01 2 2 X01 3 4 x02 1 1 x02 3 5 x02 7 10

SOS节

MPS文件中的下一个部分是可选的紧急求救信号部分。单个SOS约束的表示包含一行,用于提供SOS集的类型(S1SOS类型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列),最后是一个值01(以固定格式列于第25栏)。

这里有一个简单的例子:

指示灯IF row1 x1 0 IF row2 y1 1

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

一般的约束部分

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

一般约束可以有两种基本类型:简单的一般的约束,最小值马克斯腹肌PWL,或函数约束-多项式()、电力(战俘),指数(经验值的扩张)、对数(日志LOGA)及三角函数(因为,或棕褐色).

每个通用约束都以通用约束类型说明符(最小值马克斯腹肌PWL战俘经验值的扩张日志LOGA因为,或棕褐色),以固定格式载于第2栏。可以选择后面跟着空格和约束名。

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