如何在pyOpt中的优化迭代之间调用函数?

时间:2016-10-13 21:17:10

标签: python optimization openmdao

我想知道是否有办法让pyOpt传递一个函数 应该在每次迭代结束时调用?

我需要这样的事情的原因是我正在运行FEA 模拟每个功能评估,我想输出 每个后的ExodusII文件的FEA结果(位移,压力) 优化迭代。我最初把我的writeExodus函数放在了 结束了“功能评估”功能,我的问题是 每次都会将新的“伪时间步”写入我的出埃及文件中 评估函数而不是仅在每次迭代结束时, 所以这显然会导致额外的不必要输出到出埃及 数值微分的文件(有限差分,复数步)和 对于每次迭代进行多个函数求值的优化器 (即GCMMA在检查近似值是否保守时)。

那么,有没有办法告诉pyOpt执行一个函数(即我的 exodusWrite函数)在每次迭代结束时?或者, 无论如何,我可以跟踪pyOpt中的优化器迭代,以便 在我的“功能评估”功能里面我可以跟踪 优化器迭代并且只在迭代次数改变时写出exodus输出?

1 个答案:

答案 0 :(得分:0)

你可以将你的功能放入你放在模型末尾的组件中。由于它没有任何关联,因此您需要为您的论坛手动set the run order

或者,您可以通过破解pyopt_sparse驱动程序代码来手动调用您的函数。你只需要在this call结束时调用你选择的方法,然后在pyopt_sparse要求进行客观评估的时候调用它