Gurobiバージョン12.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=J=H=\emptyset\) ならば、モデルは混合整数線形計画問題(MILP)になります。
バージョン固有の情報
非凸な数理モデル
Gurobi 9.0以来、一般的な非凸の二次制約および非凸の二次目的関数(双線形制約や二次の等式制約を含む)がサポートされています。二次制約行列\(Q\)と\(Q_i\)はそれぞれ半正定値(PSD)行列である必要はありません。
しかしながら、一般に非凸なモデルは凸なモデルよりも求解が困難です。可能な限り、モデルを凸な問題として再定式化することをお勧めします。
バージョン11.0で変更
バージョン11.0より前は、非線形な制約や目的関数を含むモデルの最適化を有効化するためにNonConvexパラメータを2に設定する必要がありました。バージョン11.0以降でNonConvexの振る舞いが変更され、デフォルトパラメータで非凸なモデルの求解を実行できるようになりました。詳細はレファレンスマニュアルのQuadratic Constraintsを参照してください。
非線形制約 (Nonlinear Constraints)
バージョン11.0.xまで
Gurobi11.0.xまでは、後述の関数制約(Function Constraints)を用いることで、「ある決定変数が、別の一つの変数を取る非線形関数に相等しい」という形に限り非線形関数を扱えました。
バージョン12.0で変更
Gurobi12.0以降で、非線形関数 \( f_j \) は多変量合成関数として定義できるようになりました。同バージョンで導入されたPython APIのnlfuncヘルパーや、C・C++・,NET・JavaのExpression Treesを使うことで実現できます。
関数制約 (Function Constraints)
バージョン11.0で変更
Gurobi 11.0からは、FuncNonlinearパラメータを1に設定するか、各制約のFuncNonlinear属性を1に設定することでFunction Constraintsを厳密に扱うことができるようになりました。詳細は、リファレンスマニュアルのFunction Constraints with Dynamic Piecewise-Linear Approximationを参照してください。
Gurobi 11.0より前はFunction Constraintsは区分線形制約によって近似されていました。詳細はリファレンスマニュアルのFunction Constraints with Static Piecewise-Linear Approximationを参照してください。
バージョン12.0で変更
Gurobi 12.0からは、Function constraintsに対しデフォルトで動的区分線形近似(Dynamic Piecewise-Linear Approximation)が適用されるよう変更されました。
バージョン13.0で変更
Gurobi 13.0からは、Function Constraintsが非推奨となりました。代わりにNonlinear constraintsの使用を推奨しています。
Gurobi 13.0から非推奨となったFunction Constraintsに関連する機能は次の通りです:
- 関数やメソッド:
addGenConstrExp(C,C++,Java,.NET,Python),addGenConstrLog(C,C++,Java,.NET,Python), など. - 属性値: FuncPieceError, FuncPieceLength, FuncPieceRatio, FuncPieces, FuncNonlinear.
- パラメータ: FuncPieceError, FuncPieceLength, FuncPieceRatio, FuncPieces, FuncNonlinear.