首页 > 解决方案 > IBM ILOG CMPLEX Optimization Studio 中 OPL 接口和 Concert 技术之间的区别

问题描述

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

最初,我开始使用 OPL 语言开发模型。但是,由于我打算从我的 C++ 应用程序中使用相同的模型但使用不同的数据动态调用求解器,我意识到构建模型并通过 CMPLEX C++ API(Concert 的一部分)调用求解器更有意义技术(#reff1#reff2)。当然,与在 OPL 中构建模型并直接运行相比,Concert Technology 公开的用于构建模型的接口要低得多,就表达它的难易程度而言。然后,我了解了“ OPL 接口”,它还公开了一个 C++ API,如果正确理解它,您可以从 OLP 定义加载您的模型并使用自定义数据源,并调用求解器。

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

软件版本:IBM ILOG CMPLEX Optimization Studio 20.1.0

标签: optimizationcplexoplilog

解决方案


与 Alex 的回答相反(我们彼此都很了解!),我绝对建议直接从 C++ 使用 Concert 库 API 调用。在过去的 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 结构和代码,因此我们发现这通常会给您留下一组额外的东西来保持更新或同步.

真的没有“正确”的选择——它真的取决于你(和你的团队)的偏好。无论您使用 OPL 还是 Concert API,这些都是将您的模型导入 CPLEX 的方法。求解性能应该没有区别


推荐阅读