IBM ILOG CMPLEX Optimization Studio 中 OPL 接口和 Concert Technology 之间的区别

Difference between OPL Interfaces and Concert Technology in IBM ILOG CMPLEX Optimization Studio

我是 IBM 的 CMPLEX Optimization Studio 的新手,我试图了解什么是实现我的目标的最佳方法。我正在尝试通过为我的问题创建相关表示然后将其与 CMPLEX 求解器连接来实现决策优化解决方案,表示为混合整数线性规划。

最初,我开始使用 OPL 语言开发模型。然而,由于我打算从我的 C++ 应用程序中动态调用具有相同模型但具有不同数据的求解器,我意识到构建模型并通过 CMPLEX C++ API 调用求解器更有意义, Concert Technology 的一部分(#reff1, #reff2). Of course, the interfaces the Concert Technology exposes for building your model are much more low level, in terms of how easy it is to express it, compared to building your model in OPL and running it directly. Then, I learn about the "OPL Interfaces”,它还公开了一个 C++ API,如果理解正确,您可以从 OLP 定义加载模型并使用自定义数据源,并调用求解器。

所以我的问题是,对于特定语言的 OPL 接口和 CMPLEX APIs(音乐会技术)如何比较它们是否可以用于相同的目的,以构建和执行优化模型?我知道 OPL Interfaces and the C++ API of OPL 基于 C++ Concert Technology。如果目标是快速测试模型,但使用我的 C++ 应用程序动态提供的自定义数据输入,我应该选择 OPL 接口,还是有理由选择 Concert Technology 中的 CMPLEX C++ API 更好?

软件版本:IBM ILOG CMPLEX Optimization Studio 20.1.0

我在 Optimization (aka prescriptive analytics) : Should we write the model in a modeling language or a general programming language ?

中解决了这个问题

我倾向于推荐 OPL,然后您可能会通过 OPL C++ API 将所有 OPL 对象视为 C++ 对象。除非您想节省时间和内存,并且准备好花费更多的人工时间来构建模型。

我在 https://www.linkedin.com/pulse/which-aml-gpl-do-you-use-call-cplex-alex-fleischer/ 做了一些调查,得到了

与 Alex 的回答相反(我们彼此都很了解!),我肯定会推荐使用 Concert 库 API 直接从 C++ 调用。在过去的 20 年里,我在许多项目中使用了 OPL,我也在许多项目中使用了来自 C++、Java 和 C# 的 Concert API 调用。至少对我来说,我发现将我的建模变量和约束直接集成到我的 C++(或 C# 或 Java)代码中是一个巨大的优势。

如果您的背景是建模语言(AMPL、GAMS、MPL 等),那么当您第一次开始使用 Concert API 时,它可能看起来更复杂或更困难。但是,如果您具有使用 C++、C# 或 Java 的标准编码背景,那么将 CPLEX 视为一组库对象和函数似乎比必须学习另一种专业编程语言更自然。

我们发现完全使用来自 C++(或 C# 或 Java)的 Concert API 会改变您对使用 CPLEX 的看法。与我们合作过的软件开发人员似乎更开心,因为 CPLEX 只是我们可以像其他任何软件一样使用的另一款软件。我们可以将 CPLEX IloNumVars 等作为普通 C++ 类 中的成员变量,将它们放在字典、列表或数组中;通常将它们视为普通的 C++ 对象。这使得您可以轻松地将 CPLEX 建模变量和约束集成到您的软件中。

如果您想使用 OPL,那么它肯定会鼓励(强制?)将您的标准 (C++) 代码与内部数学模型分开。您可能会发现这是一个优势(以不同的语言单独保存模型)或不是。即使使用 OPL,如果您的数据结构(在数据、数据库或 C++ 中)发生变化,您可能也必须更新 OPL 结构和代码,因此我们发现通常会给您留下一组额外的东西来保持更新或同步.

确实没有 'correct' 选择 - 这实际上取决于您(和您的团队)的偏好。无论您使用 OPL 还是 Concert API,这些都只是将您的模型导入 CPLEX 的方法。求解性能应该没有区别