0

MATLAB を使用して、4D 空間で関数の鞍点を見つけようとしています。より具体的には、関数は f(x,y,z,w) であり、x と y に関する最小値と z と w に関する最大値を見つける必要があります。つまり、4D 空間の鞍点は、x と y で最小、z と w で最大です。変数 x、y、z、および w は、それぞれのドメイン内に制約されます。

fmincon を使用してみましたが、役に立ちませんでした。関数 f(x,y,z,w) は、それが定義されているドメイン内に必ず鞍点を持っている必要があります。私がやっていることは、最初に fmincon を使用して x と y に関して f を最小化し、次に次のステップで fmincon を使用して z と w に関して -f を最小化し、それを繰り返すことです。また、fmincon を使用して f(x,y,z0,w0)-f(x0,y0,z,w) を最小化しようとしました。ここで、(x0,y0,z0,w0) は開始点または前の反復から計算されたものです。 . 後者の方法(適切な重みが含まれていないため、非常に非効率的であることはわかっています)も機能しませんでした。

これを機能させる方法について何かアイデアがあれば、とても感謝しています。よろしくお願いします。

4

1 に答える 1

0

編集 3 : 1 つの問題は、制約付き最適化アルゴリズムである可能性があります。鞍点が 1 つしかない場合は、代替アルゴリズムが問題を解決するはずなので、問題は制約に起因する可能性があります。

fminsearch制約なしで最適化する、Matlab で実装されている Nelder-Mead アルゴリズムを試してください。次に、ソリューションが制約を尊重しているかどうかを確認します。制約が守られていない場合は、制約を考慮せずに目的関数にペナルティを課します (最小化してから最大化するときにペナルティの符号を変更することを忘れないでください)。


x と y の効果を逆にして、(-x、-y、z、w) の関数を最大化することができます。

目標を次のように書き直して、g(x,y,y,z)=f(-x,-y,z,w)g を最大化します。

編集2:最初の方法は役に立たず、すでに試しました

最適化問題について考えると、最小化最大化を同時に (同じステップで) 試みてもあまり意味がありません。

鞍点の検出について考えてみると、解決策は 2 段階のプロセスである可能性があります。

  1. (x0,y0,z0,w0) から始まるドメイン (x,y) 上の関数を最小化します。
  2. たとえば (x1,y1) で収束したら、(x1,y1,z0,w0) から始まるドメイン (z,w) 上の関数を最小化します。

収束・最適条件になるまで繰り返します。

編集: 4 次元で視覚化しませんでしたが、関数 z = f(x,y) で意味があります

于 2016-04-27T11:07:38.977 に答える