1

OpenMDAOで非線形最適化問題を実行していますが、これは最適解を知っています (解を検証したいだけです)。fromSLSQPのドライバー構成を使用しています。ScipyOptimizeropenmdao.api

3 つの設計変数 A、B、C、それぞれの設計空間 (A の A最小から A最大など)、および単一の目的関数 Z があります。前述のように、3 つの設計変数すべての最適値を知っています。 (それらを A sol、 B sol、 C solと呼びましょう) Z の最小値を生成します (Z solと呼びます)。

この問題を実行すると、Z solよりも大きい Z の値が得られます。これは、最適解ではないことを示しています。C solを Cに割り当て、設計変数として A と B のみを使用して問題を実行すると、Z solにはるかに近く、実際には以前に取得した値よりも小さい Z の値が得られます (3 つの設計変数のシナリオで) )。

なぜ私はこの行動を観察しているのですか? ScipyOptimizer両方のケースで同じ解決策を与えるべきではありませんか?

編集:いくつかのコードを追加..

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し、(私が持っているソリューションから) 最適な値を割り当てると、かなり正しい結果、つまり前のシナリオよりも少ない目的関数の答えが得られます。

4

1 に答える 1

0

実際のモデルを見ないと、確かなことは言えません。ただし、一般に、ローカル オプティマイザーのソリューションが開始条件に依存しないというわけではありません。これは、問題が凸状である場合にのみ当てはまります。したがって、あなたの問題は凸状ではなく、ローカルオプティマに遭遇していると思います。

SLSQP の代わりに COBYLA オプティマイザーを使用することで、これを回避することができます。私の経験では、ローカル オプティマをうまく飛び越えることができます。しかし、あなたの問題が本当にでこぼこしている場合は、 pyopt-sparse ライブラリから NSGA-II または ALPSO に切り替えることをお勧めします。これらはヒューリスティック ベースのオプティマイザーであり、「最大の丘」を見つけるのに優れていますが、必ずしもその頂上まで登るとは限りません (厳密には収束しません)。また、ヒューリスティック アルゴリズムは一般に、勾配ベースの方法よりもコストがかかります。

于 2016-04-19T22:55:39.373 に答える