对 cplex/gurobi MPS/LP文件格式的理解

文章目录

    • 1. MPS 文件的理解
    • 2. LP 文件的理解

优化求解器如 cplex 或 gurobi,都支持直接读取线性规划建模文件 MPS 格式或 LP 格式,因此,有必要研究一下,这样就可以编写一个 mps 或 lp 文件,用不同的求解器直接算了。对于下面的线性规划模型:
max ⁡ x 1 + 2 x 2 + 3 x 3 + x 4 s.t. { − x 1 + x 2 + x 3 + 10 x 4 ≤ 20 x 1 − 3 x 2 + x 3 ≤ 30 x 2 − 3.5 x 4 = 0 0 ≤ x 1 ≤ 40 , x 2 ≥ 0 , x 3 ≥ 0 , x 4 是 整 数 \begin{aligned} &\max\quad &&x_1 + 2x_2 + 3x_3 + x_4\\ &\text{s.t.}&& \begin{cases} -x_1 + x_2 + x_3 + 10x_4 \leq 20\\ x_1 - 3x_2 + x_3 \leq 30\\ x_2 - 3.5x_4 = 0\\ 0 \leq x_1\leq 40, x_2\geq 0, x_3\geq 0, x_4 是整数 \end{cases} \end{aligned} maxs.t.x1+2x2+3x3+x4x1+x2+x3+10x420x13x2+x330x23.5x4=00x140,x20,x30,x4

1. MPS 文件的理解

IBM 的官方网站对 MPS 文件有一些详细的解释,参见:https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.0/ilog.odms.cplex.help/CPLEX/FileFormats/topics/MPS_records.html, (复制在浏览器内打开)
对应的例子是:https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.1/ilog.odms.cplex.help/CPLEX/UsrMan/topics/discr_optim/mip/02_prob_statement.html

这里我就谈谈自己的理解了。

上面问题的 MPS 文件内容为:

NAME        chen   
ROWS
 N  obj     
 L  c1      
 L  c2      
 E  c3      
COLUMNS
    x1        obj                 -1   c1                  -1
    x1        c2                   1  
    x2        obj                 -2   c1                   1
    x2        c2                  -3   c3                   1
    x3        obj                 -3   c1                   1
    x3        c2                   1    
    MARK0000  'MARKER'                 'INTORG'
    x4        obj                 -1   c1                  10
    x4        c3                -3.5
    MARK0001  'MARKER'                 'INTEND'
RHS
    rhs       c1                  20   c2                  30   
	            
BOUNDS
 UP bnd       x1                  40
 LO bnd       x4                   2
 UP bnd       x4                   3
ENDATA

下面详细解释这个 MPS 文件:

  1. NAME: 表示这个优化模型的名字,后面可以不写内容

  2. ROWS: 每一行,包括目标函数与约束条件
    (1) N 表示自由行, obj是对目标函数的命名,可以任意取
    (2) L 表示该行小于等于, c1是对改行的命名,可以任意取名
    (3) G 表示该行大于等于
    (4) E 表示该行等于

  3. COLUMNS: 每一列,及对应的系数
    (1) 下面的第一列要空
    (2) 下面的第二列表示列的名字,其实就是求解变量
    (3) 下面的第三列表示所在行的名字
    (4) 下面的第四列表示所在行与列对应的系数
    (5) 其中 MARK0000 ‘MARKER’ ‘INTORG’
    MARK0001 ‘MARKER’ ‘INTEND’ 分别表示整数变量的起止
    (6) 第五列、第六列分别与第三列、第四列的含义相同。

  4. RHS: 约束条件最右端的数字
    (1) 下面的第一列要空
    (2) 下面的第二列表示 rhs 名字,可以任取
    (3) 下面的第三列表示所在行的名字
    (4) 下面的第四列表示所在行对应的 RHS 值
    (5) 第五列、第六列分别与第三列、第四列的含义相同。

  5. Bounds: 表示各变量的上界或下界
    (1) LO 表示下界
    (2) UP 表示上界
    (3) FX 表示该变量固定值
    (4) FR 表示改变量的范围为 ( − ∞ , ∞ ) (-\infty,\infty) (,)
    (5) MI 表示下界为负无穷
    (6) PL 表示上界为正无穷
    MPS 变量默认的范围为 [ 0 , ∞ ) [0,\infty) [0,)

  6. ENDDATA: 表示 MPS 文件结束

2. LP 文件的理解

上面问题的 LP 文件为:

Maximize
 obj: x1 + 2 x2 + 3 x3 + x4
Subject To
 c1: - x1 + x2 + x3 + 10 x4 <= 20
 c2: x1 - 3 x2 + x3 <= 30
 c3: x2 - 3.5 x4 = 0
Bounds
 0 <= x1 <= 40
 2 <= x4 <= 3
General
 x4
End

LP文件非常清晰明了,但貌似规划软件对 mps 文件支持的更好。其中需要注意的是

  • Bounds 里面若有 free 表示该变量无上下界
  • General 表示整数变量
  • Binary 表示二进制变量
  • \ 表示注释

cplex 有自己的字段 pwl 表示分段线性约束。

你可能感兴趣的:(cplex,gurobi,Cplex/Gurobi)