問題タブ [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.
python - scipy.optimize.minimize (COBYLA および SLSQP) は for ループ内で開始された制約を無視します
私は scipy.optimize.minimize を使用して、複雑な貯水池最適化モデルを解決しています (問題は境界方程式と制約方程式の両方によって制約されているため、SQSLP と COBYLA)。1 日 (貯留) ごとに 1 つの決定変数があり、貯留層からの放出は目的関数内の貯留の変化の関数として計算されます。次に、ペナルティを最小限に抑えることを目的として、リリースとストレージのペナルティに基づくペナルティが適用されます (目的関数はすべてのペナルティの合計です)。このモデル内にいくつかの制約を追加して、ストレージの変更を決定変数 x(t+1) と x(t) の差である物理システム制限に制限し、その時間ステップ I( t)。これらの制約は、for ループを使用して制約辞書のリストに追加されます。この for ループの外側に追加された制約は、必要に応じて機能します。ただし、for ループ内で開始される時間に関する制約は、そうではありません。
明らかに問題は複雑なので、問題を説明するために単純なバージョンを再作成しました。この問題には 4 つの決定変数があり、定常状態 (I = 流入は x = 流出と等しくなければならない) および非負性 (つまり、流出 x は負にならない) の制約を使用して、目的関数 (関数と呼んでいます) を最小化しようとします。
for ループで開始された制約は非負の制約ですが、最適化によって決定変数に負の値が与えられます。ただし、定常状態の制約には従います。
次のコードを使用して問題を計算すると、値が適切に制限されます。
私が間違っているアイデアはありますか?他のアプリケーションでも同様に制約が開始されるのを見たことがあるので、それを理解することはできませんが、単純なものだと思います。このコードの本格的なバージョンでは何百もの制約を開始する必要があるため、2 番目の例のようにそれらを書き出すのは理想的ではありません。
r - ポートフォリオ.optim関数を使用したRでの二次計画法のエラー
私は、100 株の毎日の終値で、ショート ポジションが許可されていない、四半期期間から実現された効率的なフロンティアを作成しようとしています。
最初のステップは、各株式の期間の毎日のリターンを計算することです。
次に、{tseries} のポートフォリオ.optim() 関数を使用して二次計画法を実行し、最適なポートフォリオを作成しました。
しかし、この関数を実行すると、次のメッセージが表示されます。
より少ない株式に対して同じコードを実行すると、うまくいくようです:
なぜ私がこの問題に直面しているのか誰にも分かりますか? どうもありがとうございました!
matlab - YALMIP を使用して MATLAB で QP コード化されたソリューションを見つける際の問題
これは私の最初の投稿です!
添付の画像で利用可能な QP アルゴリズムをコーディングしましたが、残念ながら解決策は得られませんでした。私が持っているエラーメッセージは「警告:ソルバーは適用できません(gurobi)」です。gurobi が QP を解決するため、どういうわけか QP を持っていないように見えます。誰でもコードを見ることができますか?
ありがとう!
python - CVXOPT QP Solver: TypeError: 'A' は 1000 列の 'd' 行列でなければなりません
CVXOPT qp ソルバーを使用して、サポート ベクター マシンのラグランジュ乗数を計算しようとしています。
X
これは1000 X 2
行列でY
、同じ数のラベルがあります。ソルバーは次のエラーをスローします。
$ python svm.py
(1, 1000)
Traceback (most recent call last):
File "svm.py", line 35, in <module>
svm(X, Y, 50)
File "svm.py", line 29, in svm
sol = solvers.qp(P, q, G, h, A, b)
File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 4468, in qp
return coneqp(P, q, G, h, None, A, b, initvals, options = options)
File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 1914, in coneqp
%q.size[0])
TypeError: 'A' must be a 'd' matrix with 1000 columns
A の形状を印刷しました。これ(1,1000)
は、ベクトルから再形成した後の行列です。このエラーの正確な原因は何ですか?
matlab - 単純な線形制約による効率的な二次最適化 CVX を使用した MatLab
(フォーマットについて申し訳ありません、私は最善を尽くします)私は解決したい:
ここA
で、 はNxH
論理行列 (およそ半分がゼロ、半分が 1)、b
はすべてのエントリが同じである定数ベクトルです Hx1
(たとえば、は確率の定数ベクトルなので、すべてのエントリは にあります。最適は分布でもあるため、すべて実際には は非常に大きく (例: ) 、比較的小さい (例: ) であることに注意してください。b = (0.1,0.1,0.1,...)
p
Nx1
[0,1]
x
[0,1]
H
2 million
N
150
現在、これを解決するために CVX を使用しています。明示的に、私のコードは次のとおりです。
これにより、正しい結果が得られます。ただし、H
が大きいとかなり遅くなります。私の最適化プログラムの構造 (論理 A、定数制約、制約がなければ分析解がある問題など) を考えると、これにアプローチするより良い方法はありますか? ここで CVX をお勧めしますか?
ご協力ありがとうございました。
prolog - swi プロローグでの最適化
argmax(x,y,z) -1/2(20x^2+32xy +16y^2)+2x+2y を見つけたいとします。
x>=0、y>=0、z>=0、および -x-y+z =0 が条件となります。
偏導関数が 0 に設定されていることはわかっています。
-20x-16y+2=0 および -16x-16y+2 =0
したがって、x= 0、y =1/8、z=1/8 となる可能性があります。
Swi-prologでこれを行うにはどうすればよいですか? 線形解法用のシンプレックス ライブラリがあるようですが、これは 2 次問題ですが、偏導関数はそうではありません。(私は少し混乱しています!)
これは私が持っているものです:
mathematical-optimization - CPLEX: 外部最適化における二次項によるベンダー分解
この問題は、次の場所に相互投稿されています: IBM CPLEX フォーラム
ベンダー分解を使用して 2 段階の最適化問題を解こうとしています。基本的な問題は次のようになります。
min_x (f(x) + min_u(g(u)))
ここで、g(u) は外部決定変数 x の固定値について解くことができる線形計画です。f(x) は x に関して線形の関数です。CPLEX の Python API を使用して特定のコードを実装し、コールバックを使用し、コールバックを使用してオンザフライで制約を生成しました。結果は予想通りです。
ここで問題が少し修正され、f(x) は x に関して 2 次関数になります。ただし、解決策が存在しないと言って問題は終了し、コールバックは呼び出されません。ソリューションが存在しない理由が見つからないので、これは驚くべきことです。コードのデバッグを試みたところ、カット生成のコールバック関数は、目的関数が 2 次でない場合に "mipopt(env, lp)" 関数の後に呼び出されていましたが、現在は呼び出されていません。問題の基本構造を画像として添付します。2 つの問題 (1 つは線形、もう 1 つは 2 次) の唯一の違いは、目的関数に x0^2 項が存在することです。
マスター問題のコードは次のとおりです。
私が本当に驚いた問題の 1 つは、すべての 2 次項の係数が 0 に設定されている場合、本質的に問題が以前と同じになる場合でも、solve()
「解が存在しません」というメッセージが返されることです。
least-squares - 非負の制約付き最小二乗の射影行列を計算する方法は?
R^p にデータ ベクトルzがあり、R^(p*N) にトレーニング データ行列Xがあるとします。ここで、N (N>p) はトレーニング データ行列のサンプル数です。
Xの列にまたがる線形部分空間へのzの射影を見つけたい場合は、次の制約のない問題を解くことができます。
分 || z - X b ||^2.
bの最小二乗推定は ( X X ')^-1 X zです。したがって、部分空間へのzの射影はX ( X X ')^-1 X z = P zと記述できます。P = X ( X X ')^-1 Xは、 P ' = PおよびP ^2 = Pを満たす射影行列です。
bに非負の制約を追加すると、上記の最適化問題は次のようになります。
分 || z - X b ||^2, st bのすべての要素は負ではありません。
ラグランジアンは || です。z - X b ||^2 - v ^T b、vは N 次元ベクトルです。ラグランジアンwrt bの 1 次導関数をゼロに設定すると、 bの推定が得られます: ( X X ')^-1 ( X ' z + 1/2 v )。したがって、部分空間へのzの射影はX ( X X ')^-1 ( X ' z + 1/2 v ) です。
私の質問は、次のように説明できます。
P zを使用して射影X ( X X ')^-1 ( X ' z + 1/2 v ) を近似できる方法はありますか?ここで、PはP ' = PおよびP ^2 = Pを満たす射影行列です。そのようなPをどのように推定できますか?
前もって感謝します!