2016-09-06 124 views
0

我正在使用openMDAO版本1.7.1,ScipyOptimizer,SLSQP,fd,step_size 1.0e-4。約束不滿意

我將設計變量縮放到[0,1],並在設計變量範圍內得到收斂結果。但是,一個約束條件仍然不能滿足。例如,我將一個參數的約束設置爲[0,1.5],但最終結果爲1.73。我嘗試了兩種不同的收斂誤差極限,0.01和0.001,但是這個約束並沒有得到滿足。

關於爲什麼發生這種事情的任何想法?我的設置是否錯誤?可能的錯誤?如果沒有,如何避免?

任何反饋意見。

回答

1

優化器是否在其輸出中報告(在選項中將'disp'設置爲True)違反約束並且優化失敗?如果是這樣,那麼優化器出於某種原因不能解決問題。這可能是模型中某個組件的計算錯誤,也可能是此優化器不適合的問題。將不得不看到問題了解更多。

使用像SLSQP這樣的漸變優化器,有時候這個問題是導數計算中的一個錯誤。有一對夫婦,你可以用它來幫助找到錯誤的組件衍生工具:

prob.check_partial_derivatives() 

這將遍歷模型中的所有組件和分析衍生品採用有限差分進行比較。

prob.check_total_derivatives() 

這計算所有目標和約束的總衍生物與設計變量並將其與全模型有限差分進行比較。

請注意,在評估分析中是否存在錯誤時,您必須牢記有限差分準確度的限制。

+0

您好Kenneth,感謝您的意見和建議。我沒有將'disp'設置爲True,並且我現在重新運行True的代碼,並希望在幾天後獲得結果。然而,我看到優化停止與這些信息:「積極的方向派生詞(退出模式8),迭代:8,功能評估:13,梯度評估:4,優化完成」。退出模式8是否表示失敗?謝謝。 –

+0

這絕對是一個優化失敗。基本上它找不到任何地方去。如果您在組件中提供瞭解析導數,那麼derivs中可能存在錯誤,您可以使用上面提到的函數來找到它。除此之外,如果您的設計變量的幅度大小差異很大,那麼也可能會出現縮放問題,您希望將它們縮小到相同的數量級。同樣的事情也適用於你的約束。 –

0

我走在同一條路上,遇到了我的問題。在檢查衍生產品後(我確實修復了一些錯誤)後,我仍然遇到了收斂問題,最後改變了優化器(pyOptSparse(SLSQP)),甚至只是使用了不同的初始點。

+0

是的,一般來說SLSQP是一個弱優化器。 SNOPT是10000倍更好,但它不是開源的。儘管我們通常在內部使用SNOPT幾乎可以處理任何sqp應用程序。 –