1

私はInteriorPointSolverを使用して、線形制約のある標準的な二次計画問題を解決しようとしています(ここにある定義に従って)。私の問題には線形項がありません(定義の「c」ベクトル)。すべての変数でSetCoefficient(Int32、Rational、Int32、Int32)を使用して「Q」マトリックスを設定しています(「goal」行をvidRowとして渡します)。InteriorPointSolverが二次計画問題の標準定義で定義されている目的関数を最小化していると仮定して正しいですか?

x ^ T * Q * xを自分で計算すると(ソルバーから取得したxの最適解を使用して)、ソルバーが最適な目的関数値であると主張する値とは大幅に異なる値が得られるため、これを尋ねます( Statistics.PrimalまたはGetValue(goal)を介して)。計算とソルバーの最適値が一致するのは、Qに単位行列を使用する場合のみです。何か間違った設定をしている、または最小化されている関数を正確に理解していないと推測しています。

私は見つけることができるすべてのドキュメントを調べましたが、内部ポイントソルバーが最小化している関数の正確な説明を見つけることができません。誰かが私を正しい方向に導くことができますか?

4

1 に答える 1

2

それが判明したとして、

SetCoefficient(goal, 2.0, x, y)

とまったく同じ効果があります

SetCoefficient(goal, 2.0, y, x)

両方の呼び出しの効果は、目的関数にx * y項の係数を設定することであり、2番目の呼び出しは、最初の呼び出しで設定した係数を単純に上書きします。ソルバーは、xy項をyx項とは異なるものとして扱いませ。また、係数を追加しません(私が予想したように)。したがって、目的関数に4xy項を含めることが目標である場合は、次の呼び出しを行う必要があります。

SetCoefficient(goal, 4.0, x, y)

上記の2つの呼び出しの代わりに。

于 2012-01-26T19:01:59.740 に答える