2016-10-13 46 views
0

我想知道是否有一種方法可以傳遞函數 應該在每次迭代結束時調用?如何在pyOpt中優化迭代之間調用函數?

的原因,我需要這樣的事情是,我運行一個FEA 模擬在各功能的評價,我想輸出 FEA結果(位移,應力)到ExodusII文件中的每個 優化迭代後。我最初將我的writeExodus函數放在 「功能評估」函數的末尾,我的問題是 ,每次對函數進行求值時,都會將新的「僞時間步長」寫入我的exodus文件中,而不是僅在每次迭代結束時,這顯然會導致對於數值微分(有限差分,複數步進)的外流 文件的額外非必要輸出以及對於每次迭代進行多個函數評估的優化器 (即,GCMMA在檢查近似值時是否爲 是保守的)。

那麼,有沒有一種方法可以告訴pyOpt在每次迭代結束時執行函數(即我的 exodusWrite函數)?或者, 是否有,我可以跟蹤pyOpt中的優化器迭代,以便我可以跟蹤 優化器迭代,並且只在迭代編號更改時寫出exodus輸出,纔可以在我的「函數評估」函數中使用 ?

回答

0

你可以將你的函數放入你放在模型末尾的組件中。由於它不會有任何連接,因此您需要手動爲您的組設置set the run order

或者,您可以只用破解pyopt_sparse驅動程序代碼來手動調用您的函數。您只需在最後添加一個呼叫到您選擇的方法,如果this call並且隨時會被調用pyopt_sparse要求客觀評估