4

Excelソルバーは何千もの最適化で実行するのが非常に遅いため(スプレッドシートをインターフェイスとして使用するため)、C ++で同様の(問題固有の)ソルバーを実装しようとしています(Visual Studio 2010を使用して、Winで) 7 64ビットプラットフォーム)。私はVBAのDeclareステートメントを介してDLLを含め、すでにこれを行った経験があるので、これは問題ではありません。

私の問題は、経験的データと、非線形であるが滑らかなターゲット関数との間の二乗誤差の合計を最小化することであり、問​​題には、非負性(X> = 0)または正の制約(たとえば、X> = 0.000000001)が含まれます。 、Xは決定変数を示します。

堅牢で実績のある実装を探しています。確立されたライブラリの一部である可能性があります。たとえば、私はすでにALGLIBが何を保管しているかを調べましたが(http://www.alglib.net/optimization/を参照)、それらのアルゴリズムの1つだけが制限付き制約を受け入れるようです。でも、それが何の価値があるのか​​わからないので、意見を集めようとしています。

または、別の注意点として、たとえば、私の制約を満たさないすべての中間解を拒否することによって、ALGLIBのLevenberg-Marquardtアルゴリズムをそのような基本的な制約で拡張することをお勧めしますか?(それはそれをしないと思いますが、それでも尋ねる価値があります)

4

3 に答える 3

2

不等式制約のサポートを追加する、Levenberg-Marquardt メソッドの修正があります。そのようなアルゴリズムを実装する 1 つのライブラリについて知っています: levmar (GPL)。

既存のアルゴリズムを変更したい場合、悪い解決策を拒否することはできず、最適化が行き詰まる可能性があります。しかし、たとえば X > 0.1 の場合、X の代わりに t^2+0.1 を使用できるように、変数置換を行うことができます。私はこの方法を、私のプログラムに組み込みのボックス制約がないための回避策として使用しています。以下は、 Peter Gans による 化学科学におけるデータ フィッティングからの引用です

于 2011-04-17T14:16:50.210 に答える
0

OPTIF9 と UNCMINが標準的な選択方法であることがわかります。Fortran をわざわざコンパイルしたくない場合は、それらをライブラリにリンクし、C++ から呼び出すことができるはずです。

探索空間を制限する方法は、ロジット関数などによってパラメーターを変換することです。

于 2011-04-17T15:40:36.813 に答える
0

Microsoft Solver Foundationを調べましたか? Express Edition は無料で、.NET 4.0 dll が付属しています。かなり使いやすいと思いました。一方で、あなたが話している問題がどれほど大きいかはわかりません。Express Edition の変数の数にはいくつかの制限があります。

于 2011-07-25T00:36:11.393 に答える