0

我有一个解决 ILP 的 OPL 模型。

目前它将解决方案写入 txt 文件。

我想在模型完成时启动一些东西来很好地显示解决方案,所以我需要运行一个 shell 命令。

  1. 如何在 OPL 运行完成时启动任意 shell 命令?

  2. 我可以从 OPL 运行调用同一项目中的 JavaScript 文件来处理数据吗?(注意:我看到我可以做到这一点includeScript(...)

  3. 我可以在 JavaScript 文件中启动任意 shell 命令吗?

  4. 我想将结果格式化为 JSON。然而,通常的“JSON”对象在 Javascript 上下文中不可用。我可以在 Javascript 中创建一个对象,然后将其“字符串化”为 JSON 吗?

(关于 (4) 的注意事项 - 文档声称 JavaScript 实现符合 ECMA-262:

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.4.0/ilog.odms.ide.help/refjsopl/html/intro.html#1037020

但是,ECMA-262 定义确实包含以下JSON.Stringify功能:

https://www.ecma-international.org/ecma-262/5.1/#sec-15.12

为什么它在 OPL 中不可用?)

4

2 回答 2

1

只是一些个人经验,如果将 OPLScript 视为 JavaScript 变体,它是不完整的 - 非常不完整。每次我尝试在 OPLScript 中使用一些旧式 JavaScript 代码时,我都会重新学习这一课。

在最基本的层面上,许多标准的数组和对象方法都缺失了。例如,您甚至不能使用[]语法来创建 JavaScript 数组或访问对象的属性。您不能列出对象的键等...

对于任何复杂的数据结构,最好使用另一种语言,例如 Java 或 Python(无需重新发明所有常用工具)。

于 2020-03-06T15:21:23.433 回答
0
  1. 如果您有足够的耐心,这可能是新版本的一部分。但是对于 12.7.1,您可以使用脚本中的外部 Java 调用或修改示例CPLEX_Studio1271\opl\examples\opl_interfaces\java\oplrunsample以执行您需要的操作。

  2. 是的,包括

  3. 不在版本 12.7.1 中

  4. OPLscript 是 ECMA 的子集,并非所有功能都在其中,但您可以使用 IloOplOutputFile 进行管理 请参阅https://www.ibm.com/developerworks/community/forums/html/topic?id=a7738eaf-f053-4fa8-83dc-5886bc381244&ps =25

于 2017-11-03T07:54:08.933 回答