区分OpenMDAO中的迭代和函数评估SciPy SLSQP

问题描述:

我通过OpenMDAO使用SLSQP来解决优化问题。优化工作充分;在结束SLSQP输出写着:区分OpenMDAO中的迭代和函数评估SciPy SLSQP

Optimization terminated successfully. (Exit mode 0) 
      Current function value: [-0.07475851] 
      Iterations: 44 
      Function evaluations: 87 
      Gradient evaluations: 44 
Optimization Complete 

我现在想进行后处理的结果和检查整个迭代优化的收敛。当我通过sqlite字典访问迭代通过

db = sqlitedict.SqliteDict('opt_record.sqlite','iterations') 
db.keys() 

然后我看到87条记录。所以这里的“迭代”实际上是指功能评估。显然这也可以给出一个收敛的概念,但是有没有什么办法可以通过某种输出机制或者通过反算计算哪些函数评估引用迭代结束来真正访问信息的迭代?

在SLSQP你可以得到函数调用的方式有两种:

  1. 迭代,或Major iterations
  2. 线搜索的

这两点获得通过的情况下记录器记录,并OpenMDAO无法区分它们。尽管可以将它们滤除,因为主要迭代总是会在派生计算之前出现。所以没有任何派生物的情况很可能来自线路搜索者。