0 / 0
Go back to the English version of the documentation
Decision Optimization OPL 模型的输入和输出数据格式
Last updated: 2024年12月05日
Decision Optimization OPL 模型输入和输出数据文件格式

部署时,您必须为 OPL Decision Optimization模型使用以下输入和输出数据格式。

OPL 数据格式

在 OPL 模型中,您必须为使用的每个表声明 tupleset。 下面的示例显示了一个 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 模型的输入数据可以下列其中一种格式来提供:

  • .csv 锉刀
  • .dat 锉刀
  • JSON 文档
  • Microsoft Excel 工作簿(.xlsx和 ".xls)文件已废弃。

    要连接 Microsoft Excel 文件请使用数据连接器。 数据连接器将 Excel 文件转换为 ".csv文件。 更多信息,请参阅参考数据

.dat 文件
支持所有 OPL 数据结构。 例如
{Parameters = <100, 5000>;

Hubs = { <"G">, <"H"> };

Spokes = { <"A", 360, 1080>, <"B", 400, 1150> };
JSON 文档或 Microsoft Excel 工作簿
在 OPL 模型中,您只能使用 tuplestuple sets 作为输入。

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

要将输入值映射到 OPL 模型,必须遵循下列规则:
  • OPL 元素必须与 JSON 属性或 Excel 工作表同名。
  • 元组集合可以由 JSON 属性数组或工作表进行填充。
  • 元组元素可由 JSON 属性对象或单行 Excel 表填充。
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 文件来代替使用 .dat 文件。 此选项与 IBM ILOG CPLEX Optimization Studio 不同,后者必须在 .dat 文件中将 Excel 文件指定为外部源。 在 Decision Optimization中,Excel 文件必须与模型一起包含,并且不能从 .dat 文件中调用。

只使用元组和元组集作为 OPL 输入的限制是为了便于与数据源集成。 例如,可以访问 SQL 数据源并以最小的工作量进行数据流;NoSQL数据源可以被访问,数据可以自动转换为表格。 如有必要,优化模型开发者可以在优化期间重新规划数据以填充其他数据结构,但此处理不得影响输入或输出数据。

输出数据

如果输出是文本文件,那么目标函数和决策变量的值将以非结构化格式提供。

如果输出格式是 JSON、".csv或 Excel,则必须在后处理块中定义要导出到客户端的内容。 后处理是指 subject to 文件中 .mod 部分之后的所有代码。 因此,要定义 JSON、".csv或 Excel 输出,必须在后处理中声明元组或元组集。

If you 不声明 output elements in the post-processing block of the .mod file, 不产生输出数据。

在下面的示例中,输出文件将包含 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};
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more