模型输入和输出数据文件格式 (Decision Optimization)
通过 Decision Optimization 模型,您可以使用以下输入和输出数据标识以及扩展组合。
| 模型类型 | 输入文件类型 | 输出文件类型 | 注释 |
|---|---|---|---|
cplex |
.lp.mps.sav.feasibility.prm.jar for Java™模型 |
.xml.json输出文件名必须为 solution |
可以使用 API 指定输出格式。 类型为 可以在 cplex_xsds.zip 归档中从 Decision Optimization github下载解法,冲突和可行性文件的 CPLEX 格式的模式。 |
cpo |
.cpo.jar for Java模型 |
.xml.json输出文件名必须为 solution |
可以使用求解参数指定输出格式。 有关 CPO 模型的本机文件格式,请参阅: CP Optimizer 文件格式语法。 |
opl |
.mod.dat.oplproject.xls.json.csv.jar for Java模型 |
.xml.json.txt.csv.xls |
输出格式与输入类型一致,但可以使用求解参数 (如果需要) 来指定。 要利用数据连接器,请使用 .csv 格式。只能部署使用元组集定义的模型; 不支持其他 OPL 结构。 要在 OPL 中读写输入和输出,请参阅 OPL 模型。 |
docplex |
.py*.* (输入数据) |
模型中指定的任何输出文件类型。 | 在 Python 代码中可以使用任何格式,但是,如果要利用数据连接器,请使用 .csv 格式。要在 Python 中读写输入和输出,请使用 |
- 数据标识限制
- 文件名有下列限制:
- 限长 255 个字符
- 只能包含 ASCII 字符
- 不能包含字符
/\?%*:|"<>,空格字符或空字符 - 不得包含 _ 作为第一个字符
OPL 数据格式
tuple, dvar, minimize (或 maximize) 和 subject to来声明优化问题的元组,决策变量,目标函数和约束。 以下示例显示 OPL 模型节选:tuple parameters {
int maxTrucks;
int maxVolume;
}
parameters Parameters = ...;
tuple location {
key string name;
}
{location} Hubs = ...;
tuple spoke {
key string name;
int minDepTime;
int maxArrTime;
};
{spoke} Spokes = ...;
dvar int+ TruckOnRoute[Routes][TruckTypeIds] in 0..Parameters.maxTrucks;
[...]
minimize TotalCost;
subject to {
[...]
} OPL 输入数据
输入数据可以从外部数据源填充。 OPL 模型的输入数据可以下列其中一种格式来提供:
.dat锉刀- JSON 文档
- Microsoft Excel 工作簿(
.xls对应 Excel 2003,.xlsx对应 Excel 2007)和.csv文件
- .dat 文件
- 支持所有 OPL 数据结构。 例如
{Parameters = <100, 5000>; Hubs = { <"G">, <"H"> }; Spokes = { <"A", 360, 1080>, <"B", 400, 1150> }; - JSON 文档或 Microsoft Excel 工作簿
- 只能将
tuples和tuple sets用作 OPL 模型中的输入。支持的元组字段类型包括
int、float或string。
- OPL 元素必须与 JSON 属性或 Excel 工作表同名。
- 元组集合可以由 JSON 属性数组或工作表进行填充。
- 元组元素可以由 JSON 属性对象填充,也可以使用单行 Excel 工作表填充。
对输入的限制是为了促进与数据源的集成。 例如,可以访问 SQL 数据源并以最少的工作量进行数据流式传输; 可以访问 NoSQL 数据源,并且可以自动将数据转换为表。 如有必要,优化模型开发者可以在优化期间重新规划数据以填充其他数据结构,但此处理不得影响输入或输出数据。
JSON 示例
{
"Parameters": {
"maxTrucks": 100,
"maxVolume": 5000
},
"Hubs": [
{ "name": "G" },
{ "name": "H" }
],
"Spokes": [
{ "name": "A",
"minDepTime": 360,
"maxArrTime": 1080 },
{ "name": "B",
"minDepTime": 400,
"maxArrTime": 1150 },
. . .
}Excel 文件
您可使用 Excel 文件来代替使用 .dat 文件。 此选项与 IBM ILOG CPLEX Optimization Studio 不同,其中 Excel 文件必须指定为 .dat 文件中的外部源。 在 Decision Optimization 中, Excel 文件必须包含在模型中,并且不能从 .dat 文件调用。
OPL 输出数据
如果输出是文本文件,那么将以非结构化格式提供目标函数和决策变量的值。
如果输出格式为 JSON , .csv 或 Excel ,那么 您必须定义要在后处理块中导出回客户机的内容。 后处理是 .mod 文件中 subject to 部分后面的所有代码。 因此,要定义 JSON , .csv 或 Excel 输出,必须在后处理中声明元组或元组集。
如果在 .mod 文件的后处理块中 不声明 输出元素,那么 不生成输出数据。
在以下示例中,输出文件将包含 Result 和 NbTrucksOnRouteRes 的值以及目标函数,因为这些元素是在后处理中定义的。
subject to {
[...]
}
tuple result {
float totalCost;
}
result Result;
execute {
Result.objValue = cplex.getObjValue();
}
tuple nbTrucksOnRouteRes {
key string spoke;
key string hub;
key string truckType;
int nbTruck;
}
{nbTrucksOnRouteRes} NbTrucksOnRouteRes =
{<r.spoke, r.hub, t, TruckOnRoute[r][t]> | r in Routes, t in TruckTypeIds :
TruckOnRoute[r][t] > 0};