入力モデルを解いて結果を一度に返します。コールバックやインクリメンタリティが不要で、解決の進捗状況を追跡する必要がない場合に使用します。
HTTP リクエスト
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
この URL は gRPC Transcoding 構文を使用します。
リクエストの本文
リクエストの本文には、次の構造のデータが含まれます。
JSON 表現 |
---|
{ "solverType": enum ( |
フィールド | |
---|---|
solverType |
省略可。問題を数値的に解く解法タイプ。ソルバーがモデルの特定の特徴をサポートしていない場合、最適化手順は成功しないことに注意してください。 |
model |
必須。解く最適化問題の数学的表現。 |
parameters |
省略可。単一のソルバーを制御するパラメータ。enableOutput パラメータは特別に処理されます。メッセージ コールバックをサポートするソルバーの場合、true に設定すると、サーバーはメッセージ コールバックを登録します。結果のメッセージは SolveMathOptModelResponse.messages に返されます。他のソルバーでは、enableOutput を true に設定するとエラーが発生します。 |
modelParameters |
省略可。入力モデルに固有の単一のソルバーを制御するパラメータ(モデル非依存パラメータについては、SolveParametersProto をご覧ください)。 |
レスポンスの本文
MathOpt での単項遠隔解法のレスポンス。
成功した場合、レスポンスの本文には次の構造のデータが含まれます。
JSON 表現 |
---|
{
"result": {
object ( |
フィールド | |
---|---|
result |
リクエスト内のモデルを解く際の出力の説明。 |
messages[] |
SolveParametersProto.enable_output が使用されている場合、メッセージ コールバックをサポートするソルバーのログ メッセージが格納されます。 |
SolverTypeProto
MathOpt でサポートされている解法。
列挙型 | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solving Constraint Integer Programs(SCIP)ソルバー(サードパーティ)。 LP、MIP、非凸整数の二次問題をサポートします。ただし、LP の二重データは返されません。LP には GLOP を優先する。 |
SOLVER_TYPE_GUROBI |
Gurobi ソルバー(サードパーティ)。 LP、MIP、非凸整数の二次問題をサポートします。通常は最も速いオプションですが、特別なライセンスがあります。 |
SOLVER_TYPE_GLOP |
Google の Glop ソルバーです。 プライマルおよびデュアル シンプレックス方式の LP をサポートします。 |
SOLVER_TYPE_CP_SAT |
Google の CP-SAT ソルバーです。 すべての変数が整数で制限あり(または presolve の後にあると暗示される)である問題をサポートします。連続変数を使用して問題を再スケーリングして離散化するための試験運用版のサポート。 |
SOLVER_TYPE_PDLP |
Google の PDLP ソルバーです。 LP と凸対角の 2 次目標をサポートします。シンプレックスではなく 1 次メソッドを使用します。非常に大きな問題を解決できます。 |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit(GLPK)(サードパーティ)。 MIP と LP をサポート。 スレッドセーフ: GLPK はメモリ割り当てにスレッド ローカル ストレージを使用します。そのため、Solver インスタンスは、作成時と同じスレッドで破棄する必要があります。そうしないと、GLPK がクラッシュします。Solver::Solve() を、Solver の作成に使用したスレッドとは別のスレッドから呼び出すのは問題ありませんが、GLPK では文書化されていないため、使用を避ける必要があります。 プレゾルバを使用して LP を解くと、最適な解が見つかった場合にのみ解(およびバインドされていない光線)が返されます。それ以外の場合は、何も返されません。詳細は、glpk-5.0.tar.gz から入手できる glpk-5.0/doc/glpk.pdf の #40 ページを参照してください。 |
SOLVER_TYPE_OSQP |
Operator Splitting Quadratic Program(OSQP)ソルバー(サードパーティ)。 線形制約と、線形または凸二次目標を使用した連続問題をサポートします。一次メソッドを使用します。 |
SOLVER_TYPE_ECOS |
組み込み円錐ソルバー(ECOS)(サードパーティ)。 LP と SOCP の問題をサポート。内部ポイント方式(バリア)を使用します。 |
SOLVER_TYPE_SCS |
分割円錐ソルバー(SCS)(サードパーティ)。 LP と SOCP の問題をサポート。一次メソッドを使用します。 |
SOLVER_TYPE_HIGHS |
HiGHS ソルバー(サードパーティ)。 LP と MIP の問題をサポートします(コンベックス QP は実装されていません)。 |
SOLVER_TYPE_SANTORINI |
MIP ソルバーの MathOpt のリファレンス実装。 動作が遅いため、本番環境での使用はおすすめしません。LP ソルバーではない(二重情報は返されない)。 |
ModelProto
最適化の問題。MathOpt は以下をサポートしています。 - 連続する決定変数と整数の決定変数(オプションで有限境界も指定可能)。- 線形目標と二次目標(単一または複数の目標)。最小化または最大化。- 次のような制約のタイプ: * 線形制約 * 二次制約 * 2 次円錐制約 * 論理制約 >SOS1 および SOS2 制約 >インジケーターの制約
デフォルトでは、制約は「id-to-data」使用できます。ただし、線形制約はより効率的な「配列の構造体」で表現します。使用できます。
JSON 表現 |
---|
{ "name": string, "variables": { object ( |
フィールド | |
---|---|
name |
|
variables |
|
objective |
モデルの主要な目標。 |
auxiliaryObjectives |
多目的モデルで使用するための補助目標。 マップキー ID は [0, max(int64)) にする必要があります。それぞれの優先度と空でない名前は一意である必要があり、プライマリ
|
linearConstraints |
|
linearConstraintMatrix |
線形制約の可変係数。 この制約に関係する変数が削除された場合、0 に設定されたものとして扱われます。 要件: * linearConstraintMatrix.row_ids は linearConstraints.ids の要素です。* linearConstraintMatrix.column_ids は variables.ids の要素です。* 指定されていない行列エントリはゼロです。* linearConstraintMatrix.values はすべて有限である必要があります。 |
quadraticConstraints |
モデル内の二次制約。
|
secondOrderConeConstraints |
モデル内の 2 次円錐制約。
|
sos1Constraints |
モデル内の SOS1 制約。ゼロ以外の値にできる
|
sos2Constraints |
モデル内の SOS2 制約。
|
indicatorConstraints |
モデル内のインジケーターの制約。これは、バイナリの「インジケーター変数」が「暗黙の制約」が 1 に設定され、保持する必要があります。
|
VariablesProto
以下で使用する「#variables」は、= size(VariablesProto.ids) です。
JSON 表現 |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
フィールド | |
---|---|
ids[] |
負の値でなく、厳密に増加する必要があります。max(int64) 値は使用できません。 |
lowerBounds[] |
長さは #variables に等しく、[-inf, inf) の値にする必要があります。 |
upperBounds[] |
長さは #variables に等しく、(-inf, inf] の値) |
integers[] |
長さは #variables と同じにする必要があります。連続変数の値は false、整数変数の場合は true です。 |
names[] |
設定しない場合、すべて空の文字列とみなされます。それ以外の場合は、長さを #variables に等しくする必要があります。 空でない名前はすべて一意である必要があります。 |
ObjectiveProto
JSON 表現 |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
フィールド | |
---|---|
maximize |
false は最小、true は最大 |
offset |
有限で、NaN は使用できません。 |
linearCoefficients |
決定変数内で線形な ObjectiveProto 用語。 要件: * linearCoegresss.ids は VariablesProto.ids の要素です。* 指定されていない VariablesProto はゼロに対応します。* linearCoprocessings.values はすべて有限である必要があります。* linearCoprocessings.values は 0 にすることもできますが、これは単にスペースを浪費するだけです。 |
quadraticCoefficients |
決定変数内の二次的である客観的な用語。 SparseDoubleMatrixProto メッセージに関する要件に加えて、次の要件があります。* quadraticCoprocessings.row_ids の各要素と quadraticCoprocessings.column_ids の各要素は、VariablesProto.ids の要素である必要があります。* 行列は上三角形でなければなりません。つまり、各 i について、quadraticCo Types.row_ids[i] <= quadraticCo Types.column_ids[i] を指定します。 注: * 明示的に格納されていない用語は係数が 0 です。* quadraticCoprocessings.co を特定する要素 を 0 にすることもできますが、これは単にスペースを浪費するだけです。 |
name |
このフィールドでは、親メッセージの一意性の要件がある場合があります。たとえば、ModelProto.objectives および AuxiliaryObjectivesUpdatesProto.new_objectives をご覧ください。 |
priority |
多目的の問題の場合、他の目標に対するその目標の優先度(低いほど重要)。この値は負でない値にしてください。さらに、モデル内の各目標優先度は、解決時に異なる必要があります。この条件は proto レベルで検証されないため、モデルに同じ優先度の目標が一時的に設定されることがあります。 |
SparseDoubleVectorProto
倍精度ベクトルのスパース表現。
JSON 表現 |
---|
{ "ids": [ string ], "values": [ number ] } |
フィールド | |
---|---|
ids[] |
すべての要素を異なるように(昇順に)並べ替える必要があります。 |
values[] |
ID と同じ長さにする必要があります。NaN を含めることはできません。 |
SparseDoubleMatrixProto
倍精度行列のスパース表現。
行列は、行 ID、列 ID、係数のトリプルとして保存されます。これら 3 つのベクトルの長さは同じである必要があります。すべての i で、タプル (rowIds[i], columnIds[i]) は一意である必要があります。エントリは行メジャーの順に並べる必要があります。
JSON 表現 |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
フィールド | |
---|---|
rowIds[] |
|
columnIds[] |
|
coefficients[] |
NaN を含めることはできません。 |
LinearConstraintsProto
以下で使用するように、「#線形制約」を定義します。= size(LinearConstraintsProto.ids)。
JSON 表現 |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
フィールド | |
---|---|
ids[] |
負の値でなく、厳密に増加する必要があります。max(int64) 値は使用できません。 |
lowerBounds[] |
#linear 制約、[-inf, inf) の値に等しい長さにする必要があります。 |
upperBounds[] |
長さは #linear 制約、(-inf, inf] の値に等しい必要があります。 |
names[] |
設定しない場合、すべて空の文字列とみなされます。それ以外の場合は、#linear 制約と同じ長さにする必要があります。 空でない名前はすべて一意である必要があります。 |
QuadraticConstraintProto
次の形式の 1 つの二次制約: lb <= sum{linearTerms} + sum{quadraticTerms} <= ub。
この制約に関係する変数が削除された場合、0 に設定されたものとして扱われます。
JSON 表現 |
---|
{ "linearTerms": { object ( |
フィールド | |
---|---|
linearTerms |
決定変数において線形な項。 SparseDoubleVectorProto メッセージの要件に加えて、以下が必要です。* linearTerms.ids は VariablesProto.ids の要素です。* linearTerms.values はすべて有限で、NaN は使用できません。 注: * 省略された変数 ID には対応する係数が 0 になります。* linearTerms.values は 0 にすることもできますが、これは単にスペースを浪費するだけです。 |
quadraticTerms |
決定変数における二次方程式。 SparseDoubleMatrixProto メッセージの要件に加えて、以下が求められます。 * quadraticTerms.row_ids の各要素と quadraticTerms.column_ids の各要素は、VariablesProto.ids の要素にする必要があります。* 行列は上三角形でなければなりません。つまり、各 i について、quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i] です。 注: * 明示的に格納されていない用語は係数が 0 です。* quadraticTerms.co コードの要素数はゼロにできますが、これは単にスペースを浪費するだけです。 |
lowerBound |
[-inf, inf] の値を持ち、 |
upperBound |
(-inf, inf] の範囲で、 |
name |
このフィールドでは、親メッセージの一意性の要件がある場合があります。たとえば、ModelProto.quadratic_constraints と QuadraticConstraintUpdatesProto.new_constraints をご覧ください。 |
SecondOrderConeConstraintProto
次の形式の 1 つの 2 次円錐制約:
||argumentsToNorm
||_2 <= upperBound
、
ここで、upperBound
と argumentsToNorm
の各要素は一次式です。
この制約に関係する変数が削除された場合、0 に設定されたものとして扱われます。
JSON 表現 |
---|
{ "upperBound": { object ( |
フィールド | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
このフィールドでは、親メッセージの一意性の要件がある場合があります。たとえば、 |
LinearExpressionProto
線形式のスパース表現(変数の加重合計に定数のオフセットを加えたもの)。
JSON 表現 |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
フィールド | |
---|---|
ids[] |
変数の ID。すべての要素を異なるように(昇順に)並べ替える必要があります。 |
coefficients[] |
ID と同じ長さにする必要があります。値は有限で、NaN にすることはできません。 |
offset |
有限で、NaN にすることはできません。 |
SosConstraintProto
単一の SOS1 制約または SOS2 制約を表すデータ。
この制約に関係する変数が削除された場合、0 に設定されたものとして扱われます。
JSON 表現 |
---|
{
"expressions": [
{
object ( |
フィールド | |
---|---|
expressions[] |
SOS 制約を適用する式: * SOS1: 最大 1 つの要素がゼロ以外の値を取ります。* SOS2:最大 2 つの要素がゼロ以外の値を取り、反復順序付けで隣接している必要があります。 |
weights[] |
空、または式と同じ長さ。空の場合、デフォルトの重みは 1、2、... です。存在する場合、エントリは一意である必要があります。 |
name |
このフィールドでは、親メッセージの一意性の要件がある場合があります。たとえば、ModelProto.sos1_constraints と SosConstraintUpdatesProto.new_constraints をご覧ください。 |
IndicatorConstraintProto
次の形式の単一のインジケーター制約を表すデータ: Variable(indicatorId) = (activateOnZero ?0 : 1) ⇒ belowBound <= 式 <= upperBound。
この制約に関係する変数(インジケーターまたは expression
に表示される変数)が削除されると、その変数はゼロに設定されたものとして扱われます。特に、インジケーター変数を削除すると、activateOnZero
が false の場合はインジケーター制約が空白になり、activateOnZero
が true の場合は線形制約と同等になります。
JSON 表現 |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
フィールド | |
---|---|
activateOnZero |
true の場合、インジケーター変数が値 0 を取る場合、暗黙の制約は満たされる必要があります。それ以外の場合、インジケーター変数が値 1 を取る場合、暗黙の制約は満たされる必要があります。 |
expression |
含まれるモデルに関する有効な線形式である必要があります。* |
lowerBound |
[-inf, inf); の値を持つ必要があります。NaN にすることはできません。 |
upperBound |
値は (-inf, inf] の範囲内になければなりません。NaN にはできません。 |
name |
このフィールドでは、親メッセージの一意性の要件がある場合があります。たとえば、 |
indicatorId |
バイナリ変数に対応する ID、または未設定。設定しない場合、インジケーターの制約は無視されます。設定する場合は、次の条件を満たす必要があります。* VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1.これらの条件は MathOpt では検証されませんが、満たされない場合は解法の際にエラーが返されます。 |
SolveParametersProto
単一のソルバーを制御するパラメータ。
すべてのソルバーに共通する両方のパラメータを含む(例:timeLimit、特定のソルバーのパラメータ(例:gscip。値が共通フィールドとソルバー固有フィールドの両方で設定されている場合は、ソルバー固有の設定が使用されます。
オプションかつ未設定の共通パラメータ、または値が指定されていない列挙型は、ソルバーのデフォルトが使用されていることを示します。
使用されているソルバー以外のソルバーのソルバー固有のパラメータは無視されます。
モデルに依存するパラメータ(変数ごとに分岐優先度が設定されているなど)は ModelSolveParametersProto に渡されます。
JSON 表現 |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
フィールド | |
---|---|
timeLimit |
解法が問題に費やす最大時間(設定されていない場合は無限)。 この値はハードリミットではなく、解決時間がこの値をわずかに超える場合があります。このパラメータは常に基になるソルバーに渡されます。ソルバーのデフォルトは使用されません。
|
enableOutput |
ソルバー実装トレースを出力できるようにします。これらのトレースの場所は、ソルバーによって異なります。SCIP と Gurobi では、標準出力ストリームになります。Glop と CP-SAT では LOG(INFO) となります。 ソルバーがメッセージ コールバックをサポートしており、ユーザーがそのコールバックを登録した場合、このパラメータ値は無視され、トレースは出力されません。 |
lpAlgorithm |
線形計画を解くアルゴリズム。LP_ALGORITHM_UNSPECIFIED の場合は、ソルバーのデフォルト アルゴリズムを使用します。 線形計画ではないが、線形計画がサブルーチンである問題の場合、ソルバーはこの値を使用できます。例:MIP ソルバーは通常、これをルート LP ソルバーにのみ使用し、それ以外の場合はデュアル シンプレックスを使用します。 |
presolve |
メイン アルゴリズムを開始する前に問題を単純化するための努力、またはソルバーのデフォルトの作業レベル(PC が "UNSPECIFIED" の場合)を単純化する努力。 |
cuts |
より強力な LP 緩和(MIP のみ)、またはソルバーのデフォルトの作業レベル(PC が Chrome で指定されていないものの場合)を取得するための取り組み。 注: カットを無効にすると、コールバックで MIP_NODE でカットを追加できなくなる場合があります。この動作はソルバーによって異なります。 |
heuristics |
完全な検索手順(MIP のみ)、またはソルバーのデフォルトの作業レベル(PC が "UNSPECIFIED" の場合)で見られたもの以外の実行可能な解を求める努力。 |
scaling |
数値の安定性、またはソルバーのデフォルトの作業レベル(PC が "UNSPECIFIED" の場合)を改善するために問題を再スケーリングする努力。 |
iterationLimit |
基礎となるアルゴリズムの反復回数の上限(シンプレックス ピボットなど)。具体的な動作は使用するソルバーとアルゴリズムによって異なりますが、多くの場合、決定論的な解決制限になる可能性があります(1 つのスレッドなど、さらなる構成が必要になる場合があります)。 通常、LP、QP、MIP ソルバーでサポートされていますが、MIP ソルバーの場合は nodeLimit も参照してください。 |
nodeLimit |
列挙探索で解けるサブ問題の数の制限(分岐や境界など)。多くのソルバーでは、これを使用して計算を確定的に制限できます(1 つのスレッドなど、さらなる構成が必要になる場合があります)。 通常、MIP ソルバーの場合は、iterationLimit もご覧ください。 |
cutoffLimit |
少なくともカットオフと同じくらい優れた解がないことが証明できる場合、ソルバーは早期に停止します。 早期停止の場合、ソルバーは終了理由 NO_SOLUTION_FOUND と上限 CUTOFF を返します。したがって、追加の解答情報を提供する必要はありません。早期停止がない場合、戻り値には影響しません。 目的がカットオフと完全に等しいソリューションを返す場合は、許容範囲を使用することをおすすめします。 詳細および BestBoundLimit との比較については、ユーザーガイドをご覧ください。 |
objectiveLimit |
ソルバーは、少なくともこれくらい良い解を見つけるとすぐに停止します。終了理由は FEASIBLE で、OBJECTIVE は制限します。 |
bestBoundLimit |
解法は、最適な境界が少なくともこれほど良好であることを証明するとすぐに停止します。終了理由は FEASIBLE または NO_SOLUTION_FOUND、制限は OBJECTIVE です。 詳細と、cutoffLimit との比較については、ユーザーガイドをご覧ください。 |
solutionLimit |
これほど多くの実現可能な解が見つかると、ソルバーは早期に停止します。終了理由は「FEASIBLE(実行可能)」で、解決策は限られています。設定する場合は 0 より大きくする必要があります。最初に見つかった実行可能な解でソルバーを停止するときによく使用されます。返される解答の目標値が保証されるわけではありません。 解法は通常、解の制限を超える解を返しませんが、これは MathOpt では適用されません。b/214041169 も参照してください。 現在、Gurobi と SCIP、値が 1 の CP-SAT のみがサポートされています。 |
threads |
設定する場合は 1 以上にする必要があります。 |
randomSeed |
基になるソルバーの擬似乱数ジェネレータのシード。すべてのソルバーは、LP アルゴリズムでの摂動、タイブレイクアップ ルール、ヒューリスティック修正などのために、擬似乱数を使用します。この値を変えると、ソルバーの動作に顕著な影響を与える可能性があります。 すべてのソルバーにはシードの概念がありますが、有効な値は実際のソルバーによって異なります。- Gurobi: [0:GRB_MAXINT](Gurobi 9.0 では 2x10^9)- GSCIP: [0:2147483647](MAX_INT、kint32max、または 2^31-1)- GLOP: [0:2147483647](上記と同じ)すべての場合で、ソルバーは MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, randomSeed)) に等しい値を受け取ります。 |
absoluteGapTolerance |
MIP ソルバーの(主に)絶対的最適度の許容度。 絶対ギャップは、次の差の絶対値です。 * 見つかった最も実行可能な解の客観的値、 * 検索によって生成された二重境界。ソルバーは、絶対 GAP が exactGapTolerance 以下(設定されている場合)以下になると停止し、TERMINATION_REASON_OPTIMAL を返します。 設定する場合は 0 以上にする必要があります。 「relativeGapTolerance」もご覧ください。 |
relativeGapTolerance |
MIP ソルバーの(主に)相対的な最適度の許容度。 相対 GAP は絶対 GAP を正規化したバージョン(この値は absorlers で定義)、正規化はソルバーに依存します(例:GAP の絶対値を、見つかった最適解の客観的値で割った値。 相対 GAP が相対 GapTolerance(設定されている場合)以下になると、ソルバーを停止して、TERMINATION_REASON_OPTIMAL を返すことができます。 設定する場合は 0 以上にする必要があります。 「completeGapTolerance」もご覧ください。 |
solutionPoolSize |
検索中に最大 |
LPAlgorithmProto
線形計画を解くアルゴリズムを選択します。
列挙型 | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
(基本的な)シンプレックス メソッド。通常、原理と二重の解、原理/デュアルの無限の問題に対する原理/デュアル光線、および基盤を提供できます。 |
LP_ALGORITHM_DUAL_SIMPLEX |
デュアル シンプレックス方式。通常、原理と二重の解、原理/デュアルの無限の問題に対する原理/デュアル光線、および基盤を提供できます。 |
LP_ALGORITHM_BARRIER |
バリア方式は、一般に内部ポイント方式(IPM)とも呼ばれます。通常は、基本的なソリューションとデュアル ソリューションの両方を提供できます。一部の実装では、制限なし/実行不可能な問題でも光線が発生します。基になる解法が「クロスオーバー」しない限り、根拠は示されないで終わります。 |
LP_ALGORITHM_FIRST_ORDER |
1 次の方法に基づくアルゴリズム。これらは通常、一次的な解決策と二重の解決策の両方を生成し、潜在的には一次的および/または二重実現可能性の証明書も生成します。一次的な方法は通常、精度の低い解を提供するため、ユーザーは注意して解の品質パラメータ(公差など)を設定し、解を検証するように注意する必要があります。 |
EmphasisProto
解決中にオプションのタスクに適用される労力レベル(使用方法については SolveParametersProto をご覧ください)。
強調は、ソルバー機能を次のように構成する際に使用します。* ソルバーがこの機能をサポートしていない場合、常に UNSPECIFIED のみが有効になり、その他の設定は通常、無効な引数エラーになります(一部のソルバーは OFF を受け入れる場合もあります)。* ソルバーがこの機能をサポートしている場合: - UNSPECIFIED に設定すると、基になるデフォルトが使用されます。- この機能をオフにできない場合、OFF にするとエラーが返されます。- この機能がデフォルトで有効になっている場合、通常、ソルバーのデフォルトは「中」にマッピングされます。- この機能がサポートされている場合、LOW、MEDIUM、HIGH、VERY HIGH はエラーとならず、最も一致する組み合わせにマッピングされます。
列挙型 | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
ModelSolveParametersProto
JSON 表現 |
---|
{ "variableValuesFilter": { object ( |
フィールド | |
---|---|
variableValuesFilter |
PrimalSolutionProto.variable_values, PrimalRayProto.variable_values の変数がキーとして設定されている、返されるすべてのスパース コンテナに適用されるフィルタ。 要件: * filterIds は VariablesProto.ids の要素です。 |
dualValuesFilter |
DualSolutionProto と DualRay の線形制約をキーとする、返されたすべてのスパース コンテナに適用されるフィルタ(DualSolutionProto.dual_values、DualRay.dual_values)。 要件: * filterIds は LinearConstraints.ids の要素であること。 |
reducedCostsFilter |
DualSolutionProto と DualRay の変数をキーとする、返されたすべてのスパース コンテナに適用されるフィルタ(DualSolutionProto.reduced_costs、DualRay.reduced_costs)。 要件: * filterIds は VariablesProto.ids の要素です。 |
initialBasis |
シンプレックス LP ソルバーのウォーム スタート時に使用する初期ベース(省略可)。設定すると、現在の |
solutionHints[] |
解答のヒント(省略可)。基になるソルバーが 1 つのヒントしか受け入れない場合は、最初のヒントが使用されます。 |
branchingPriorities |
オプションの分岐優先度。値が大きい変数から先に分岐されます。優先度が設定されていない変数には、ソルバーのデフォルトの優先度(通常は 0)が適用されます。 要件: * branchingPriorities.values は有限である必要があります。* branchingPriorities.ids は VariablesProto.ids の要素にする必要があります。 |
SparseVectorFilterProto
このメッセージにより、SparseXxxxVector の特定の部分のクエリ/設定が可能になります。デフォルトの動作では、何も除外されません。一般的な使い方は、解の一部(ゼロ以外の値、または手動で選択した変数値のセットのみ)のみをクエリすることです。
JSON 表現 |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
フィールド | |
---|---|
skipZeroValues |
SparseBoolVectorProto "zero" の場合 |
filterByIds |
true の場合、filteredIds にリストされている ID に対応する値のみを返します。 |
filteredIds[] |
filterByIds が true の場合に使用する ID のリスト。filterByIds が false の場合は空にする必要があります。注: このフィールドが空で、filterByIds が true の場合、結果に情報が含まれないことになります。 |
BasisProto
線形プログラムの解の組み合わせ的特徴付け。
線形計画を解くシンプレックス法は常に「基本的な実行可能解」を返す組み合わせて説明できます。ベースは、すべての変数と線形制約に BasisStatusProto を割り当てます。
例:「min c * x s.t.」という標準的な形式の LP を考えてみましょう。A * x = b x >= 0 で、制約よりも変数が多く、行ランク A です。
n を変数の数、m を線形制約の数とします。この問題の有効な基礎は次のように構築できます。* すべての制約の基本ステータスは「FIXED」です。* A の列が線形独立するように m 個の変数を選び、ステータス BASIC を割り当てる。* 残りの n ~ m 個の変数にステータス AT_LOWER を割り当てます。
この根拠の基本的な解は、ステータス AT_LOWER のすべての変数を下限(すべてゼロ)に固定した、A * x = b という独自の解です。結果として得られる解は、x >= 0 も満たせば、基本実現可能解と呼ばれます。
JSON 表現 |
---|
{ "constraintStatus": { object ( |
フィールド | |
---|---|
constraintStatus |
制約ベースのステータス。 要件: * constraintStatus.ids が LinearConstraints.ids と等しい。 |
variableStatus |
変数ベースのステータス。 要件: * constraintStatus.ids が VariablesProto.ids と等しい。 |
basicDualFeasibility |
これは、次善の LP ソリューションの実現可能性を評価するために MathOpt が使用する高度な機能です(最適なソリューションは常に SOLUTION_STATUS_FEASIBLE ステータスになります)。 一方の LP の場合は、関連付けられた二重のソリューションの実現可能性ステータスと同じにする。両面 LP では、一部のエッジケース(例: 単元素法による不完全な解決)で異なる場合があります。 ModelSolveParametersProto.initial_basis で開始条件を指定する場合、この値は無視されます。SolutionProto.basis によって返されるベースにのみ関係します。 |
SparseBasisStatusVector
基本ステータスのベクトルのスパース表現。
JSON 表現 |
---|
{
"ids": [
string
],
"values": [
enum ( |
フィールド | |
---|---|
ids[] |
すべての要素を異なるように(昇順に)並べ替える必要があります。 |
values[] |
ID と同じ長さにする必要があります。 |
BasisStatusProto
LP ベースでの変数/制約のステータス。
列挙型 | |
---|---|
BASIS_STATUS_UNSPECIFIED |
ステータスなしを表すガード値。 |
BASIS_STATUS_FREE |
変数/制約は自由である(有限の境界はない)。 |
BASIS_STATUS_AT_LOWER_BOUND |
変数/制約が下限にある(有限である必要があります)。 |
BASIS_STATUS_AT_UPPER_BOUND |
変数/制約が上限にある(有限である必要がある)。 |
BASIS_STATUS_FIXED_VALUE |
変数/制約に同一の有限の下限と上限があります。 |
BASIS_STATUS_BASIC |
変数/制約は基本的なものです。 |
SolutionStatusProto
解法が主張する一次解または二次解の実現可能性。
列挙型 | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
ステータスなしを表すガード値。 |
SOLUTION_STATUS_UNDETERMINED |
ソルバーが実現可能性のステータスを主張していない。 |
SOLUTION_STATUS_FEASIBLE |
解法は、その解は実現可能であると主張する。 |
SOLUTION_STATUS_INFEASIBLE |
ソルバーは、その解は実現不可能であると主張する。 |
SolutionHintProto
ソルバーの推奨開始ソリューション。
MIP ソルバーは通常、素情報(variableValues
)のみを必要とし、LP ソルバは素情報および二重情報(dualValues
)の両方を必要とします。
多くの MIP ソルバーは、(1)すべての変数を指定しない部分的な解、または(2)実行不可能な解を扱うことができます。このような場合、ソルバーは通常、サブ MIP を解決してヒントを完成させます。
ヒントがソルバーで使用される方法は、解法、問題のタイプ、使用するアルゴリズムに大きく依存します。ヒントの効果を確認する最も確実な方法は、ヒントがある場合とない場合で、基になるソルバーのログを読み取ることです。
シンプレックス ベースの LP ソルバーでは、通常、解のヒントよりも初期の基礎が好まれます(ヒントを実用可能な基本的な解に変換するためにクロスオーバーする必要があります)。
JSON 表現 |
---|
{ "variableValues": { object ( |
フィールド | |
---|---|
variableValues |
問題の主変数に値を部分的に代入している可能性がある。このサブメッセージのソルバーに依存しない要件は次のとおりです。* variableValues.ids は VariablesProto.ids の要素です。* variableValues.values はすべて有限である必要があります。 |
dualValues |
問題の線形制約に対する値の割り当て(部分的である場合もあります)。 要件: * doubleValues.ids は LinearConstraintsProto.ids の要素です。* doubleValues.values はすべて有限である必要があります。 |
SparseInt32VectorProto
整数のベクトルのスパース表現。
JSON 表現 |
---|
{ "ids": [ string ], "values": [ integer ] } |
フィールド | |
---|---|
ids[] |
すべての要素を異なるように(昇順に)並べ替える必要があります。 |
values[] |
ID と同じ長さにする必要があります。 |
SolveResultProto
プライマル/デュアル ソリューション/レイが複雑な場合のコントラクトは、詳しい説明については termination_reasons.md をご覧ください。
正確な契約が最終決定されるまでは、解除理由に頼るのではなく、解決策/Ray が存在するかどうかを単純に確認するのが最も安全です。
JSON 表現 |
---|
{ "termination": { object ( |
フィールド | |
---|---|
termination |
ソルバーが停止した理由。 |
solutions[] |
将来のソルバーが実装するソリューションの順序についての一般的な契約では、次の順序で順序付けします。1.主要な実現可能な解を含む解を、最適な主要な目的から順に並べます。2. 実行可能な二重の解答がある解答。最適な二重の目的(不明な二重の目標は最悪)の順に並べます。3.残りの解答はすべて、任意の順序で返すことができます。 |
primalRays[] |
無限の主要な改善の方向性、または同等の二重の実現可能性証明書。通常は、TerminationReasonProtos UNBOUNDED と DUAL_INFEASIBLE に提供されます |
dualRays[] |
制限のない二重改善の指示、または同等の主要な実現可能性証明書。通常、TerminationReasonProto INFEASIBLE に対して提供されます。 |
solveStats |
解決プロセスに関する統計情報。例:実行時間、反復処理です |
TerminationProto
Solve() の呼び出しが終了した理由に関するすべての情報。
JSON 表現 |
---|
{ "reason": enum ( |
フィールド | |
---|---|
reason |
値が TERMINATION_REASON_FEASIBLE または TERMINATION_REASON_NO_SOLUTION_FOUND の場合の |
limit |
理由が TERMINATION_REASON_FEASIBLE または TERMINATION_REASON_NO_SOLUTION_FOUND である場合を除き、LIMIT_UNSPECIFIED になります。すべてのソルバーが、終了の原因となった制限を常に特定できるわけではありません。原因を特定できない場合、LIMIT_UNDETERMINED が使用されます。 |
detail |
終了に関する、通常ソルバー固有の追加情報。 |
problemStatus |
主要な問題と二重の問題の実現可能性ステータス。2023 年 7 月 18 日時点では、このメッセージが表示されない可能性があります。欠落している場合、problemStatus は SolveResultProto.solve_stats にあります。 |
objectiveBounds |
最適な目標値の境界。2023 年 7 月 18 日時点では、このメッセージが表示されない可能性があります。見当たらない場合、Objective-Bounds.primal_bound は SolveResultProto.solve.stats.best_primal_bound にあります。Objective-Bounds.dual_bound は SolveResultProto.solve.stats.best_dual_bound にあります |
TerminationReasonProto
Solve() の呼び出しが終了した理由。
列挙型 | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
(数値の許容範囲内で)証明可能な最適な解が見つかりました。 |
TERMINATION_REASON_INFEASIBLE |
この主な問題には、実行可能な解決策がありません。 |
TERMINATION_REASON_UNBOUNDED |
主な問題は実現可能であり、原始光線に沿って任意に適切な解決策を見つけることができます。 |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
主な問題は、実現不可能か無限かのどちらかです。問題のステータスの詳細については、resolveStats.problem_status で確認できます。Gurobi の制限なしステータスがここにマッピングされる場合があるので注意してください。 |
TERMINATION_REASON_IMPRECISE |
問題は上記の基準(Optimal、Infeasible、Unbounded、InfeasibleOrUnbounded)のいずれかで解決されましたが、1 つ以上の許容範囲が満たされていませんでした。原始解/二次解が存在しますが、それらはわずかに実現不可能であるか、(問題が最適に近い場合)最適解の目標と目標の最適解との間のギャップである可能性があります。 ユーザーは引き続き一次解/二次解/解および解統計をクエリできますが、数値の不精度に対処する責任はユーザーにあります。 |
TERMINATION_REASON_FEASIBLE |
オプティマイザーがなんらかの制限に達したため、実現可能な基本的な解決策が返されます。到達した制限の種類の詳細については、SolveResultProto.limit_detail をご覧ください。 |
TERMINATION_REASON_NO_SOLUTION_FOUND |
オプティマイザーがなんらかの制限に達したが、実現可能な基本的な解決策を見つけることができませんでした。到達した制限の種類の詳細については、SolveResultProto.limit_detail をご覧ください。 |
TERMINATION_REASON_NUMERICAL_ERROR |
回復不能な数値エラーが発生したため、アルゴリズムが停止しました。ソリューション情報はありません。 |
TERMINATION_REASON_OTHER_ERROR |
上記で定義されたステータスのいずれにも該当しないエラーのため、アルゴリズムが停止しました。ソリューション情報はありません。 |
LimitProto
Solve() が TerminationReasonProto FEASIBLE または NO_SOLUTION_FOUND で早期に停止すると、ヒットした特定の制限になります。
列挙型 | |
---|---|
LIMIT_UNSPECIFIED |
制限以外で終了した場合に null 値として使用されます(TERMINATION_REASON_OPTIMAL など)。 |
LIMIT_UNDETERMINED |
基になるソルバーでは、どの制限に達したかは明らかになりません。 |
LIMIT_ITERATION |
反復処理が最大回数に達した後に、反復アルゴリズムが停止した(例: シンプレックスまたはバリアの反復)。 |
LIMIT_TIME |
ユーザーが指定した計算時間の経過後にアルゴリズムが停止した。 |
LIMIT_NODE |
分岐バインドのツリーで最大数のノードが探索されたため、分岐バインドのアルゴリズムが停止しました。 |
LIMIT_SOLUTION |
必要な数の解が見つかったため、アルゴリズムが停止しました。MIP では、最初に実現可能な解を解法で返すために、MIP でよく使用されます。 |
LIMIT_MEMORY |
メモリ不足のため、アルゴリズムが停止しました。 |
LIMIT_CUTOFF |
ソルバーは、目標にカットオフを設定して実行しました(例: SolveParameters.cutoff_limit を設定した)。つまり、ユーザーはカットオフより悪い解は望まないことを示し、ソルバーは少なくともカットオフと同じくらい良い解はないと結論付けました。通常、追加の解決策情報は提供されません。 |
LIMIT_OBJECTIVE |
ユーザーが設定した制限よりも優れた解または境界を見つけたため、アルゴリズムが停止しました(SolveParameters.objective_limit と SolveParameters.best_bound_limit をご覧ください)。 |
LIMIT_NORM |
反復処理のノルムが大きすぎるため、アルゴリズムが停止しました。 |
LIMIT_INTERRUPTED |
割り込み信号またはユーザー割り込み要求により、アルゴリズムが停止しました。 |
LIMIT_SLOW_PROGRESS |
解決策に向けて進歩し続けることができなかったため、アルゴリズムが停止しました。 |
LIMIT_OTHER |
上記のいずれにも含まれない制限により、アルゴリズムが停止しました。LIMIT_UNDETERMINED は理由がわからない場合に使用します。LIMIT_OTHER は理由がわかっているものの上記のいずれの方法にも当てはまらない場合に使用します。 TerminationProto.detail には、制限に関する追加情報が含まれている場合があります。 |
ProblemStatusProto
解法が主張する主問題とその二重(または連続緩和の二重)の実現可能性。解法は、主張について証明書を返す必要はありません(例: 解法は、原理の実行可能な解を返さずに原理の実現可能性を主張する場合がある)。この組み合わせのステータスは、解決された問題の実現可能性と制限なしに関する解法の主張を包括的に説明するものです。次に例を示します。
- 原理と二重の問題が実現可能なステータスは、原点が実現可能で制限があり、最適な解がある可能性が高いことを示します(非線形な制約のない問題に対して保証されます)。
- 「まずは実現可能」と「実行不可能」が 2 つある状態は、その主な問題が無限の領域(すなわち、任意に適切な解決策がある)であることを示します。
二重の実行不可能なステータス自体(つまり、不確定なプライマル ステータスを伴う)は、両方の問題が実現不可能な可能性があるため、主な問題が無限であることを意味するわけではありません。また、原理と 2 つの実行可能という状況は、最適解が存在することを示唆する場合がありますが、解法が実際にそのような最適解を実際に見つけたことを保証するものではありません。
JSON 表現 |
---|
{ "primalStatus": enum ( |
フィールド | |
---|---|
primalStatus |
主要な問題のステータス。 |
dualStatus |
二重問題(または連続緩和の二重の問題)のステータス。 |
primalOrDualInfeasible |
true の場合、解法は主問題または二重問題は実現不可能であると主張しますが、どちらが実現可能かはわかりません(または両方が実現可能かどうか)。primal_problem_status = dual_problem_status = kUndefined の場合にのみ true になります。この追加情報は、問題に対する最適な解決策がないことが前処理によって判断された場合(ただし、それが実現不可能か、制限なし、またはその両方によるものか)を判断できない場合によく必要になります。 |
FeasibilityStatusProto
ソルバーが主張している問題の実現可能性ステータス(ソルバーは主張に対して証明書を返す必要はありません)。
列挙型 | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
ステータスなしを表すガード値。 |
FEASIBILITY_STATUS_UNDETERMINED |
ソルバーはステータスを主張しません。 |
FEASIBILITY_STATUS_FEASIBLE |
解法は、問題が実現可能であると主張する。 |
FEASIBILITY_STATUS_INFEASIBLE |
ソルバーは、この問題は実現不可能であると主張する。 |
ObjectiveBoundsProto
最適な目標値の境界。
JSON 表現 |
---|
{ "primalBound": number, "dualBound": number } |
フィールド | |
---|---|
primalBound |
ソルバーは、ソルバーの primal 実現可能性許容度まで primalBound と同等かそれ以上(最小化では小さく、最大化では大きい)であると主張します(以下の警告を参照)。* primalBound は自明(最小化では +inf、最大化では -inf 最大化)は、ソルバーがそのような境界を持たないと主張している場合。* primalBound は、実現可能な最良の初期解の目標よりも最適値により近くなる場合があります。特に、primalBound は、主要な実現可能な解が返されない場合でも重要である可能性があります。警告: 厳密に言えば、* は数値的に実現可能(つまり、解法の許容範囲まで可能)であり、* は客観的値 primalBound を持つという原始解が存在するということです。この数値的に実現可能な解は、やや実現不可能なこともあります。その場合は、primalBound が最適値よりも厳密に優れている可能性があります。主要な実現可能性の許容範囲を primalBound の許容範囲に変換することは容易ではありません。特に、実現可能性の許容範囲が比較的大きい場合(PDLP を使用して解決する場合など)は容易ではありません。 |
dualBound |
ソルバーは、ソルバーの二重実現可能性許容度(dualBound up)よりも最適値が同等か(最小化の場合は大きく、最大化の場合は小さい)と主張します(以下の警告を参照)。* doubleBound は自明(最小化の場合は -inf、最大化の場合は +inf 最大化)であり、ソルバーがそのような境界を持たないと主張している場合、primalBound と同様に、これは一部のソルバーでは、最適な値を返した場合でも発生することがあります。MIP ソルバーは通常、精度が低い場合でも境界を報告します。* 連続問題の場合、dualBound は、実現可能な最良のデュアル ソリューションの目標よりも最適な値に近くなる可能性があります。MIP の場合、dualBound の最初の重要な値の 1 つは、多くの場合、MIP の LP 緩和の最適な値です。* doubleBound は、ソルバーの許容範囲(下記の警告を参照)まで primalBound よりも優れている必要があります(最小化では小さく、最大化では大きく)。警告: * 連続問題の場合、正確に言えば、* は数値的に実現可能(つまり、解法の許容範囲まで可能)であり、* は目的値 doubleBound とする、2 つの解が存在するということです。この数値的に実現可能な解はわずかに実行不可能な可能性があります。その場合、dualBound は最適値と primalBound よりも厳密に劣る場合があります。基本のケースと同様に、2 つの実現可能性の許容範囲を doubleBound の許容範囲に変換することは容易ではありません。特に、実現可能性の許容範囲が比較的大きい場合は困難です。ただし、一部のソルバーでは、数値的により安全な修正版 doubleBound が用意されています。この修正済みバージョンは、ソルバー固有の出力(PDLP の場合は pdlp_output.convergence_information.Corrected_dual_objective など)からアクセスできます。* MIP ソルバーの場合、dualBound は、連続する緩和(LP 緩和など)のために 2 つの解に関連付けられることがありますが、多くの場合、ソルバー実行の複雑な結果であり、通常は LP ソルバーによって報告される境界よりも不正確です。 |
SolutionProto
ソリューションに何が含まれるかは、問題の種類と解法によって異なります。現在の一般的なパターンは 1 です。MIP ソルバーは基本的な解のみを返します。2. シンプレックスの LP ソルバーは、多くの場合、基礎と、その基礎に関連する主力と二つの解を返します。3. 他の連続解法は、多くの場合、解法に依存する形式で接続された原理と二つの解を返します。
要件: * 少なくとも 1 つのフィールドを設定する必要があります。ソリューションを入力してください。
JSON 表現 |
---|
{ "primalSolution": { object ( |
フィールド | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
PrimalSolutionProto
最適化の問題の解決策。
例:たとえば、min c * x s.t という簡単な線形プログラムを考えてみましょう。A * x >= b x >= 0。主な解決策は、x に値を代入することです。上から、A * x >= b、x >= 0 を満たせば実現できます。以下のメッセージ PrimalSolutionProto では、variableValues は x、目的値は c * x です。
JSON 表現 |
---|
{ "variableValues": { object ( |
フィールド | |
---|---|
variableValues |
要件: * variableValues.ids は VariablesProto.ids の要素です。* variableValues.values はすべて有限である必要があります。 |
objectiveValue |
基になるソルバーによって計算された目標値。無限大または NaN にはできません。 |
auxiliaryObjectiveValues |
基になるソルバーによって計算される補助的な目的値。キーは有効な補助目標 ID である必要があります。値を無限大または NaN にすることはできません。
|
feasibilityStatus |
基礎となるソルバーに基づくソリューションの実現可能性ステータス。 |
DualSolutionProto
最適化の問題の二重の解決策。
例:次の一対の一対の線形プログラム対を考えてみます。A * x >= b s.t.y * A + r = c x >= 0 y、r >= 0 です。二重解は (y, r) のペアです。上記の(Dual)の制約を満たしていれば問題ありません。
以下のメッセージでは、y は doubleValues、r は reduceCosts、b * y は客観的値です。
JSON 表現 |
---|
{ "dualValues": { object ( |
フィールド | |
---|---|
dualValues |
要件: * doubleValues.ids は LinearConstraints.ids の要素です。* doubleValues.values はすべて有限である必要があります。 |
reducedCosts |
要件: * reduceCosts.ids は VariablesProto.ids の要素です* lowCosts.values はすべて有限である必要があります。 |
feasibilityStatus |
基礎となるソルバーに基づくソリューションの実現可能性ステータス。 |
objectiveValue |
|
PrimalRayProto
最適化の問題を無限に改善する方向性2 つの最適化問題の実現可能性の証明と同等です。
例:たとえば、min c * x s.t という簡単な線形プログラムを考えてみましょう。A * x >= b x >= 0 である原始光線とは、c * x < を満たす x のことです。0 A * x >= 0 x >= 0 実行可能な解が与えられた場合、原点光線の正の倍数とその解の正の倍数は依然として実行可能であり、より優れた客観的値が得られることを確認します。primal ray は、二重最適化の問題が実現不可能であることを証明します。
以下のメッセージ PrimalRay では、variableValues は x です。
JSON 表現 |
---|
{
"variableValues": {
object ( |
フィールド | |
---|---|
variableValues |
要件: * variableValues.ids は VariablesProto.ids の要素です。* variableValues.values はすべて有限である必要があります。 |
DualRayProto
最適化である問題に対する無限の改善の方向性これと同等のものになります
例:次の一対の一対の線形プログラム対を考えてみます。A * x >= b s.t.y * A + r = c x >= 0 y、r >= 0 です。二重光線は (y, r) のペアで、 b * y > を満たす0 y * A + r = 0 y, r >= 0 2 重の実行可能解に (y, r) の正の倍数を加えると、二重の実現可能性が維持され、目的が改善されることがわかります(二重が無限であることを証明する)。このデュアルレイは、この根本的な問題が実現不可能であることを証明します。
以下の DualRay メッセージでは、y は doubleValues、r は reduceCosts です。
JSON 表現 |
---|
{ "dualValues": { object ( |
フィールド | |
---|---|
dualValues |
要件: * doubleValues.ids は LinearConstraints.ids の要素です。* doubleValues.values はすべて有限である必要があります。 |
reducedCosts |
要件: * reduceCosts.ids は VariablesProto.ids の要素です* lowCosts.values はすべて有限である必要があります。 |
SolveStatsProto
JSON 表現 |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
フィールド | |
---|---|
solveTime |
math_opt で測定される経過時間の実経過時間。おおむね Solver::Solve() 内の時間と同じです。注: モデルの構築が完了した作業は含まれません。
|
problemStatus |
主要な問題と二重の問題の実現可能性ステータス。 |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|