問題タブ [nlopt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
armadillo - アルマジロデータを使用したNLopt
NLopt目的関数は次のようになります。
xは最適化されるデータ、gradは勾配のベクトル、my_func_dataは追加のデータを保持します。
ボイド*my_func_dataにアルマジロ行列AとBを提供することに興味があります。
アルマジロのメンバー機能をいじった
これにより、行列AとBへのポインターが得られます。これらのポインターへの別のポインターを定義することを考えていました。
次に、*CombineMatをmy_func_dataとして渡します。
- これはそれを行う方法ですか?不器用なようです...
- CombineMatが渡されたら、myfunc内にいるときに、void型を使用可能なものに再キャストするにはどうすればよいですか?
答え
私はここから助けを借りて自分の質問に答えました。
myfunc内に入ると、Cのデータは次のようにArmadillo行列に変換して戻すことができます。
c++ - メンバ関数への関数へのポインタ
数値関数 myfunc へのポインタを取り、その最小値を見つける関数 set_min_objective を持つライブラリ (nlopt) を使用したいと考えています。適切に初期化されたメンバー関数を含むクラスを作成したいと思います。set_min_objective は、特定のインスタンス (以下の例では myP) で最適なものを見つけます。呼び出しシーケンスは次のとおりです。
そして、私は次のようなものを使いたいです:
これをコンパイルするときに発生するエラーは次のとおりです。
set_min_objective が myP.f を function への通常のポインタとして受け入れるようにする最も簡単な解決策は何でしょうか? myP.f と myfunc の引数と戻り値の型は同じであることに注意してください。
ありがとうございました、
JD
c++ - Windows フォームでの NLOpt
Windows フォーム アプリケーションで nlopt ライブラリ (http://ab-initio.mit.edu/wiki/index.php/NLopt_Tutorial) を使用しようとすると、深刻な問題が発生します。コンソール アプリケーションで完全に動作する次の名前空間を作成しました。
単純な非線形制約付き最小化問題を最適化します。この名前空間を Windows フォーム アプリケーションで使用しようとすると、問題が発生します。何らかの理由で「x」を空のポインターとして認識し、その場所にアクセスしようとするとエラーが発生する myfunc で常に未処理の例外が発生します。WindowsフォームがCLRを使用しているという事実が原因で問題が発生していると思いますが、解決できるかどうかはわかりません。Visual Studio 2008 を使用しており、テスト プログラムは単純なコンソール プロジェクト (正常に動作) と Windows フォーム プロジェクト (前述のエラーの原因) です。私のテスト コードは、提供されたリンクの C のチュートリアルに基づいています。私は、コンソール アプリケーションで再び正常に動作する C++ バージョンを試しましたが、Windows フォーム アプリケーションでデバッグ アサーションに失敗したというエラーが発生しました。
だから私の質問は次のとおりだと思います:私はWindowsフォームアプリケーションを使用しており、NLOptを使用したいと考えています。これを機能させる方法はありますか?
c++ - C ++での境界制約付き最小二乗最適化の関数?
私は Visual C++ 2010 Express を使用するのはかなり初めてですが、基本は初めてではなく、外部ライブラリを使用して境界制約付き最小二乗最適化を実行する方法を理解しようとしています。
問題を簡単に言えば、線形最小二乗法を使用して、次の行列 W を見つけたいと考えています。
どこ
制約は W の要素の値にあります。要素を「w」と呼びましょう。
MATLAB でこれを行うのはかなり簡単ですが、これを C++ で実装する必要があります。行列 X と T を定式化するために、コードの最初のビットを実装しました。
Visual C++ 2010 Express で境界制約付き最小二乗法最適化を達成するために使用できるライブラリ/関数はありますか? ALGLIB、LEVMAR、および NLOPT を使用してみました。
ALGLIB では、配列を独自のデータ型で定義する必要があります。
LEVMAR には、インストールと使用する必要がある機能に関する情報がほとんどありません。
NLOPT にはこれに対する機能がないようです。また、ここに記載されている手順を使用して lib ファイルを生成し、VC++ で lib ファイルとソース ファイルをリンクした後でも、動作しないようです。
誰でも提案を手伝ってもらえますか? これは MATLAB で簡単に実装できますが、残念ながら C++ を使用する必要があります。
python - OSX でのインポート _nlopt.pyd エラー
nlopt の手順に従い、_nlopt.pyd を取得しました
nlopt.py を使用しようとすると(次のようなコードがあります)
そしてそれは与えます
_nlopt.pyd がフォルダーにあると確信しています
そして、それはWindows7で動作します
何か助けはありますか?
python - NLOpt のベクトル値制約
最小化問題に等式と不等式の制約を追加しようとしています。nlopt Python APIを使用しています。
特に、いくつかのベクトル値の制約を追加したいと思います。私のコードは次の例のようになります。
これは、nlopt wiki の指示に正確に従います。これを実行すると、次のようになります。
nlopt - nlopt_add_equality_constraint が機能しない
プログラムを書きますが、
最小化: f = x^2 + y^2
制約: c: x-1 < 0 ceq: x+y-5=0
私は答えを得ました: x = 0.12219 y = 5.678 これは ceq を満たしていません。修正方法がわかりません。
私の完全なソースコードはこちら
主な機能は次のとおりです。
アップデート!!!!!ドキュメントを読んだ後、アルゴリズム「MMA」が「等しい制約」をサポートしていないことがわかりました。
「MMA」を「SLSQP」に置き換えると、この問題が解決する場合があります。
c++ - C++ でライブラリを追加するには?
C++ は初めてで、VS 2013 を使用して NLopt ライブラリを C++ に追加しようとしています。NLopt は非線形最適化ライブラリです ( http://ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference #Compiling_and_linking_your_program_to_NLopt )。NLopt には DLL ファイルと .h ファイルがあり、それらを機能させる方法がわかりません。このライブラリをインポートする方法についての簡単なガイドを誰かに教えていただければ幸いです。
前もって感謝します。
python-2.7 - Python API を使用して最適化の失敗後に NLOpt の結果を取得する
NLOpt の Python インターフェイスを使用して最適化を実行しています。何度か繰り返した後、特定の時点で nlopt.RoundoffLimited 例外が発生します。ドキュメント ( http://ab-initio.mit.edu/wiki/index.php/NLopt_Reference#Error_codes_.28negative_return_values.29 ) によると、このような例外の後でも、「最適化は通常、有用な結果を返します」。実際に中間結果を表示するにはどうすればよいですか? 次のようなコードを実行しています:
を使用して目的の値をうまく取得できopt.last_optimize_result()
ますが、この目的の値になるパラメーターを取得するための API 呼び出しが見つかりません。
ありがとう!