模型输入和输出数据文件格式 (Decision Optimization)

通过 Decision Optimization 模型,您可以使用以下输入和输出数据标识以及扩展组合。

下表显示了 Watson Machine LearningDecision Optimization 支持的文件类型组合:
模型类型 输入文件类型 输出文件类型 注释
cplex
.lp
.mps
.sav
.feasibility
.prm
.jar for Java™
模型
.xml
.json

输出文件名必须为 solution

可以使用 API 指定输出格式。

类型为 .lp.mps.sav 的文件可以使用 gzipbzip2进行压缩,并上载为例如 .lp.gz.sav.bz2

可以在 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 中读写输入和输出,请使用 get_input_stream("filename")get_output_stream("filename") 命令。 请参阅 DOcplex API 和示例

数据标识限制
文件名有下列限制:
  • 限长 255 个字符
  • 只能包含 ASCII 字符
  • 不能包含字符 /\?%*:|"<>,空格字符或空字符
  • 不得包含 _ 作为第一个字符

OPL 数据格式

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 工作簿
只能将 tuplestuple sets 用作 OPL 模型中的输入。

支持的元组字段类型包括 intfloatstring

要将输入值映射到 OPL 模型,必须遵循下列规则:
  • OPL 元素必须与 JSON 属性或 Excel 工作表同名。
  • 元组集合可以由 JSON 属性数组或工作表进行填充。
  • 元组元素可以由 JSON 属性对象填充,也可以使用单行 Excel 工作表填充。

对输入的限制是为了促进与数据源的集成。 例如,可以访问 SQL 数据源并以最少的工作量进行数据流式传输; 可以访问 NoSQL 数据源,并且可以自动将数据转换为表。 如有必要,优化模型开发者可以在优化期间重新规划数据以填充其他数据结构,但此处理不得影响输入或输出数据。

JSON 示例

JSON 格式可以用于 OPL 模型集成,以便更容易生成输入数据和解析结果。
{
  "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 文件的后处理块中 不声明 输出元素,那么 不生成输出数据。

在以下示例中,输出文件将包含 ResultNbTrucksOnRouteRes 的值以及目标函数,因为这些元素是在后处理中定义的。

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};