9.2. 解相关文件¶
在使用 MindOpt 求解之后,获得的最优解或可行解,可以输出到文件中。
文件类型 |
模型类型 |
说明 |
|---|---|---|
BAS |
线性规划问题 |
各变量和约束的基状态 |
SOL |
线性规划和混合整数规划问题 |
各变量的解 |
MST |
混合整数规划问题 |
非连续变量的解 |
9.2.1. BAS文件¶
在线性规划问题求解成功后,可以使用 bas 文件格式,将原问题的各个变量,以及对偶问题各个变量的基状态写入到文件。 也可以在求解一个线性规划问题前,读入一个 bas 文件,给求解器初始化一个基状态。
一个 bas 文件包含多行,第一行记录模型的名称
NAME : foo
第一行以一个关键字 NAME 开头,: 之后紧跟一个空格,之后的部分记录模型的名称。
接下来是对偶问题的变量基状态,即 RowBasis ,每行对应对偶问题的一个变量。如
FR R0
可以看见,这一行包含一个状态码 FR 和一个约束名称 R0 ,它表示约束 R0 对应的对偶变量,其基状态是 "free"。
基状态码的对应关系见下表:
代码 |
状态含义 |
|---|---|
FR |
isFree |
BS |
basic |
UU |
atUpperBound |
UL |
atLowerBound |
SB |
superBasic |
EQ |
isFixed |
UK |
未知的 |
接下来的多行是原始问题变量的基状态,即 ColBasis,每行对应一个变量。如
BS C0
它表示变量 C0 是一个基变量。
备注
记录基状态的行,应该以空格开始,即缩进1个空格。
最后,bas 文件以一个无缩进的 ENDATA 结束。
ENDATA
9.2.2. SOL文件¶
在使用 MindOpt 成功求解之后,可以将原始和对偶问题的解输出到 sol 文件。一个 sol 文件包含三个部分信息:
模型信息,包括名称、原始及对偶问题目标函数值等
变量的解
对偶变量的解
首先是模型信息,如:
NAME : foo
PRIMAL OBJECTIVE : -4.88569887318817E+00
DUAL OBJECTIVE : -4.88569887318827E+00
PROBLEM STATUS : OPTIMAL
包含四行,每行包含两个字段,以 : 分隔。分别表示:
模型名称
原始问题目标函数值
对偶问题目标函数值
求解状态
接下来是一个空行,之后的多行是变量的解(即 X):
VARIABLES
C0 +4.76048966504162E-01
C1 +8.73391945822582E-01
C2 +0.00000000000000E+00
C3 +3.36918727744315E-01
C4 +8.96258337238064E-01
C5 +6.36894231964933E-01
C6 +8.62158935460491E-01
变量的解,以一个 "VARIABLES" 单独占一行来开始,每行的第一个字段是变量名称,第二个字段是变量的解。
接下来又是一个空行,之后多行是对偶变量的解(即 DualSoln):
CONSTRAINTS
c0 -1.32829351698292E-01
c1 -4.53378851617045E-01
c2 +1.07104207431984E-01
c3 +6.87509566168726E-01
c4 +6.09393433447014E-03
c5 -2.88026626252556E-01
c6 +1.56943391710642E+00
对偶变量的解,以一个 "CONSTRAINTS" 单独占一行来开始,每行的第一个字段是约束名称,第二个字段为约束对应对偶变量的解。
9.2.3. MST文件¶
MST文件,被设计用来实现MIP问题的热启动。我们在求解完一个混合整数规划问题后,可以将当前整数变量的解,输出到文件中,用来作为另一个问题的初始解。
由于混合整数规划通常比线性规划慢得多,所以确定一个整型变量的解,比确定一个连续变量的解困难。为了减小文件大小,mst 文件只记录整型变量的解。 而且,提供所有整型变量的解也不是必须的,求解器会试图推测那些缺失的值。
mst 文件被设计为便于手工编辑和修改,它的格式非常简单。它包含多行,每一行记录一个整型变量的解,如:
# Solutions
c0 0
c1 1
c2 0
它记录了三个整型变量 c0, c1 以及 c2 的解。任何以 # 开始的行,都会被当成注释而被忽略。
然而,在求解一个问题之前读入一个初始解用于热启动,并不一定都会生效。总之,求解器只会把这个初始解当做参考。
读入包含一些变量的 mst 文件,和为这些变量设置 Start 是等效的。