我想知道是否有一种方法可以传递给pyOpt一个应该在每次迭代结束时调用的函数?
我需要这样的东西的原因是,我在每个函数评估中运行有限元模拟,并且我希望在每次优化迭代后将有限元结果(位移、应力)输出到ExodusII文件。我最初把我的writeExodus函数放在“函数求值”函数的末尾,我的问题是每次函数求值时都会有一个新的“伪时间步长”写入到我的exodus文件中,而不仅仅是在每次迭代的末尾,所以这显然会导致额外的不必要的输出到exodus文件中,用于数值微分(有限差分,复杂步骤)和每次迭代进行多个函数求值的优化器(即当检查近似是否保守时)。
那么,有没有一种方法可以让pyOpt在每次迭代结束时执行一个函数(即我的exodusWrite函数)?或者,有没有什么办法可以在pyOpt中跟踪优化器迭代,以便在我的“函数求值”函数中跟踪优化器迭代,并且只在迭代次数发生变化时写入exodus输出?
发布于 2016-10-14 06:36:09
你可以把你的函数放在一个组件中,然后放在模型的末尾。因为它不会有任何连接,所以您需要为您的组手动执行set the run order。
或者,您可以只修改pyopt_sparse驱动程序代码以手动调用您的函数。您只需在最后添加对所选方法的调用(如果为this call ),然后在pyopt_sparse要求客观评估的任何时候都会调用它
https://stackoverflow.com/questions/40031152
复制相似问题