当前位置: 首页 > 知识库问答 >
问题:

ILOG CMPLEX优化工作室中OPL接口与协调技术IBM差异

侯池暝
2023-03-14

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

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

因此,我的问题是,如果OPL接口和特定语言的CMPLEX API(Concert Technology)可以用于相同的目的,那么如何比较它们来构建和执行优化模型?我知道OPL接口和OPL的C API是基于C Concert技术的。如果目标是快速测试模型,但使用由我的C应用程序动态提供的自定义数据输入,那么我应该选择OPL接口,还是选择CMPLEX C API in Concert技术更好?

软件版本:IBMILOG CMPLEX优化工作室20.1.0

共有2个答案

长孙景天
2023-03-14

我在优化(又称规范分析)中提出了这个问题:我们应该用建模语言还是通用编程语言来编写模型?

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

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

郑承恩
2023-03-14

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

如果你来自一个习惯于建模语言的背景(AMPL、GAMS、MPL等),那么当你第一次开始使用音乐会应用编程接口时,这可能看起来更复杂或更困难。然而,如果您来自使用C、C#或Java的标准编码背景,那么将CPLEX视为一组库对象和函数似乎比学习另一种专业编程语言更自然。

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

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

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

 类似资料:
  • 我在IBM优化工作室中实现了一个LP问题,使用OPL来创建模型。验证模型后,我想把它放在Java,为模拟目的脚本参数。我找到了在Java使用我的OLP模型的最快方法,代码如下: 现在的问题是,如果我在IBM优化工作室和Java运行“myModel.mod”和“myData.dat”,我会得到非常不同的客观结果。 在IBM Optimization Studio中: 在Java中: 我看了数据集和我

  • 我知道我的问题很笼统,但我对人工智能领域还不熟悉。我用一些参数做了一个实验(几乎6个参数)。每一个都是独立的,我想找到输出函数最大或最小的最优解。然而,如果我想用传统的编程技术来实现,这将需要很多时间,因为我将使用六个嵌套循环。 我只是想知道用哪种人工智能技术来解决这个问题?遗传算法?神经网络?机器学习? 实际上,这个问题可能有不止一个评估函数。它将有一个功能,我们应该最小化它(成本)和另一个功能

  • 主要内容:一、前情回顾,二、日益膨胀的离线计算结果,三、分库分表 + 读写分离,四、每秒10万查询的高并发挑战,五、 数据的冷热分离架构,六、自研Elasticsearch+HBase+纯内存的查询引擎,七、实时数据存储引入缓存集群,八、阶段性总结,九、下一阶段的展望一、前情回顾 上篇文章:《为什么每个程序员都必须坚持写博客?这篇文章教你怎么写!》聊了一下系统架构中,百亿流量级别高并发写入场景下,如何承载这种高并发写入,同时如何在高并发写入的背景下还能保证系统的超高性能计算。 这篇文章咱们继续来

  • 本文向大家介绍分享101个MySQL调试与优化技巧,包括了分享101个MySQL调试与优化技巧的使用技巧和注意事项,需要的朋友参考一下 MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把他们分成几类,来帮助你掌握更多MySQL的调

  • 主要内容:概述,一、关联查询优化,1.左(右)外连接,2.内连接,3.JOIN语句原理,4.JOIN小结,5.Hash Join,二、子查询优化,三、排序优化,四、GROUP BY优化,五、优先考虑覆盖索引,六、使用前缀索引,七、索引下推ICP,八、其他查询优化,1.COUNT(*)与COUNT(具体字段)效率,2.不使用SELECT *,3.LIMIT 1优化,4.多使用commit概述 数据库调优的方式有多种: 建立索引、充分利用到索引、不让索引失效 对SQL语句进行优化 调优如缓冲、线程数

  • 备注:Electron 的原名是 Atom Shell。 与 NW.js 相似,Electron 提供了一个能通过 JavaScript 和 HTML 创建桌面应用的平台,同时集成 Node 来授予网页访问底层系统的权限。 但是这两个项目也有本质上的区别,使得 Electron 和 NW.js 成为两个相互独立的产品。 1. 应用的入口 在 NW.js 中,一个应用的主入口是一个页面。你在 pac