問題タブ [quadratic-programming]
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.
r - R で制約付き二次計画法を解く
私は R が大好きですが、時々頭が痛くなります...
私は次の単純な二次最小化問題を持っています。これは、Excel で定式化してすぐに解決できます (画像をクリックして拡大)。
と
問題自体は非常に簡単です: の最適な組み合わせを(w1^2+w2^2)/2
見つけて最小化したいと考えています。w1
w2
b
Y*(w1*X1+w2*X2+b) >= 1
この種の問題を解決するためのパッケージがあることは知っていquadprog
ますが、直感的ではないため、問題を正しく指定することができません :-( 言いたくないのですが、これらのような最適化問題を指定するには Excel の方が適しているようです。 :-((((
私の質問
R (どのパッケージでも) で解決できるように上記の問題を正しく定式化する方法と、プログラムがw1
, w2
andの正しい値に到達するb
方法 (上の図でわかるように)。リンクを投稿するだけでなく、実際に機能するコードを提供してください。コードにコメントを付けて、なぜそのようなことをするのかが明確になるとよいでしょう。ありがとうございました!
必要なデータは次のとおりです。
補遺
一部の人々は、コードを提供するように私の要求に腹を立てました (単なるリンクではありません)。私はそれをお詫びし、これまでの回答で良いアプローチが見つからなかったという理由を述べました。そのより深い理由はb
、目的関数ではなく制約のみにあるという意味で、問題が異常であるということです。したがって、この質問はSOに適していると今でも思います。
matlab - MATLAB: 行列要素の合計を最小化する行列の省略版を見つける
151行151列の行列がありA
ます。これは相関行列であるため1
、主対角線上に s があり、主対角線の上下に値が繰り返されます。各行/列は人を表します。
与えられた整数に対して、要素の総和を最小化する相関行列n
が残るように、人を追い出して行列のサイズを縮小しようとします。n-by-n
省略されたマトリックスを取得することに加えて、元のマトリックスから追い出されるべき人々の行番号 (または列番号 - それらは同じ番号になります) も知る必要があります。
出発点としてA = tril(A)
、相関行列から冗長な非対角要素を削除します。
したがって、上記n = 4
の仮想的な5行5列の行列がある場合、人物 5 は行列から追い出されるべきであることは明らかです。
また、人 1 は多くの負の相関に寄与し、行列要素の合計を下げるため、追い出されるべきではないことも明らかです。
sum(A(:))
マトリックス内のすべてを合計すると理解しています。ただし、可能な限り最小の答えを検索する方法については非常に不明です。
同様の質問Finding sub-matrix with minimum elementwise sumに気付きました。これには、受け入れられた答えとしてブルートフォースソリューションがあります。その答えは問題なく機能しますが、151 行 151 列の行列では実用的ではありません。
編集:反復することを考えていましたが、縮小された行列の要素の合計を本当に最小化するとは思いません。以下の4行4列の相関行列を太字で示し、端に行と列の合計を示します。n = 2
最適な行列は、人物 1 と 4 を含む2行2列の恒等行列であることは明らかですが、反復スキームによれば、反復の最初のフェーズで人物 1 を追い出してしまうため、アルゴリズムは次のような解を作成します。最適ではありません。私は常に最適な解を生成するプログラムを書きました。n または k が小さい場合はうまく機能しますが、151 行 x 151 列から最適な75行75 列の行列を作成しようとすると、151行列 私のプログラムが終了するには数十億年かかることに気付きました。
これらのn を選択する kの問題は、再計算を回避する動的プログラミングのアプローチで解決できる場合があることを漠然と思い出しましたが、これを解決する方法がわかりません。
他に選択肢がない場合、または最良のプログラムでも正確な解を生成するのに 1 週間以上かかる場合は、速度のために精度を犠牲にしてもかまいません。ただし、正確な解が生成される場合は、プログラムを最大 1 週間実行させていただきます。
プログラムが合理的な時間枠内で行列を最適化できない場合、この特定の種類のn を選択した kタスクを合理的な時間枠内で解決できない理由を説明する答えを受け入れます。
r - 二分決定変数とシミュレートされたデータベースによる最適化
シミュレートされた観測のデータ フレームがあり、特定のレベルのリスクに対して最大限の成功を収めるための最適化を考えようとしています。問題は、制約でプログラムする方法がわからないことです。これは私の DF のサブセットです。行はチームで、X1:X10 は成功と失敗のシミュレートされた結果です。
目標は最大化することですsum(colMeans(DF))
以下のコメントに基づいて、解決しようとしている数学を書き出すことにしました。これを行うにはいくつかの異なる方法がありますが、調査によると思われますが、制約を記述する方法がわかりません。私のより大きなデータセットは 10,000 X 10,000 です。
1 つのアプローチ
目的関数 = 最大 (平均 (合計 (シミュレーション [i])
制約:
観測はバイナリです
観察 = 4
SD(ポートフォリオ)) < X 、または最小(成功) > 3
その他のアプローチ:
目的関数 = 最小 (SD (合計 (シミュレーション [i])) または最大 ((平均 (合計 (シミュレーション [i]))/(SD (ポートフォリオ)
制約:
観測はバイナリです
観察 = 4
Average(sum(シミュレーション[i])) > 5
それで、私はこれをもう少しいじっていて、どこかに行き始めています。
この変更を行う bvec = c(1, rep(0|-.25, n))
と、基本的にすべて 0 の解が得られます。
tseries を使用して、これらの結果を得ました。
tseries の重み制約を取得できれば、それも機能します。
制約の編集に関するヒントは、最小成功率も制約として追加したいと考えています。ありがとう、
optimization - svm デュアル フォームの最小化
最小化する c-svm 目的関数を実装するには、次の方程式を最小化する必要があり ます。上記の目的関数を最小化するために確率的準勾配降下アルゴリズムを実装することになっていることはわかっていますが、その方法がわかりません。
次のアルゴリズムは、上記の最適化問題の確率的部分勾配降下を実装する正しい方法ですか? 確率的サブ勾配降下の私の実装
python - LIBLINEAR または LIBSVM を使用したカスタム SVM 最適化
PU 学習タスクがあり、この論文でそれを解決するための例外的なアルゴリズムのように見えるものを見つけました: https://www.cs.uic.edu/~liub/publications/ICDM-03.pdf
パート 5 で説明したように、「偏った」SVM の非標準的な定式化を実装したいと考えています。
これは、2 つのパラメーター C+ と C- を使用して、正のエラーと負のエラーに異なる重みを付けます。
この問題に既存の SVM ソルバーを使用して、レッグワークを促進するだけでなく、最適な時間の複雑さを確保することも考えました。これは、特徴空間とサンプル数の両方が非常に大きいためです (したがって、LIBLINEAR を使用したいのです)。
上記のようなカスタム損失関数を指定する方法はありますか?
助けてくれてありがとう。
javascript - JavaScript で quadprog を使用するとポートフォリオ最適化の制約が正しくない
numeric.js で quadprog を使用して、このポートフォリオの最適化 (最適な重みを見つける) で何が間違っているのかわかりません。
私のポートフォリオの制約は単純です。重みの合計は 1 になり、すべての重み (3 つの資産のそれぞれについて) は 0 から 1 の間でなければなりません (空売りなし、レバレッジなし)。制約が認識されず、重みが非常に高くなります (さらに負の値になります)。
ヒントをいただければ幸いです。ありがとう