文件格式
文件格式一览
目前杉数求解器COPT支持的文件格式如 表 50 所示。
文件格式 |
文件后缀 |
---|---|
MPS 格式模型文件 |
|
LP 格式模型文件 |
|
SDPA 格式模型文件 |
|
CBF 格式模型文件 |
|
COPT 二进制格式文件 |
|
IIS文件 |
|
可行化松弛文件 |
|
基解文件 |
|
结果文件 |
|
初始解文件 |
|
参数文件 |
|
调参文件 |
|
文件读写操作
可以通过调用相关函数,用户可以将外部模型文件输入给COPT进行读取;同时,也可以将在COPT中构建的模型、优化的结果等输出保存下来,进行文件的写出。
我们以读取或者写出当前目录下的mps格式的模型为例(其他文件也是类似操作),在不同接口中实现方式如 表 29 所示:
接口 |
读取 |
写出 |
---|---|---|
COPT命令行工具 |
|
|
C |
|
|
Python |
|
|
C++ |
|
|
C# |
|
|
Java |
|
|
模型文件介绍
用户可以在安装包的 "examples/data"
目录下找到COPT自带的模型文件实例。此处我们介绍常见的两种模型文件格式具体内容:MPS和LP。
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。
NAME: 模型的名称
OBJSENSE: 目标函数的优化方向
ROWS: 模型中约束及其方向(L表示 <= 约束;G表示 >= 约束;N表示无边界)
COLUMNS: 模型中变量及其系数
RHS: 约束的右端项取值
BOUNDS: 变量的边界(LO表示下界,UP表示上界,FR表示无边界)
注意
ROWS部分中,第一行
__OBJ___
表示目标函数;COLS部分中,形如
x __OBJ___ 1.2
,表示变量x在目标函数中的系数为1.2;在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)。
注意
有时在LP格式中,我们会看到形如
x#1
的变量名称,这个是标记x是第1个变量。当用户没有指定变量名称时,这是输出lp模型文件时自动生成的名称;如果变量中有二进制类型的,会通过Binaries字段进行标识。