Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在非线性解算器中,什么会影响解算器时间与NLP函数计算?_Performance_Mathematical Optimization_Pyomo_Julia Jump_Ipopt - Fatal编程技术网

Performance 在非线性解算器中,什么会影响解算器时间与NLP函数计算?

Performance 在非线性解算器中,什么会影响解算器时间与NLP函数计算?,performance,mathematical-optimization,pyomo,julia-jump,ipopt,Performance,Mathematical Optimization,Pyomo,Julia Jump,Ipopt,我很难理解解算器引擎接口的特定方式如何影响非线性优化的性能 我们有一个优化模型,它的第一个版本是用GAMS编写的。 IPOPT(一种常见的FOOS非线性求解器引擎)在IPOPT(不带功能评估)中为每次优化返回1.4 CPU秒的执行时间,在功能评估中返回0.2 CPU秒的执行时间 当我们将模型转换为C++(为了更好地计算模型的非优化组件),并将其接口C++的API(使用ADO-C和COLPACK用于AD)时,在IPOPT中执行时间为0.7秒,在功能评估中执行了9.4秒。(IPOPT的改进可能是由于

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

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

当我们将模型转换为C++(为了更好地计算模型的非优化组件),并将其接口C++的API(使用ADO-C和COLPACK用于AD)时,在IPOPT中执行时间为0.7秒,在功能评估中执行了9.4秒。(IPOPT的改进可能是由于通过源代码编译IPOPT,我们能够使用更好的线性解算器,这在IPOPT的GAMS版本中是不可用的)

这样,使用C++,公认地使用了一个坏优化的代码,给我们的结果比GAMS慢50倍,部分补偿了较好的求解时间。 我们现在正在评估用其他语言转换模型的可行性,可以是Python和Pyomo,也可以是Julia和JuMP

但我们想首先了解解算器在每一步进行的函数求值如何取决于所实现的特定语言

用C++,很明显,在每次迭代中,直接执行(优化)的函数都是优化模型,所以它们的实现方式是重要的(特别是每次都要重新计算梯度和Hessian)。 Pyomo和JuMP的情况如何?是每次迭代都用Python和Julia进行计算,还是Pyomo和JuMP首先用(我猜)C呈现模型,计算(而不是计算)梯度和hessian一次,然后是每次都要计算的“C版本”?


这显然会产生很大的不同,特别是对于python而言。

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

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

跳跃与GAMS in相比有优势;尽管如此。导数计算完全在Julia中进行(速度很快),没有编译过的C代码。

JuMP与GAMS in相比有优势;尽管如此。导数计算完全在Julia中进行(速度很快),没有编译的C代码。

首先想到的问题是:这两个实现是否相等?数据是否相等?模型?随机种子?是否得到相同的解决方案?我很确定其中一些问题的答案是否定的。如果两个实现做的事情不完全相同,则很难评估,尤其是在这样的情况下解决以启发式行为为核心的难题!这意味着,需要一个更大的基准来真正分析这一点。我预计不会对函数评估产生巨大影响,可能是自动区分。但这只是猜测。(1)GAMS解算器IPOPTH使用MA27通常比使用腮腺炎的IPOPT获得更好的性能(2)GAMS函数和梯度计算可能共享一些子表达式;有时这可以节省一些时间(3)您可以通过让转换解算器将模型转换为(丑陋、标量)来快速试用pyomoPyomo代码。首先想到的问题是:这两个实现是否相等?数据是否相等?模型?随机种子?你得到了相同的解决方案吗?我很确定其中一些问题的答案是否定的。如果两个实现没有做完全相同的事情,很难评估,特别是在解决困难的pr时问题的核心是启发式行为!这意味着,需要一个更大的基准来真正分析这一点。我预计不会对函数评估产生巨大影响,可能是自动区分。但这只是猜测。(1)GAMS解算器IPOPTH使用MA27通常比使用腮腺炎的IPOPT获得更好的性能(2)GAMS函数和梯度计算可能共享一些子表达式;有时这可以节省一些时间(3)您可以通过让转换解算器将模型转换为(丑陋的标量)pyomo代码来快速尝试pyomo。