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

在非线性求解器中,什么影响求解器时间与NLP函数评估?

万俟承望
2023-03-14

我很难理解非线性优化中的性能如何受到求解器引擎接口的特定方式的影响。

我们有一个优化模型,在它的第一个版本中,是用GAMS编写的。IPOPT(一个常见的FOOS非线性求解器引擎)在IPOPT(无函数评估)中为每个优化返回1.4 CPU秒的执行时间,在函数评估中返回0.2 CPU秒的执行时间。

当我们将模型转换为C(以便更好地考虑模型的非优化组件)并通过其C API接口IPOPT时(使用ADOL-C和ColPack进行AD),我们在IPOPT中的执行时间为0.7秒,在函数评估中的执行时间为9.4秒(IPOPT的改进可能是由于这样一个事实,即按源编译IPOPT,我们能够使用GAMS版本的IPOPT中不可用的更好的线性求解器)。

因此,使用C,当然是使用了一个糟糕的优化代码,结果比GAMS慢约50倍,部分由更好的求解时间补偿。

我们现在正在评估将模型转换为其他语言的可行性,可以是Python和Pyomo,也可以是Julia和JuMP。

但我们首先想了解求解器在每个步骤中进行的函数评估如何取决于实现的特定语言。

使用C,很明显,在每次迭代中直接执行(评估)生成优化模型的函数,因此它们的实现方式很重要(尤其是,梯度和海森每次都会重新计算,至少在我们的实现中是这样)。

Pyomo和JuMP怎么样?是用Python和Julia计算每次迭代,还是用Pyomo和JuMP先用(我猜)C渲染模型,计算(而不是计算)梯度和hessian一次,然后是每次都要计算的“C版本”?这显然会带来很大的不同,尤其是对于python。。

共有2个答案

庞修贤
2023-03-14

在我们自己的基准测试中,JuMP与GAMS进行了比较;不管你怎么想。导数计算完全在Julia中(速度很快),没有编译的C代码。

李和裕
2023-03-14

Pyomo通过将模型转换为NL文件格式与Ipopt进行接口。它假设“ipopt”可执行文件在您的路径中(使用ASL编译的ipopt)。优化过程中发生的所有函数求值都发生在Ampl解算器库中的C中。

 类似资料:
  • 我有一个具有一般非凸不等式约束的一般非凸函数。我有一个可行的起点,我想最小化约束下的能量。求解器不应离开可行域(即障碍法),也不应增加能量。到目前为止,我使用的fmincon在这两个帐户上都失败了,我想用一种简单的方法来尝试其他解算器,如IPOPT、KNITRO和SNOPT。说到这里,我不介意推荐一个特定的解算器来完成我想要的(不增加并保持在可行区域)。 我想尝试其他求解器,但我正在寻找在某个包装

  • 我正在研究一个非线性微分方程求解器。我能得到一般的解决方案,但不能得到具体的解决方案。当我试图找到集成常量时,我得到了错误:E_x不可调用的,我的解决方案被归类为一个列表,所以我不能在其中替换任何东西。 这是我的代码: 我在上得到了可调用错误,在我在书中的例子(数值Python)解决了一个线性ODE,但没有得到这个错误。有没有一种不同的方法来解决非线性DE,或者将E定义为可调用的,而将E_sol定

  • 我正在用pyomo编程求解非线性优化问题(使用ipopt求解器)。稍后,我想在模型中添加随机元素。我知道在Pyomo中,可以使用复数形式来处理随机规划,但复数形式只能处理线性规划、混合整数规划和二次规划。 一般非线性随机规划问题有求解器吗?如果没有,我们如何使用现有的求解器来处理它?

  • 问题内容: 我有三个未知数4非线性方程,和我想要解决。等式的形式为: …其中,和是取决于四个方程式中每个值的常数。 解决此问题的最佳方法是什么? 问题答案: 有两种方法可以做到这一点。 使用非线性求解器 线性化问题并以最小二乘法解决 设定 因此,据我所知,您知道在4个不同点处的F,a,b和c,并且想要对模型参数X,Y和Z求逆。我们有3个未知数和4个观测数据点,因此这个问题太确定了。因此,我们将在最

  • 我已经广泛地搜索了,并认为我不会是唯一一个有这个问题的人,但看起来似乎我是。 有人有什么想法吗?提前向大家表示感谢,祝大家假期愉快!

  • 我正试图找到一个用Python解决一个非线性超定系统的好方法。我在这里查看了优化工具http://docs.cipy.org/doc/scipy/reference/optimize.nonlin.html,但我不知道如何使用它们。到目前为止我所掌握的是 你能帮我一下吗?