Gurobiバージョン11.0 以降では、線形制約、二次制約(凸および非凸)、二次錐制約、非線形関数制約を持つモデルを解くことができます。連続変数と整数変数の組合せは問いません。標準形は以下の通りです:
\begin{alignat}{3} \min_x\ x^\top Q x + c^\top x &+ d && && \textrm{(Objective)} \\ \textrm{s.t.} \qquad\qquad\enspace Ax &= b && && \textrm{(Linear constraints)} \\x^\top Q_i x + c_i^\top x &\le d_i && \forall i \in I && \textrm{(Quadratic constraints)} \\ f_j(x) &= 0 && \forall j \in J && \textrm{(Nonlinear constraints)} \\ \ell \le x &\le u && && \textrm{(Bound constraints)} \\ x_k &\in \mathbb{Z} && \forall k \in K && \textrm{(Integrality constraints)} \\ x_h &\in \textrm{second-order cones} \quad && \forall h \in H && \textrm{(Cone constraints)} \\ x_m &\in \textrm{SOS} && \forall m \in M \qquad && \textrm{(Special-ordered set constraints)} \end{alignat}
上記のすべての要素が必要なわけではありません。例えば \(Q=0\) かつ \(I=K=H=\emptyset\) ならば、モデルは混合整数線形計画問題(MILP)になります。
Gurobi 9.0より前では、モデルの凸性を担保するために行列\(Q\)と\(Q_i\)はそれぞれ半正定値(PSD)行列である必要がありました。また、バージョン11.0より前は非線形な制約や目的関数を含むモデルの最適化を有効化するために NonConvex パラメータを2に設定する必要がありました。詳細はレファレンスマニュアルの Quadratic Constraints を参照してください。
Gurobi 11.0より前では非線形関数\(f_j\)は区分線形制約によって近似されていました。Gurobi 11.0からは、FuncNonlinear parameter を1に設定するか、各制約の FuncNonlinear attribute を1に設定することで厳密に扱うことができるようになりました。詳細は、リファレンスマニュアルの General Constraints と Function Constraintsのセクションを参照してください。
コメント
0件のコメント
記事コメントは受け付けていません。