文件格式

文件格式一览

目前杉数求解器COPT支持的文件格式如 表 50 所示。

表 50 支持的文件格式

文件格式

文件后缀

MPS 格式模型文件

.mps, .mps.gz

LP 格式模型文件

.lp, .lp.gz

SDPA 格式模型文件

.dat-s, .dat-s.gz

CBF 格式模型文件

.cbf, .cbf.gz

COPT 二进制格式文件

.bin, .bin.gz

IIS文件

.iis

可行化松弛文件

.relax

基解文件

.bas

结果文件

.sol

初始解文件

.mst

参数文件

.par

调参文件

.tune

文件读写操作

可以通过调用相关函数,用户可以将外部模型文件输入给COPT进行读取;同时,也可以将在COPT中构建的模型、优化的结果等输出保存下来,进行文件的写出。

我们以读取或者写出当前目录下的mps格式的模型为例(其他文件也是类似操作),在不同接口中实现方式如 表 29 所示:

表 51 读写文件的函数

接口

读取

写出

COPT命令行工具

read example.mps

write example.mps

C

COPT_ReadMps

COPT_WriteMps

Python

Model.read() / Model.readMps()

Model.write() / Model.writeMps()

C++

Model::read() / Model::readMps()

Model::write() / Model::writeMps()

C#

Model.Read() / Model.ReadMps()

Model.Write() / Model.WriteMps()

Java

Model.read() / Model.readMps()

Model.write() / Model.writeMps()

模型文件介绍

用户可以在安装包的 "examples/data" 目录下找到COPT自带的模型文件实例。此处我们介绍常见的两种模型文件格式具体内容:MPS和LP。

_images/copt-file_example.png

MPS 格式

MPS是通用的模型文件标准格式,不同类型的优化问题都可以输出为mps格式存储下来,在求解器软件中被广泛使用。

如下是一个MPS格式的模型文件示例:

NAME          COPTPROB
OBJSENSE
    MAX
ROWS
N  __OBJ___
L  R0000000
G  R0000001
COLUMNS
    x         __OBJ___  1.2
    x         R0000000  1.5
    x         R0000001  0.80000000000000004
    y         __OBJ___  1.8
    y         R0000000  1.2
    y         R0000001  0.59999999999999998
    z         __OBJ___  2.1000000000000001
    z         R0000000  1.8
    z         R0000001  0.90000000000000002
RHS
    RHS       R0000000  2.6000000000000001
    RHS       R0000001  1.2
BOUNDS
LO BOUND     x         0.10000000000000001
UP BOUND     x         0.59999999999999998
LO BOUND     y         0.20000000000000001
UP BOUND     y         1.5
LO BOUND     z         0.29999999999999999
UP BOUND     z         2.7999999999999998
ENDATA

我们可以看到MPS中主要包括几个部分:NAME、OBJSENSE、ROWS、COLUMNS、RHS、BOUNDS。

  1. NAME: 模型的名称

  2. OBJSENSE: 目标函数的优化方向

  3. ROWS: 模型中约束及其方向(L表示 <= 约束;G表示 >= 约束;N表示无边界)

  4. COLUMNS: 模型中变量及其系数

  5. RHS: 约束的右端项取值

  6. BOUNDS: 变量的边界(LO表示下界,UP表示上界,FR表示无边界)

注意

  1. ROWS部分中,第一行 __OBJ___ 表示目标函数;

  2. COLS部分中,形如 x         __OBJ___  1.2 ,表示变量x在目标函数中的系数为1.2;

  3. 在MPS格式中,整数型变量会通过如下的字段进行标识:

    • 第一个整数变量: MARKER    'MARKER'                 'INTORG'

    • 最后一个整数变量: MARKER    'MARKER'                 'INTEND'

LP 格式

LP格式更加贴近于代数形式,与MPS相比,可读性更高,并且能够容易地对应到其原始的数学模型。

如下是一个LP格式的模型文件示例:

\Generated by Cardinal Operations

Maximize
1.2 x + 1.8 y + 2.1 z
Subject To
1.5 x + 1.2 y + 1.8 z <= 2.6
0.8 x + 0.6 y + 0.9 z >= 1.2
Bounds
0.1 <= x <= 0.6
0.2 <= y <= 1.5
0.3 <= z <= 2.8
END

我们可以看到LP中主要包括几个部分:目标函数(Maximize)、约束条件(Subject To)、变量范围(Bounds)。

注意

  1. 有时在LP格式中,我们会看到形如 x#1 的变量名称,这个是标记x是第1个变量。当用户没有指定变量名称时,这是输出lp模型文件时自动生成的名称;

  2. 如果变量中有二进制类型的,会通过Binaries字段进行标识。