4

編集:horchlerのコメントが私を始めるのに役立ったので、質問をより具体的に編集しました。

最適化分析を行うために使用しているExcelのデータがあります。Excel では、ソルバーを使用すると簡単です。数式を含むセルを選択し、変更が必要なセルを選択して制約を追加し、最小化できます。しかし、Matlab の最適化プロセスに関しては、私は迷っています。ドキュメントは、f(x) = -(x1)(x2)(x3) のような単純な 1 行の関数を分析する最適化問題の例のみを提供しているようです。これらの例を自分のケースに適用する方法がわかりません。

私が最大化しようとしている関数は比較的複雑です。入力として、多数のスカラー変数と、計算で使用されるデータを含む複数の構造体を受け取ります。

私の問題は、3 つのスカラー変数を変更することによって関数の値を最大化しようとしていることですが、他の入力変数は一定のままにしておきます (それらはデータであるため)。より具体的には、私の関数は次のようになります。

function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)

変数 w1、w2、w3 のみを変更して x を最大化したいと考えています。言い換えれば、Matlab に x を最大化する w1、w2、および w3 の値を教えてもらいたいのですが、他のすべての変数はそのままにしておきます。どんな洞察も大歓迎です。

4

1 に答える 1

5

制約なし

fminconおそらく、MATLAB を使用して、またはMATLABで解決策を見つけることになるでしょうfminunc。たとえば、 を使用するfminuncと、その構文が少し乱雑になるため、「NameOfFunction.m」という名前の別のファイルでコスト関数を定義することから始めることができます。

function cost = NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3)
% Your code goes here, just remember that you return a scalar-valued cost from
% this function.

fminuncand similar は、このコスト関数を最小化しようとすることに注意してください。それを最大化する必要がある場合は、最後に最終コストを掛けるだけ-1です。次に、メイン ファイルに関数へのハンドルを作成します。

h = @(w)NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3);

最適w化する変数のベクトルは次のとおりです。

w = [w1, w2, w3];

wこれは基本的に、関係する限り、最適化したいものの関数として、すべての入力で関数をマスクしますfminunc。これにより、パラメーターabcStructureStructure2、およびを、それらに触れることなくStructure3コスト関数に渡すことができます。vector の初期推定値を使用してハンドルを呼び出すことができるようになりました。NameOfFunctionfminuncfminuncw

w0 = [w1_init, w2_init, w3_init];
[w, fval] = fminunc(h, w0);

そして、コスト関数を最小化する(最小値を探すことに注意してfminuncください)ベクトルの最適値を見つける必要があります。w

制約あり

この場合、使用する可能性がfmincon最も高いでしょう。制約が、最適化する各パラメーターの上限と下限の形式である場合は、それらをベクトルに入れます。

ub = [w1_upper, w2_upper, w3_upper];
lb = [w1_lower, w2_lower, w3_lower];

を使用する前と同じハンドルを呼び出しますfmincon

[w, fval] = fmincon(h, w0, [], [], [], [], lb, ub);

上記の 4 つ[]の s は、使用していないパラメーターの単なるプレースホルダーです。fminconより複雑な制約も処理できます。詳細については、ドキュメント (このディスカッションの最初にリンクされています) を参照してください。

于 2013-07-02T02:01:30.820 に答える