最適化セミナーのご案内

3.2.1 問題全体にかかわるもの(solveLP,solveQP共通)

nuoptParam* options Numerical Optimizerの求解制御パラメータ(0:デフォルト)
int n 変数の総数
int m 制約式の総数(等式,不等式含む)
int minimize 最小化かどうかのフラグ(零以外:最小化,0:最大化)
double* x0 変数の初期値(長さ:n
double* bL 変数の下限ベクトル(長さ:n
double* bU 変数の上限ベクトル(長さ:n
int* ibL 変数の下限の有無(長さ:n,非零:あり,0:なし)
int* ibU 変数の上限の有無(長さ:n,非零:あり,0:なし)
double* cL 制約式の下限ベクトル(長さ:m
double* cU 制約式の上限ベクトル(長さ:m
int* icL 制約式の下限の有無(長さ:m,非零:あり,0:なし)
int* icU 制約式の上限の有無(長さ:m,非零:あり,0:なし)

 

 ここで紹介する引数はsolveLPsolveQPに共通で,同じ意味を持ちます.最初の引数はNumerical Optimizerの求解制御パラメータを与えるものですが,0を渡すことができます.その場合にはパラメータとしてデフォルトの設定を用いるという意味になります.通常はデフォルトで問題ありませんが,パラメータの指定を行う場合には,

nuoptParam myparam;
myparam.method = "asqp"; // 求解メソッドの指定
solveQP(&myparam,...);

のようにして,myparamのメンバ(個別のパラメータに相当する)に値を設定して,solveQPにアドレスを渡します.詳細は「6.7Numerical Optimizerオプション」を参照ください.

 

 変数の上下限が存在しない場合には,対応するibLまたはibUのコンポーネントを0にします.例えばn = 3の場合で

\begin{align*}& 0 \le x_{1} \\ & x_{2} \le 1 \\ & 2 \le x_{3} \le 3\end{align*}

という上下限を表現する場合には次のように設定します.

配列の添字 bL bU ibL ibU
0 0 任意 0以外 0
1 任意 1 0 0以外
2 2 3 0以外 0以外

 

 C++では配列の添字は0はじまりですので,1番目の変数は添字0の場所に対応します.配列の「任意」と書かれた場所は無視されます.「0以外」という場所は0以外の任意の値です.制約式についても全く同様です.

 変数の固定,および等式制約は上限と下限を一致させることによって表現します.ibLibUicLicUの場所にNULLポインタを渡すことが許されています.その場合,すべて0が格納された配列を渡すのと同じ意味になります.

 初期値に対応するx0にNULLポインタを渡すことができます.その場合には初期値はデフォルトのものを用いるという意味になります.


 

 

上に戻る