我在OpenMDAO中運行非線性優化問題,我知道最佳解決方案(我只是想驗證解決方案)。我使用SLSQP
驅動程序配置ScipyOptimizer
從openmdao.api
。ScipyOptimizer給出不正確的優化結果
我有3個設計變量A,B和C,它們各自的設計空間(A 分鐘至A 最大爲A等)和單個目標函數Z.正如我說,我知道的對於所有三個設計變量的最優值(讓我們稱之爲甲溶膠,B 溶膠和C 溶膠)其產生Z的最小值(稱之爲ž溶膠)。
當我運行這個問題時,我得到一個大於Z的值,它表示它不是最優的解決方案。當我將C sol分配給C並且僅以A和B作爲設計變量運行該問題時,我得到的Z值更接近於Z,這比我之前得到的(在3設計變量場景)。
我爲什麼要觀察這種行爲?在兩種情況下,都不應該提供相同的解決方案嗎?
編輯:添加一些代碼..
from openmdao.api import IndepVarComp, Group, Problem
from openmdao.api import ScipyOptimizer
class RootGroup(Group):
def __init__(self):
super(RootGroup, self).__init__()
self.add('desvar_f', IndepVarComp('f', 0.08))
self.add('desvar_twc', IndepVarComp('tool_wear_compensation', 0.06))
self.add('desvar_V', IndepVarComp('V', 32.0))
# Some more config (adding components, connections etc.)
class TurningProblem_singlepart(Problem):
def __init__(self):
super(TurningProblem_singlepart, self).__init__()
self.root = RootGroup()
self.driver = ScipyOptimizer()
self.driver.options['optimizer'] = 'SLSQP'
self.driver.add_desvar('desvar_f.f', lower=0.08, upper=0.28)
self.driver.add_desvar('desvar_twc.tool_wear_compensation', lower=0.0, upper=0.5)
self.driver.add_desvar('desvar_V.V', lower=32.0, upper=70.0)
self.driver.add_objective('Inverse_inst.comp_output')
# Other config
此代碼給了我不正確的結果。當我從兩個類中刪除desvar_twc
,併爲其指定最佳值(來自我的解決方案)時,我得到相當正確的結果,即目標函數的答案比先前的方案更小。
你能告訴我們任何代碼嗎? –
是的,我將代碼片段放在一起,使其更加清晰。實際的代碼更大,這就是爲什麼我沒有把它放在帖子裏。我將很快編輯這篇文章。 –
太棒了!這總是很長的路:) –