所以我從舊OpenMDAO轉換代碼到新OpenMDAO。所有輸出和部分漸變已被驗證爲正確。起初問題根本不會優化,然後我意識到舊代碼有一些組件不提供梯度,因此它們自動有限差異。所以我給這些組件添加了fd_options ['force_fd'] = True,但它仍然沒有優化到正確的值。我檢查了總衍生物,但它仍然不正確。與舊的OpenMDAO相比,每次迭代還需要相當長的時間。我可以讓我的新代碼優化到與舊的OpenMDAO代碼相同的值的唯一方法是將每個組件設置爲有限差異,即使在提供漸變的組件上也是如此。所以我對如何有限差分舊的和新的OpenMDAO之間工作的幾個問題:有限差分
- 當舊OpenMDAO沒有自動有限差分也只做到這一點就需要進行優化的輸出和輸入或做到了計算所有輸入和輸出的整個雅可比矩陣?當您將'force_fd'設置爲True時,新的OpenMDAO也會出現同樣的問題。
- 你能提供組件的雅可比的某些部分,並把它有限差分休息嗎?在舊的OpenMDAO中,除非你把missing_deriv_policy ='assume_zero',否則沒有提供任何梯度的有限差異?
所以我認爲你是對的,但我很難實施它。代碼中有許多依賴於其他組件的組件。我很難在所有地方找到所有的有限羣體。每次我嘗試做一個有限差分組時,都會想讓我改變求解器,這樣它就可以完成一個循環。我會盡我所能,但認爲改變新的OpenMDAO做自動有限差分也是非常棒的。謝謝! – Ry10
如果你的模型非常複雜,你不能容易地識別手動提供衍生產品的組件鏈,那麼你可能需要首先解決模型複雜性問題。但另一種選擇是爲所有組件實施衍生產品! –