微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决IBM ILOG CMPLEX Optimization Studio 中 OPL 接口和 Concert 技术之间的区别

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

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

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

软件版本:IBM ILOG CMPLEX Optimization Studio 20.1.0

解决方法

与 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 的方法。求解性能应该没有区别

,

我在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/ 做了一些调查并得到了

this pie chart built in OPL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。