Method: mathopt.solveMathOptModel

解析輸入模型並一次傳回結果。如果不需要回呼、漸進式,也不需要追蹤解題進度,就可以使用這個類型。

HTTP 要求

POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel

這個網址使用 gRPC 轉碼語法。

要求主體

要求主體的資料會採用以下結構:

JSON 表示法
{
  "solverType": enum (SolverTypeProto),
  "model": {
    object (ModelProto)
  },
  "parameters": {
    object (SolveParametersProto)
  },
  "modelParameters": {
    object (ModelSolveParametersProto)
  }
}
欄位
solverType

enum (SolverTypeProto)

選用設定。用來以數值表示問題的解題工具。請注意,如果解題工具不支援模型中的特定功能,最佳化程序就會失敗。

model

object (ModelProto)

必要欄位。以數學表示要解決的最佳化問題。

parameters

object (SolveParametersProto)

選用設定。用於控制單一解題的參數。系統會特別處理 enableOutput 參數。如果解題工具支援訊息回呼,只要將其設為 true,伺服器就會註冊訊息回呼。產生的訊息會在 SolveMathOptModelResponse.messages 中傳回。如果是其他解題工具,將 enableOutput 設為 true 將導致錯誤。

modelParameters

object (ModelSolveParametersProto)

選用設定。用於控制輸入模型特有單一解題的參數 (如需模型獨立參數,請參閱 SolveParametersProto)。

回應主體

使用 MathOpt 的一元遠距解題回應。

如果成功,回應主體會含有以下結構的資料:

JSON 表示法
{
  "result": {
    object (SolveResultProto)
  },
  "messages": [
    string
  ]
}
欄位
result

object (SolveResultProto)

處理要求中模型的輸出內容說明。

messages[]

string

如果已使用 SolveParametersProto.enable_output,就會包含支援訊息回呼的解題工具記錄訊息。

SolverTypeProto

MathOpt 支援的解題工具。

列舉
SOLVER_TYPE_UNSPECIFIED
SOLVER_TYPE_GSCIP

解決限制整數程式 (SCIP) 解析器 (第三方)。

支援 LP、MIP 和非卷積整數二次方程式問題。不過,系統不會傳回到達網頁的雙重資料。建議使用 GLOP 處理到達網頁。

SOLVER_TYPE_GUROBI

Gurobi 解題工具 (第三方)。

支援 LP、MIP 和非卷積整數二次方程式問題。通常是最快速的選項,但提供特殊授權。

SOLVER_TYPE_GLOP

Google 的 Glop 解題工具

支援使用基本和雙 Simplex 方法的 LP。

SOLVER_TYPE_CP_SAT

Google 的 CP-SAT 解題工具。

支援所有變數均為整數且有限制 (或暗示在 pResolve 後) 的問題。實驗性支援,利用連續變數來重新調度資源及分散問題。

SOLVER_TYPE_PDLP

Google 的 PDLP 解析工具。

支援到達網頁和凸對對角二次方程式目標。使用第一排序方法,而非 Simplex。可以解決非常大型的問題。

SOLVER_TYPE_GLPK

GNU Linear Programming Kit (GLPK) (第三方)。

支援 MIP 和 LP。

執行緒安全:GLPK 會使用執行緒本機儲存空間進行記憶體配置。因此,在建立求解器執行個體時,必須刪除到相同的執行緒,否則 GLPK 會停止運作。相較於用來建立求解器的執行緒,呼叫 求解器::Solve() 似乎沒問題,但 GLPK 並未記錄該執行緒,因此應避免這麼做。

使用 p 解析器解析 LP 時,只有在找出最佳解決方案時,才會傳回解法 (和無邊框)。否則系統不會傳回任何結果。詳情請參閱 glpk-5.0/doc/glpk.pdf 第 40 頁 (來自 glpk-5.0.tar.gz)。

SOLVER_TYPE_OSQP

操作人員分割二次程式 (OSQP) 解題工具 (第三方)。

支援線性限制和線性或卷積二極目標連續問題。使用第一順位方法。

SOLVER_TYPE_ECOS

內嵌 Conic 求解器 (ECOS) (第三方)。

支援 LP 和 SOCP 問題。使用內部點方法 (障礙)。

SOLVER_TYPE_SCS

分割圓錐解析器 (SCS) (第三方)。

支援 LP 和 SOCP 問題。使用第一順位方法。

SOLVER_TYPE_HIGHS

HiGHS 求解器 (第三方)。

支援到達網頁和 MIP 問題 (未執行 convex QP)。

SOLVER_TYPE_SANTORINI

MathOpt 的 MIP 解題工具實作。

速度緩慢/不建議在正式環境中使用。並非 LP 解析器 (未傳回雙資訊資訊)。

ModelProto

最佳化問題。MathOpt 支援:- 具有選用有限界限的連續與整數決策變數。- 線性和二次目標 (單一或多個目標),最小化或最大化。- 限制型別的數量,包括:* 線性限制 * 二次限制 * 第二順位限制 * 邏輯限制 >SOS1 與 SOS2 限制條件 >指標限制

根據預設,限制會以「ID 到資料」的形式呈現地圖。不過,我們能以更有效率的「結構式結構」表示線性限制格式。

JSON 表示法
{
  "name": string,
  "variables": {
    object (VariablesProto)
  },
  "objective": {
    object (ObjectiveProto)
  },
  "auxiliaryObjectives": {
    string: {
      object (ObjectiveProto)
    },
    ...
  },
  "linearConstraints": {
    object (LinearConstraintsProto)
  },
  "linearConstraintMatrix": {
    object (SparseDoubleMatrixProto)
  },
  "quadraticConstraints": {
    string: {
      object (QuadraticConstraintProto)
    },
    ...
  },
  "secondOrderConeConstraints": {
    string: {
      object (SecondOrderConeConstraintProto)
    },
    ...
  },
  "sos1Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "sos2Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "indicatorConstraints": {
    string: {
      object (IndicatorConstraintProto)
    },
    ...
  }
}
欄位
name

string

variables

object (VariablesProto)

objective

object (ObjectiveProto)

模型中的主要目標,

auxiliaryObjectives

map (key: string (int64 format), value: object (ObjectiveProto))

用於多目標模型的輔助目標。

對應金鑰 ID 必須採用 [0, max(int64)]。每個優先順序及每個非空值的名稱都不得重複,且與主要 objective 不同。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

linearConstraints

object (LinearConstraintsProto)

linearConstraintMatrix

object (SparseDoubleMatrixProto)

線性限制的變數係數。

如果這項限制的相關變數遭到刪除,系統會將其視為設為零。

需求條件:* LinearConstraintMatrix.row_ids 是 LinearConstraints.ids 的元素。* LinearConstraintMatrix.column_ids 是變數.ids 的元素。* 未指定 0 的矩陣項目。* LinearConstraintMatrix.values 必須全部為有限值。

quadraticConstraints

map (key: string (int64 format), value: object (QuadraticConstraintProto))

模型中的二次限制。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

secondOrderConeConstraints

map (key: string (int64 format), value: object (SecondOrderConeConstraintProto))

模型中的第二順位錐體限制。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

sos1Constraints

map (key: string (int64 format), value: object (SosConstraintProto))

模型中的 SOS1 限制,限制最多只能有一個 expression 為非零。選用的 weights 項目是解析器用於 (希望) 更快收縮的實作詳細資料。更詳細地說,解題工具得以 (或不能) 使用這些權重來選擇會產生「平衡」的分支決策子項節點

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

sos2Constraints

map (key: string (int64 format), value: object (SosConstraintProto))

模型中的 SOS2 限制,這會限制最多兩個 expression 的項目為非零,並依照順序排列。如果沒有提供 weights,這個順序會是 expressions 清單中的線性順序;如果提供 weights,則會以遞增順序排列這些值。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

indicatorConstraints

map (key: string (int64 format), value: object (IndicatorConstraintProto))

模型中的指標限制,強制規定若二進位「指標變數」設為 1,然後是「默示限制」必須先處於訴訟保留狀態。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

VariablesProto

如下方使用,我們定義「#variables」= size(VariablesProto.ids)。

JSON 表示法
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "integers": [
    boolean
  ],
  "names": [
    string
  ]
}
欄位
ids[]

string (int64 format)

必須為非負數,並嚴格增加。無法使用 max(int64) 值。

lowerBounds[]

number

長度應等於 #variables,[-inf, inf] 中的值。

upperBounds[]

number

長度應等於 #variables,其中的值是 (-inf, inf])。

integers[]

boolean

長度應等於 #variables。連續變數的值為 false,整數變數則為 true。

names[]

string

如未設定,系統會假設為所有空白字串。否則,長度應等於 #variables。

所有非空白名稱皆不得重複。

ObjectiveProto

JSON 表示法
{
  "maximize": boolean,
  "offset": number,
  "linearCoefficients": {
    object (SparseDoubleVectorProto)
  },
  "quadraticCoefficients": {
    object (SparseDoubleMatrixProto)
  },
  "name": string,
  "priority": string
}
欄位
maximize

boolean

false 代表最小化,真值最大

offset

number

必須為有限且不得為 NaN。

linearCoefficients

object (SparseDoubleVectorProto)

是對決策變數構成線性的 ObjectiveProto 字詞,

規定:* LinearCoefficiencys.ids 是 VariablesProto.ids 的元素。* 未指定 VariablesProto。* LinearCoefficiencys.values 都必須是「有限」* LinearCoefficiencys.values 可以是零,但這會浪費空間。

quadraticCoefficients

object (SparseDoubleMatrixProto)

決策變數的二次目標字詞。

除了 SparseDoubleMatrixProto 訊息的規定之外:* quadraticCo 常見 efficiencys.row_ids 的每個元素和 QudraticCo 常見 efficiencys.column_ids 的元素都必須是 VariablesProto.ids 的元素。* 矩陣必須位於上方三角型:每個 i 的二次方程式為二元係數.row_ids[i] <= quadraticCoefficiencys.column_ids[i]。

附註:* 未明確儲存的字詞的係數為零。* quadraticCoefficiencys.coefficiencys 的元素可以為零,但這只會浪費空間。

name

string

上層郵件在這個欄位上可能會有唯一性要求;例如,請參閱 ModelProto.objectives 和 AuxiliaryObjectivesUpdatesProto.new_objectives。

priority

string (int64 format)

如為多目標問題,則這個目標相對於其他目標的優先順序 (越低越重要)。這個值必須為正數。此外,在解決問題時,模型中的每個目標優先順序都必須不同。這個狀況尚未在 proto 層級經過驗證,因此模型可能會暫時設定優先順序相同的目標。

SparseDoubleVectorProto

雙倍向量的稀疏表示法。

JSON 表示法
{
  "ids": [
    string
  ],
  "values": [
    number
  ]
}
欄位
ids[]

string (int64 format)

必須以所有元素分別排序 (依遞增順序排列)。

values[]

number

長度必須與 ID 相同。不得包含 NN。

SparseDoubleMatrixProto

雙精度矩陣的稀疏表示法。

矩陣會儲存為列 ID、欄 ID 和係數的三倍。這三個向量的長度必須相同。所有 i 的元組 (rowIds[i], columnIds[i]) 都不得重複。項目必須按照列主要順序排列。

JSON 表示法
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
欄位
rowIds[]

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

不得包含 NN。

LinearConstraintsProto

如下方範例所示,「#線性限制」= size(LinearConstraintsProto.ids)。

JSON 表示法
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "names": [
    string
  ]
}
欄位
ids[]

string (int64 format)

必須為非負數,並嚴格增加。無法使用 max(int64) 值。

lowerBounds[]

number

長度應等於 #Linear 限制條件 ([-inf, inf] 中的值)。

upperBounds[]

number

長度應等於 #Linear 限制條件,其中的值為 (-inf、inf]。

names[]

string

如未設定,系統會假設為所有空白字串。否則,長度應等於 #Linear 限制條件。

所有非空白名稱皆不得重複。

QuadraticConstraintProto

以下列格式表示的單一二次限制:lb <= total{LinearTerms} + total{quadraticTerms} <= ub。

如果這項限制的相關變數遭到刪除,系統會將其視為設為零。

JSON 表示法
{
  "linearTerms": {
    object (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
欄位
linearTerms

object (SparseDoubleVectorProto)

決策變數中屬於線性的字詞。

除了 SparseDoubleVectorProto 訊息的規定外,還要求:* LinearTerms.ids 是 VariablesProto.ids 的元素。* LinearTerms.values 必須為限值,而不是 NaN。

附註:* 省略的變數 ID 的對應係數為零。* LinearTerms.values 可以是零,但這樣做只會浪費空間。

quadraticTerms

object (SparseDoubleMatrixProto)

決策變數中形成二次的字詞。

除了 SparseDoubleMatrixProto 訊息的要求外,還要求:* quadraticTerms.row_ids 的每個元素和 quadraticTerms.column_ids 的每個元素都必須是 VariablesProto.ids 的元素。* 矩陣必須位於上方三角形:每個 i 的 QudraticTerms.row_ids[i] <= quadraticTerms.column_ids[i]。

附註:* 未明確儲存的字詞的係數為零。* quadraticTerms.coefficiencys 的元素可以為零,但這只是浪費空間。

lowerBound

number

值必須是 [-inf, inf],且小於或等於 upperBound

upperBound

number

值必須是 (-inf、inf],且大於或等於 lowerBound)。

name

string

上層郵件在這個欄位上可能會有唯一性要求;例如,請參閱 ModelProto.quadratic_constraints 和 QuadraticConstraintUpdatesProto.new_constraints。

SecondOrderConeConstraintProto

下列格式的單一第二順位限制:

||argumentsToNorm||_2 <= upperBound

其中 upperBoundargumentsToNorm 的每個元素都是線性運算式。

如果這項限制的相關變數遭到刪除,系統會將其視為設為零。

JSON 表示法
{
  "upperBound": {
    object (LinearExpressionProto)
  },
  "argumentsToNorm": [
    {
      object (LinearExpressionProto)
    }
  ],
  "name": string
}
欄位
upperBound

object (LinearExpressionProto)

argumentsToNorm[]

object (LinearExpressionProto)

name

string

上層郵件在這個欄位上可能會有唯一性要求;例如,請參閱 ModelProto.second_order_cone_constraintsSecondOrderConeConstraintUpdatesProto.new_constraints

LinearExpressionProto

線性運算式的稀疏表示法 (變數加權總和,加上常數偏移)。

JSON 表示法
{
  "ids": [
    string
  ],
  "coefficients": [
    number
  ],
  "offset": number
}
欄位
ids[]

string (int64 format)

變數 ID。必須以所有元素分別排序 (依遞增順序排列)。

coefficients[]

number

長度必須與 ID 相同。值必須是有限值,不得為 NaN。

offset

number

必須為有限值,且不得為 NaN。

SosConstraintProto

代表單一 SOS1 或 SOS2 限制的資料。

如果這項限制的相關變數遭到刪除,系統會將其視為設為零。

JSON 表示法
{
  "expressions": [
    {
      object (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
欄位
expressions[]

object (LinearExpressionProto)

要套用 SOS 限制的運算式:* SOS1:最多一個元素接受非零值。* SOS2:最多兩個元素只接受非零的值,且必須依照重複順序排列。

weights[]

number

運算式不得留空或長度相同。如果留空,預設權重為 1、2 ... ...如有此值,則項目不得重複。

name

string

上層郵件在這個欄位上可能會有唯一性要求;例如,請參閱 ModelProto.sos1_constraints 和 SosConstraintUpdatesProto.new_constraints。

IndicatorConstraintProto

代表下列格式單一指標限制的資料:Variable(indicatorId) = (activateOnZero ?0 : 1) ⇒ lowBound <=運算式 <= maxBound。

如果刪除與這項限制相關的變數 (指標或在 expression 中顯示),系統會將其視為設為零。特別是,刪除指標變數代表如果 activateOnZero 為 false,指標限制為空,且如果 activateOnZero 為 true,則指標限制等同於線性限制。

JSON 表示法
{
  "activateOnZero": boolean,
  "expression": {
    object (SparseDoubleVectorProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string,
  "indicatorId": string
}
欄位
activateOnZero

boolean

如果為 true,則如果指標變數的值為 0,則默示限制必須具有。否則,如果指標變數使用值 1,則該隱含限制必須有效。

expression

object (SparseDoubleVectorProto)

必須為包含模型的有效線性運算式:* SparseDoubleVectorProto 中的所有所述條件都必須為有限,* expression.idsVariablesProto.ids 的子集。expression.values

lowerBound

number

值必須是 [-inf, inf);但不得為 NaN。

upperBound

number

值必須包含 (-inf, inf],不得為 NaN)。

name

string

上層郵件在這個欄位上可能會有唯一性要求;例如,請參閱 ModelProto.indicator_constraintsIndicatorConstraintUpdatesProto.new_constraints

indicatorId

string (int64 format)

對應至二進位變數或未設定的 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 (LPAlgorithmProto),
  "presolve": enum (EmphasisProto),
  "cuts": enum (EmphasisProto),
  "heuristics": enum (EmphasisProto),
  "scaling": enum (EmphasisProto),
  "iterationLimit": string,
  "nodeLimit": string,
  "cutoffLimit": number,
  "objectiveLimit": number,
  "bestBoundLimit": number,
  "solutionLimit": integer,
  "threads": integer,
  "randomSeed": integer,
  "absoluteGapTolerance": number,
  "relativeGapTolerance": number,
  "solutionPoolSize": integer
}
欄位
timeLimit

string (Duration format)

解題工具應在問題上停留的時間上限 (如未設定,則為無限)。

這個值並非硬性限制,解析時間可能會稍微超過這個值。這個參數一律會傳遞至基礎解題工具,不使用解題工具預設值。

持續時間以秒為單位,最多 9 個小數位數,結尾為「s」。範例:"3.5s"

enableOutput

boolean

允許列印解析器實作追蹤記錄。這些追蹤記錄的位置取決於解題工具。SCIP 和 Gurobi 會是標準輸出串流。針對 Glop 和 CP-SAT,這將會 LOG(INFO)。

請注意,如果解題工具支援訊息回呼,且使用者為其註冊回呼,則系統會忽略此參數值,並且不輸出任何追蹤記錄。

lpAlgorithm

enum (LPAlgorithmProto)

解析線性程式的演算法。如果 LP_ALGORITHM_UNSPECIFIED,請使用解題工具預設演算法。

如果是非線性程式,但線性程式設計屬於子常式的問題,解題工具可以使用這個值。例如:MIP 解析器通常只會用於根 LP 解析 (否則使用雙簡簡單 x)。

presolve

enum (EmphasisProto)

建議您在啟動主要演算法之前簡化問題;如果 EMPHASIS_UNSPECIFIED ,則可簡化解答工具預設人力等級。

cuts

enum (EmphasisProto)

盡可能提高 LP 的放鬆程度 (僅限 MIP),或者如果 EMPHASIS_UNSPECIFIED ,則會改用解題工具預設功等級。

注意:停用切割功能可防止回呼在 MIP_NODE 新增切割點,這是特定解題工具。

heuristics

enum (EmphasisProto)

除了完整的搜尋程序 (僅限 MIP) 之外,您更願意找出可行的解決方案;如果您 EMPHASIS_UNSPECIFIED ,則能找到解題工具預設功用等級。

scaling

enum (EmphasisProto)

為提升數值穩定性,盡可能增加數值穩定性,或是如果 EMPHASIS_UNSPECIFIED 則努力解決問題。

iterationLimit

string (int64 format)

限制基礎演算法的疊代 (例如 Simplex 透視)。具體行為取決於解題工具和演算法,但通常可以設定確定性的解題數 (可能需要進一步設定,例如一個執行緒)。

LP、QP 和 MIP 解析器通常支援 LP、QP 和 MIP 解析器,但如果是 MIP 解析器,則請參閱 nodeLimit。

nodeLimit

string (int64 format)

限制列舉搜尋中解決的子問題數量 (例如分支和繫結)。對許多解析器而言,這可用來決定性限制運算 (可能需要進一步設定,例如一個執行緒)。

通常適用於 MIP 解題工具,另請參閱 iterationLimit。

cutoffLimit

number

如果解答工具無法證明沒有基本解決方案的功效至少與截止點相同,就會提早停止。

提前停靠站時,解題工具會傳回終止原因 NO_SOLUTION_FOUND 和限制 CUTOFF,不需要提供任何額外的解決方案資訊。如果沒有提早停靠站,對傳回值沒有影響。

如果您希望系統傳回目標完全為截止時間的解決方案,建議您採用容忍度。

如需更多詳細資料,以及與 bestBoundLimit 搭配使用的比較結果,請參閱使用手冊。

objectiveLimit

number

解題工具在找到解決方案至少達到這個缺點時,就會立即停止,以終止原因並限制目標。

bestBoundLimit

number

求解器在確認最大界限等於或等於上限後,就會立即停止。解決原因為 FEASIBLE 或 NO_SOLUTION_FOUND,並限制 OBJECTIVE。

詳情請參閱使用手冊,以及與 CutoffLimit 的比較結果。

solutionLimit

integer

在找出這個可行的解決方案後,求解器會盡早停止,產生終止原因 FEASIBLE 並限制 SOLUTION。設定時必須大於零。通常用來在第一個可行的解決方案中,使用解題工具停止解題。請注意,我們不保證任何傳回的解決方案可達到目標價值。

求解工具通常不會傳回超過解題數的上限,但這並非 MathOpt 強制實行的數目,另請參閱 b/214041169。

目前支援 Gurobi 和 SCIP,以及僅支援值為 1 的 CP-SAT。

threads

integer

設為 1 後必須大於 1。

randomSeed

integer

針對基礎解題工具中的偽隨機號碼產生器的種子。請注意,所有解題工具都會使用虛擬隨機數字來選取項目,例如 LP 演算法的擾動、處理分項規則,以及進行啟發式修正。更動會對解題工具的行為產生顯著影響。

雖然所有解題工具都有種子的概念,但有效的值取決於實際的解題工具。- 古羅比:[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

number

MIP 解題工具的絕對最佳容忍度 (主要為)。

絕對 GAP 是指差異的絕對值:* 找到的最佳解決方案目標值 * 搜尋產生的雙重界值。當絕對 GAP 的絕對值達到絕對值 (設定時),解題工具就會停止,然後傳回 TERMINATION_REASON_OPTIMAL。

如果有設定的話,必須大於 0。

另請參閱相對 GapTolerance。

relativeGapTolerance

number

MIP 解析器的相對最佳容忍度 (主要為)。

相對 GAP 是絕對 GAP 的正規化版本 (根據 absoluteGapTolerance 所定義),正規化與解題工具相關,例如絕對 GAP 除以最佳可行解決方案的目標價值

當相對 GAP 達到最大的相對 GapTolerance (設定時) 時,解題工具即可停止,並傳回 TERMINATION_REASON_OPTIMAL。

如果有設定的話,必須大於 0。

另請參閱 AboluteGapTolerance。

solutionPoolSize

integer

在搜尋時繼續使用 solutionPoolSize 個解決方案。解決方案集區通常有兩個函式:(1) 如果解題工具可以傳回多個解題,這個數字會限制系統傳回的解題數。(2) 部分解題工具可能會使用解決方案集區中的解決方案執行經驗法則,因此變更這個值可能會影響演算法的路徑。強制解題工具填滿解決方案集區,例如:與 n 個最佳解決方案產生關聯,需要進一步的解題工具專屬設定。

LPAlgorithmProto

選取用來解決線性程式的演算法。

列舉
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX (原始) Simplex 方法,通常可以提供初級和雙重溶液、初級/雙光光束,以及基本/雙重解法。
LP_ALGORITHM_DUAL_SIMPLEX 雙 Simplex 方法,通常可以提供初級和雙重溶液、初級/雙光光束,以及基本/雙重解法。
LP_ALGORITHM_BARRIER 屏障,通常也稱為內部點法 (IPM)。通常可以同時提供原始和雙重解決方案。某些實作方式也會針對無限制/不可行的問題產生光線。除非基礎解題工具「跨越」,否則不會提供基礎。用 Simplex 完成
LP_ALGORITHM_FIRST_ORDER 以第一順序方法為基礎的演算法。這兩種解決方案通常會同時產生原始和雙重解決方案,也可能出現原始和/或雙不可行的證書。第一順位方法通常可提供較不準確的解決方案,因此使用者必須謹慎設定解決方案品質參數 (例如容忍度) 並驗證解決方案。

EmphasisProto

問題在解決時套用至選用工作上的難度 (如需使用說明,請參閱 SolveParametersProto)。

強調效果用於設定解題工具功能,如下所示:* 如果解題工具不支援此功能,只有 UNSPECIFIED 會永遠有效,任何其他設定通常會產生無效的引數錯誤 (部分解題工具也可能接受 OFF)。* 如果解題工具支援此功能:- 如果設為「UNSPECIFIED」,則會使用基礎預設值。- 如果無法關閉這項功能,關閉時會傳回錯誤。- 如果此功能預設為啟用,解題工具的預設值通常會對應至 MEDIUM。- 如果系統支援此功能,「低」、「中等」、「高」和「高度」一律不會發生錯誤,而會對應到最符合的項目。

列舉
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

ModelSolveParametersProto

JSON 表示法
{
  "variableValuesFilter": {
    object (SparseVectorFilterProto)
  },
  "dualValuesFilter": {
    object (SparseVectorFilterProto)
  },
  "reducedCostsFilter": {
    object (SparseVectorFilterProto)
  },
  "initialBasis": {
    object (BasisProto)
  },
  "solutionHints": [
    {
      object (SolutionHintProto)
    }
  ],
  "branchingPriorities": {
    object (SparseInt32VectorProto)
  }
}
欄位
variableValuesFilter

object (SparseVectorFilterProto)

會套用至 PrimalSolutionProto 和 PrimalRayProto 變數 (PrimalSolutionProto.variable_values、PrimalRayProto.variable_values) 傳回的稀疏容器。

需求條件:* filterIds 是 VariablesProto.ids 的元素。

dualValuesFilter

object (SparseVectorFilterProto)

這個篩選器會套用至 DualSolutionProto 和 DualRay (DualSolutionProto.dual_values、DualRay.dual_values) 的所有傳回的稀疏容器。

需求條件:* filterIds 是 LinearConstraints.ids 的元素。

reducedCostsFilter

object (SparseVectorFilterProto)

套用至所有傳回 DualSolutionProto 和 DualRay (DualSolutionProto.reduced_costs、DualRay.reduced_costs) 變數傳回的稀疏容器的篩選器。

需求條件:* filterIds 是 VariablesProto.ids 的元素。

initialBasis

object (BasisProto)

暖啟動 Simplex LP 解題工具的選用初始基礎。如果設定,該值預期會根據目前ModelSummary validators/solution_validator.h 中的 ValidateBasis 有效。

solutionHints[]

object (SolutionHintProto)

選擇性解決方案提示。如果基礎解題工具只接受一個提示,則會使用第一個提示。

branchingPriorities

object (SparseInt32VectorProto)

選用的分支優先順序。系統會先對值較高的變數分支。未設定優先順序的變數會取得解題工具的預設優先順序 (通常為零)。

需求條件:* subingPriorities.values 必須是有限值。* subingPriorities.ids 必須是 VariablesProto.ids 的元素。

SparseVectorFilterProto

此訊息允許查詢/設定 SparseXxxxVector 的特定部分。預設行為不會篩除任何資料。常見的用途是查詢解決方案的某些部分 (只查詢非零的值及/或手動挑選的變數值)。

JSON 表示法
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
欄位
skipZeroValues

boolean

適用於 SparseBoolVectorProto「0」為 false

filterByIds

boolean

如果設為 true,只會傳回已篩選 ID 中 ID 的值。

filteredIds[]

string (int64 format)

filterByIds 為 true 時要使用的 ID 清單。如果 filterByIds 為 false,則必須留空。注意:如果此屬性為空白,且 filterByIds 為 true,就表示您想要結果不想要任何資訊。

BasisProto

線性節目解決方案的組合特性。

解決線性程式的簡單方法一律會傳回「基本可行的解決方案」這可能會由基礎結合來描述基礎會為每個變數和線性限制指派 BasisStatusProto。

例如:請考慮使用標準格式 LP:min c * x s.t* x = b x >= 0 的變數比限制多,且整列排名 A。

n 為變數數量,以及線性限制的 m 數量。這個問題的有效基礎設計如下:* 所有限制條件的基準狀態皆為「已修正」。* 挑選 m 變數,讓 A 欄以線性獨立的方式指派狀態,並指派「基本」狀態。* 為其餘的 n 至 m 變數指定 AT_LOWER 狀態。

這個基礎的基本解決方案是 A * x = b 的唯一解決方案,所有狀態的變數皆為 AT_LOWER 的下限 (全部零)。如果解決方案同時符合 x >= 0,則產生的解決方案即稱為基本可行解決方案。

JSON 表示法
{
  "constraintStatus": {
    object (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
欄位
constraintStatus

object (SparseBasisStatusVector)

限制依據狀態。

需求條件:* constraintStatus.ids 等於 LinearConstraints.ids。

variableStatus

object (SparseBasisStatusVector)

變數基礎狀態。

需求條件:* constraintStatus.ids 等於 VariablesProto.ids。

basicDualFeasibility

enum (SolutionStatusProto)

MathOpt 採用這項進階功能,目的是說明不理想到達網頁解決方案的可行性 (最佳解決方案狀態一律為 SOLUTION_STATUS_FEASIBLE)。

單面 LP 的可行性狀態應與相關雙解決方案的可行狀態相同。如果是雙面 LP,在某些極端情況下可能會有所不同 (例如使用基本 id 解決不完整的問題)。

如果您透過 ModelResolveParametersProto.initial_basis 來提供起始值,系統會忽略此值。這個屬性只與 SolutionProto.basis 傳回的基礎相關。

SparseBasisStatusVector

以稀疏方式呈現基礎狀態向量。

JSON 表示法
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
欄位
ids[]

string (int64 format)

必須以所有元素分別排序 (依遞增順序排列)。

values[]

enum (BasisStatusProto)

長度必須與 ID 相同。

BasisStatusProto

到達網頁中的變數/限制狀態。

列舉
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 來完成/修正提示。

解題工具使用提示的方式 (如果有的話) 會極為取決於解題工具、問題類型和使用的演算法。要確保提示發揮效果,最可靠的方式就是讀取包含及沒有提示的基礎解題工具記錄。

以 Simplex 為基礎的 LP 解題工具通常偏好以初始為基準,而非解決方案提示 (否則需要交叉連結,才能將提示轉換成基本的可行解決方案)。

JSON 表示法
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
欄位
variableValues

object (SparseDoubleVectorProto)

可能將部分值指派給問題的主要變數。這個子訊息的解題工具無關要求如下:*variableValues.ids 是 VariablesProto.ids 的元素。* varValues.values 必須全部為有限值。

dualValues

object (SparseDoubleVectorProto)

(可能部分) 將值指派給問題的線性限制。

需求:*DualValues.ids 是 LinearConstraintsProto.ids 的元素。* DoubleValues.values 必須全部為有限值。

SparseInt32VectorProto

整數向量的稀疏表示法。

JSON 表示法
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
欄位
ids[]

string (int64 format)

應排序 (依遞增順序排列),且所有元素都不同。

values[]

integer

長度必須與 ID 相同。

SolveResultProto

初級/雙重溶液/光柵輪廓相當複雜,如需完整的說明,請參閱 deprecation_reasons.md。

在確切的合約確定之前,最好只檢查是否已有解決方案/光線,而非依賴終止原因。

JSON 表示法
{
  "termination": {
    object (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
欄位
termination

object (TerminationProto)

解題工具停止的原因。

solutions[]

object (SolutionProto)

未來解題者應採取的解決方案順序,通常是按以下順序排列:1.提供基本可行解決方案的解決方案 (按最佳原始目標排序)。2. 解決方案的雙重可行解決方案,按最佳雙重目標排序 (未知的雙重目標最糟) 3.其餘解決方案則能以任何順序傳回。

primalRays[]

object (PrimalRayProto)

無限制基元改進的方法,或同樣是雙無能力憑證的指引。通常針對 TerminationReasonProtos UNBOUNDED 和 DUAL_INFEASIBLE 提供

dualRays[]

object (DualRayProto)

無限制的雙重改進方向,或同等的原始無能力憑證。通常為 TerminationReasonProto INFEASIBLE 提供。

solveStats

object (SolveStatsProto)

解開程序的統計資料,例如反覆實驗

TerminationProto

所有與 Solve() 呼叫都終止相關的所有資訊。

JSON 表示法
{
  "reason": enum (TerminationReasonProto),
  "limit": enum (LimitProto),
  "detail": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "objectiveBounds": {
    object (ObjectiveBoundsProto)
  }
}
欄位
reason

enum (TerminationReasonProto)

值是 TERMINATION_REASON_FEASIBLE 或 TERMINATION_REASON_NO_SOLUTION_FOUND 時,在 limit 中的其他資訊,詳情請參閱 limit

limit

enum (LimitProto)

除非是 TERMINATION_REASON_FEASIBLE 或 TERMINATION_REASON_NO_SOLUTION_FOUND,否則為 LIMIT_UNSPECIFIED。並非所有解題工具都能夠判斷導致終止的限制,如果無法確定原因,就會使用 LIMIT_UNDETERMINED。

detail

string

與終止相關的其他一般解題工具專屬資訊。

problemStatus

object (ProblemStatusProto)

原始和雙重問題的可行狀態。截至 2023 年 7 月 18 日為止,這則訊息可能已缺少。如果缺少,可在 SolveResultProto.solve_stats 中找到 issueStatus。

objectiveBounds

object (ObjectiveBoundsProto)

最佳目標價值之界限。截至 2023 年 7 月 18 日為止,這則訊息可能已缺少。如果缺少此項目,您可以前往 SolveResultProto.solve.stats.best_primal_bound 和 goalsBounds.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 原始問題是無法避免或毫無限制的。如需問題狀態的詳細資訊,請前往 findStats.problem_status。請注意,Grobi 的不受限狀態可在此對應。
TERMINATION_REASON_IMPRECISE

問題已解決為以上其中一個條件 (最理想、不可行、不受限或無法限製或無法遵守),但不符合一或多項容忍要求。確實存在一些原始/雙重解法/射線,但它們略有不可行,或者 (如果問題是幾乎無法解決的),則可能是最佳解決方案目標與最佳解決方案之間有落差。

使用者仍可查詢原始/雙重解法/光線以及解法統計資料,但必須負責處理數值不精確的情況。

TERMINATION_REASON_FEASIBLE 最佳化工具達到某種限制,並傳回最可能可行的解決方案。請參閱 SolveResultProto.limit_detail 的詳細說明。
TERMINATION_REASON_NO_SOLUTION_FOUND 最佳化工具已達到某種限制,但並未找到真正可行的解決方案。請參閱 SolveResultProto.limit_detail 的詳細說明。
TERMINATION_REASON_NUMERICAL_ERROR 演算法發生無法復原的數字錯誤,因此已停止。無法提供解決方案資訊。
TERMINATION_REASON_OTHER_ERROR 上述定義狀態未涵蓋錯誤,因此演算法已停止。無法提供解決方案資訊。

LimitProto

當 TerminationReasonProto FEASIBLE 或 NO_SOLUTION_FOUND 的情況下提早停止 Solve()。

列舉
LIMIT_UNSPECIFIED 在非超出限制的情況下 (例如 TERMINATION_REASON_OPTIMAL) 時,此值會是 null。
LIMIT_UNDETERMINED 基礎解題工具不會公開達到哪個上限。
LIMIT_ITERATION 在達到疊代次數上限 (例如 Simplex 或門檻疊代) 後,即停止疊代演算法。
LIMIT_TIME 演算法在使用者指定的計算時間之後停止。
LIMIT_NODE 分支版本和繫結演算法已停止,因為探索了分支和繫結樹狀結構的節點數量上限。
LIMIT_SOLUTION 演算法已找到必要數量所需的解決方案,因此已停止。通常在 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

原始問題的可行狀態,以及解題工具聲明的雙重 (或持續放鬆) 狀態。解題工具無須針對請求傳回憑證 (例如,解題工具可能要求取得基本可行性,而不傳回真正可行的解決方案)。結合這個狀態,詳盡說明解題工具對於解題可行性和無限制的聲明。舉例來說:

  • 出現原始和雙重問題的可行狀態,代表原始和受限是可行的,且可能擁有最佳解決方案 (保證沒有線性限制的問題)。
  • 最為可行的雙重不可行狀態則代表原始問題未受限 (亦即有各種較佳的解決方案)。

請注意,單獨無法實現的狀態 (即與原始狀態無法確定的同時) 並不表示原始問題無拘無束,因為我們都可能面臨兩個問題都不可能。此外,雖然基本和雙人可行狀態可能代表最佳解決方案確實存在,但這無法保證解決方案確實有找到最佳解決方案。

JSON 表示法
{
  "primalStatus": enum (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
欄位
primalStatus

enum (FeasibilityStatusProto)

原始問題狀態。

dualStatus

enum (FeasibilityStatusProto)

雙問題狀態 (或是兩個連續放鬆的狀態)。

primalOrDualInfeasible

boolean

如果設為 true,解題工具聲稱出基本或雙重問題是不可行,但卻不知道哪一個問題 (或兩者都不可行)。只有在 primal_problem_status = two_problem_status = kUndefinedd 時才能設為 true。當預先處理程序判定沒有最佳解決方案時,通常需要提供這些額外資訊 (但無法判斷問題是不可行、無限制,或兩者皆有)。

FeasibilityStatusProto

解題工具已聲明擁有權的問題可行性狀態 (即使是理賠之外,無須退還索賠憑證)。

列舉
FEASIBILITY_STATUS_UNSPECIFIED 代表沒有狀態的防護值。
FEASIBILITY_STATUS_UNDETERMINED 求解工具無法聲明狀態。
FEASIBILITY_STATUS_FEASIBLE 解題工具宣稱問題是可行的。
FEASIBILITY_STATUS_INFEASIBLE 解決方案宣稱這是不可行的。

ObjectiveBoundsProto

最佳目標價值之界限。

JSON 表示法
{
  "primalBound": number,
  "dualBound": number
}
欄位
primalBound

number

求解器宣稱最佳值等於或大於 (最小化可最小化,以最大化為最大化) primalBound 至解析能力容忍度 (請見下方警告):* primalBound 表示較低 (+inf 表示最小化和 -inf 最大化),如果解析器未宣稱有這類下限,* primalBound 與最佳原始可行解決方案的目標相比,可能更接近最佳值。尤其是,即使未傳回任何基本可行的解決方案,primalBound 也可能是非常重要的。警告:確切的說法是,已有基本解方:* 是可行的 (即能達到解容器容忍度),而 * 具有目標值 primalBound。這種可行的解決方案有點可行,此時 primalBound 比最佳值更勝一籌。將原始可行性容忍度轉譯成 primalBound 的容忍度並不重要,尤其是在可行性容忍度相對較大的時(例如透過 PDLP 解決)。

dualBound

number

求解器宣稱最佳值等於或更差 (以最小化為最大,以最大化為最大度而言小於) 的雙重邊界 (請見下方警告):*DualBound 是十分簡單的 (-inf 適用於最小化和 +inf 最大化),如果解題器未宣稱有這樣的限制,與 primalBound 類似,某些解題工具即使傳回最佳結果,也可能會發生這種情形。如果 MIP 解題工具不正確,通常仍會回報邊界。* 針對持續發生問題,DualBound 可能比最佳雙可行解決方案的目標更接近最佳價值。對 MIP 而言,DualBound 第一個不重要的值之一,通常是 MIP 到達網頁放鬆的最佳價值。* DualBound 應比 primalBound 與解析器容忍度更出色 (最小化應小於下限,以最大化為最大)。警告:* 如果出現問題持續發生,確切指的是現有的雙重解決方案:* 可以數值 (也就是可達到解容器容忍度),* 則具有目標值 ualBound 值。這種可行的解決方案有點可行,在此情況下,DualBound 可能比最佳值和 primalBound 更明顯。與原始案例類似,將雙可行容忍度轉譯成 DoubleBound 容忍度並不重要,尤其是在可行容忍度相對很大的情況下。但部分解題工具提供修正後的 DoubleBound 版本,可能比數字更安全。這個修正版本可透過解題工具的特定輸出內容存取 (例如 PDLP、pdlp_output.convergence_information.更正 ed_dual_objective)。* 對 MIP 解題工具而言,DualBound 可能與雙重解決方案相關聯 (例如 LP 放寬),但這通常會導致解題工具執行的作業相當複雜,而且通常不如 LP 解題工具回報的範圍。

SolutionProto

解決方案包含的內容取決於問題種類和解題工具。目前的常見模式為 1。MIP 解題工具只會傳回基本解。2. Simplex LP 解題工具通常會傳回基本模式,以及與這個基礎相關的基本和雙重解決方案。3. 其他持續的解題工具通常會傳回基本和雙重解決方案,而且基本和雙重解決方案必須以解題器相依的方式連結。

必要條件:* 至少必須設定一個欄位;解決方案不得留空

JSON 表示法
{
  "primalSolution": {
    object (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
欄位
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

PrimalSolutionProto

最佳化問題的解決方案。

例如:不妨考慮使用簡單的線性程式:分鐘 * x s.tA * x >= b x >= 0。基本解法是將值指派給 x。如果符合上述參數的 A * x >= b 和 x x 0 皆等於 0,即為可行。下方訊息中的 PrimalSolutionProto 訊息,variableValues 為 x, goalValue 為 c * x。

JSON 表示法
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
欄位
variableValues

object (SparseDoubleVectorProto)

需求條件:*variableValues.ids 是 VariablesProto.ids 的元素。* varValues.values 必須全部為有限值。

objectiveValue

number

由基礎解題工具計算的目標值。不得為無限或 NaN。

auxiliaryObjectiveValues

map (key: string (int64 format), value: number)

由基礎解題工具計算出的輔助目標值。鍵必須是有效的輔助目標 ID。值不得為無限或 NaN。

這個物件中包含 "key": value 組合的清單,範例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

feasibilityStatus

enum (SolutionStatusProto)

根據基礎解題工具提供的解決方案可行性狀態。

DualSolutionProto

最佳化問題雙重的解決方案。

例如:請將原始雙對線性程式組合:(雙) (雙) 最小值 c * x 最大 b * y s.t.A * x >= b.t.y * A + r = c x >= 0 y,r >= 0。雙邊解為 y (y、r)。如果系統符合上述「雙重」的限制,即是可行的。

在以下訊息中,y 是 TwoValues,r 降低成本,b * y 則是目標值。

JSON 表示法
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
欄位
dualValues

object (SparseDoubleVectorProto)

需求條件:*DualValues.ids 是 LinearConstraints.ids 的元素。* DoubleValues.values 必須全部為有限值。

reducedCosts

object (SparseDoubleVectorProto)

需求條件:* lowCosts.ids 是 VariablesProto.ids 的元素。* lowCosts.values 必須全部為有限值。

feasibilityStatus

enum (SolutionStatusProto)

根據基礎解題工具提供的解決方案可行性狀態。

objectiveValue

number

PrimalRayProto

改進最佳化問題方向同理可證,這是兩個最佳化問題 有兩個不可使用的證明。

例如:不妨考慮使用簡單的線性程式:分鐘 * x s.tA * x >= b x >= 0 A 初級光是符合 c * x < 的 x0 A * x >= 0 x >= 0 觀察指出有可行的解決方案,任何基底的正倍數加上該解決方案的正倍數仍是可行的,並且提供更理想的目標價值。原始光影也證明雙重最佳化問題是不可行的。

下方訊息中的 PrimalRay 是 x。

JSON 表示法
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  }
}
欄位
variableValues

object (SparseDoubleVectorProto)

需求條件:*variableValues.ids 是 VariablesProto.ids 的元素。* varValues.values 必須全部為有限值。

DualRayProto

一個最佳化的雙重改進方向;等同具有刑事不可抗力的證明

例如:請將原始雙對線性程式組合:(雙) (雙) 最小值 c * x 最大 b * y s.t.A * x >= b.t.y * A + r = c x >= 0 y,r >= 0。雙光為配對 (y, r) 即滿足:b * y >0 y * A + r = 0 y、r >= 0 觀察結果,將正數倍數 (y, r) 加到雙可行解決方案中,可維持雙重可行性並且提高目標 (證明雙數沒有限制)。而且雙光證明犯罪問題是無法避免的。

在下方的訊息 DualRay 中,y 是 twoValues,r 則減少了成本。

JSON 表示法
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
欄位
dualValues

object (SparseDoubleVectorProto)

需求條件:*DualValues.ids 是 LinearConstraints.ids 的元素。* DoubleValues.values 必須全部為有限值。

reducedCosts

object (SparseDoubleVectorProto)

需求條件:* lowCosts.ids 是 VariablesProto.ids 的元素。* lowCosts.values 必須全部為有限值。

SolveStatsProto

JSON 表示法
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
欄位
solveTime

string (Duration format)

經過 math_opt 由 math_opt 測量的經過實時時鐘時間,大約是 Solver::Solve() 的期間。注意:這不包含模型建構完成的工作。

持續時間以秒為單位,最多 9 個小數位數,結尾為「s」。範例:"3.5s"

problemStatus

object (ProblemStatusProto)

原始和雙重問題的可行狀態。

simplexIterations

string (int64 format)

barrierIterations

string (int64 format)

firstOrderIterations

string (int64 format)

nodeCount

string (int64 format)