Method: mathopt.solveMathOptModel

입력 모델을 해결하고 결과를 한 번에 반환합니다. 콜백, 성과 증분이 필요하지 않고 해결 진행 상황을 추적할 필요가 없는 경우 사용합니다.

HTTP 요청

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

URL은 gRPC 트랜스코딩 구문을 사용합니다.

요청 본문

요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.

JSON 표현
{
  "solverType": enum (SolverTypeProto),
  "model": {
    object (ModelProto)
  },
  "parameters": {
    object (SolveParametersProto)
  },
  "modelParameters": {
    object (ModelSolveParametersProto)
  }
}
입력란
solverType

enum (SolverTypeProto)

선택사항입니다. 숫자로 문제를 푸는 솔버 유형입니다. 문제 해결사가 모델의 특정 특성을 지원하지 않으면 최적화 절차가 성공하지 못합니다.

model

object (ModelProto)

필수 항목입니다. 해결해야 할 최적화 문제를 수학적으로 표현한 것입니다.

parameters

object (SolveParametersProto)

선택사항입니다. 단일 Solve를 제어하기 위한 매개변수입니다. 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, 비볼록 정수 2차 문제를 지원합니다. 하지만 LP의 이중 데이터는 반환되지 않습니다. LP에는 GLOP을 사용하는 것이 좋습니다.

SOLVER_TYPE_GUROBI

Gurobi 문제 해결사 (서드 파티)입니다.

LP, MIP, 비볼록 정수 2차 문제를 지원합니다. 일반적으로 가장 빠른 옵션이지만 특별한 라이선스가 있습니다.

SOLVER_TYPE_GLOP

Google의 글롭 문제 해결사입니다.

기본 및 이중 심플렉스 방법으로 LP를 지원합니다.

SOLVER_TYPE_CP_SAT

Google의 CP-SAT 문제 해결사입니다.

모든 변수가 정수이고 제한된 (또는 presolve 이후인 것으로 암시됨)인 문제를 지원합니다. 연속 변수 문제를 재조정하고 이산화하기 위한 실험 지원

SOLVER_TYPE_PDLP

Google의 PDLP 솔버입니다.

LP 및 볼록 대각선 이차 목표를 지원합니다. 심플렉스 대신 1차 메서드를 사용합니다. 매우 큰 문제를 해결할 수 있습니다.

SOLVER_TYPE_GLPK

GNU Linear Programming Kit (GLPK) (서드 파티).

MIP 및 LP를 지원합니다.

스레드 안전: GLPK는 메모리 할당에 스레드 로컬 저장소를 사용합니다. 따라서 Solver 인스턴스가 생성된 것과 동일한 스레드에서 제거되어야 합니다. 그렇지 않으면 GLPK가 비정상 종료됩니다. Solver를 만드는 데 사용한 스레드가 아닌 다른 스레드에서 Solver::Solve()를 호출하는 것은 괜찮아 보이지만 GLPK에 문서화되지 않았으므로 피해야 합니다.

pResolver로 LP를 해결할 때 해 (그리고 결합되지 않은 광선)는 최적의 해를 찾은 경우에만 반환됩니다. 그 외에는 아무것도 반환되지 않습니다. 자세한 내용은 glpk-5.0.tar.gz에서 제공하는 glpk-5.0/doc/glpk.pdf 40페이지를 참조하세요.

SOLVER_TYPE_OSQP

OSQP (Operator Splitting Quadratic Program) 솔버 (서드 파티)입니다.

선형 제약조건 및 선형 또는 볼록 2차 객체가 포함된 연속 문제를 지원합니다. 1차 메서드를 사용합니다.

SOLVER_TYPE_ECOS

ECOS (Embedded Conic Solver) (타사).

LP 및 SOCP 문제를 지원합니다. 내부 점 메서드 (배리어)를 사용합니다.

SOLVER_TYPE_SCS

The Splitting Conic Solver (SCS) (타사).

LP 및 SOCP 문제를 지원합니다. 1차 메서드를 사용합니다.

SOLVER_TYPE_HIGHS

HiGHS Solver (타사).

LP 및 MIP 문제를 지원합니다 (볼록 QP는 구현되지 않음).

SOLVER_TYPE_SANTORINI

MathOpt의 MIP 솔버의 참조 구현입니다.

느리거나 프로덕션에 권장되지 않음 LP 솔버가 아닙니다 (이중 정보는 반환되지 않음).

ModelProto

최적화 문제입니다. MathOpt 지원: - 선택적 유한 경계가 있는 연속 및 정수 결정 변수. - 최소화 또는 최대화된 선형 및 이차 목표 (단일 또는 다중 목표)입니다. - 다양한 제약 조건 유형: * 선형 제약 조건 * 이차 제약 조건 * 2차 원뿔 제약 조건 * 논리적 제약 조건 > SOS1 및 SOS2 제약 조건 > 표시기 제약 조건

기본적으로 제약 조건은 'id-to-data' 맵에 표시됩니다. 그러나 선형 제약 조건은 더 효율적인 '구조체' 형식으로 표현합니다.

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)

선형 제약 조건의 가변 계수입니다.

이 제약조건과 관련된 변수가 삭제되면 0으로 설정된 것처럼 처리됩니다.

요구사항: * linearConstraintMatrix.row_ids는 linearConstraints.ids의 요소입니다. * linearConstraintMatrix.column_ids는 variables.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))

모델의 2차 원뿔 제약조건입니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos1Constraints

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

모델의 SOS1 제약 조건으로, 최대 1개의 expression가 0이 아닐 수 있음을 제한합니다. 선택적 weights 항목은 솔버가 더 빠르게 수렴하기 위해 사용하는 구현 세부정보입니다. 더 자세히 설명하면, 솔버는 이러한 가중치를 사용하여 '균형 있는' 하위 노드를 생성하는 분기 결정을 선택할 수도 있고 사용하지 않을 수도 있습니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos2Constraints

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

모델의 SOS2 제약 조건으로, expression의 항목이 최대 2개까지 0이 아닐 수 있으며 순서에서 인접해야 함을 제한합니다. 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는 최소화, true는 최대화입니다.

offset

number

NaN이 아닌 유한이어야 합니다.

linearCoefficients

object (SparseDoubleVectorProto)

결정 변수에서 선형인 ObjectiveProto 항입니다.

요구사항: * linearCoeffectives.ids는 VariablesProto.ids의 요소입니다. * VariablesProto를 지정하지 않으면 0에 해당합니다. * linearCoeffectives.values는 모두 유한해야 합니다. * linearCoeffectives.values는 0이 될 수 있지만, 이는 공간을 낭비할 뿐입니다.

quadraticCoefficients

object (SparseDoubleMatrixProto)

결정 변수에서 이차적인 객관식입니다.

SparseDoubleMatrixProto 메시지에 대한 추가 요구사항: * quadraticCo 매핑{0}s.row_ids의 각 요소와 quadraticCoefficiencys.column_ids의 각 요소는 VariablesProto.ids의 요소여야 합니다. * 행렬은 위 삼각형이어야 합니다. 즉, 각 i의 경우 quadraticCoefficiencys.row_ids[i] <= quadraticCoefficiencys.column_ids[i]입니다.

참고: * 명시적으로 저장되지 않은 검색어는 계수가 0입니다. * quadraticCoefficiencys.co 사실의 요소는 0일 수 있지만 이는 공간을 낭비할 뿐입니다.

name

string

상위 메시지에는 이 필드에 대한 고유성 요구사항이 있을 수 있습니다. 예를 들어 ModelProto.objectives 및 AuxiliaryObjectivesUpdatesProto.new_objectives를 참고하세요.

priority

string (int64 format)

목표가 여러 개인 문제의 경우 다른 목표 대비 이 목표의 우선순위입니다 (낮을수록 중요함). 이 값은 음수가 아니어야 합니다. 또한 모델의 각 목표 우선순위는 해결 시점에 고유해야 합니다. 이 조건은 Proto 수준에서 검증되지 않으므로 일시적으로 모델의 목표가 동일한 우선순위를 가질 수 있습니다.

SparseDoubleVectorProto

double 벡터의 희소 표현입니다.

JSON 표현
{
  "ids": [
    string
  ],
  "values": [
    number
  ]
}
입력란
ids[]

string (int64 format)

모든 요소가 구별되도록 정렬 (오름차순으로)해야 합니다.

values[]

number

ID와 길이가 같아야 합니다. NaN을 포함할 수 없습니다.

SparseDoubleMatrixProto

double 행렬의 희소 표현입니다.

행렬은 행 ID, 열 ID, 계수의 삼중으로 저장됩니다. 이 세 개의 벡터는 길이가 같아야 합니다. 모든 i의 경우 튜플 (rowIds[i], columnIds[i])이 고유해야 합니다. 항목은 행 순으로 되어 있어야 합니다.

JSON 표현
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
입력란
rowIds[]

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

NaN을 포함할 수 없습니다.

LinearConstraintsProto

아래에 사용된 것처럼 '#linear constraints' = 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 <= sum{linearTerms} + sum{quadraticTerms} <= ub.

이 제약조건과 관련된 변수가 삭제되면 0으로 설정된 것처럼 처리됩니다.

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를 생략하면 해당 계수가 0입니다. * linearTerms.values는 0일 수 있지만 공간 낭비일 뿐입니다.

quadraticTerms

object (SparseDoubleMatrixProto)

결정 변수에서 이차 항입니다.

SparseDoubleMatrixProto 메시지에 대한 요구사항 외에도 다음 사항이 요구됩니다. * quadraticTerms.row_ids의 각 요소와 quadraticTerms.column_ids의 각 요소는 VariablesProto.ids의 요소여야 합니다. * 행렬은 위 삼각형이어야 합니다. 즉, 각 i의 경우 quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i]입니다.

참고: * 명시적으로 저장되지 않은 검색어는 계수가 0입니다. * quadraticTerms.co 사실의 요소는 0일 수 있지만, 이는 공간을 낭비할 뿐입니다.

lowerBound

number

[-inf, inf) 값이 upperBound 이하여야 합니다.

upperBound

number

(-inf, inf]의 값이 lowerBound 이상이어야 합니다.

name

string

상위 메시지에는 이 필드에 대한 고유성 요구사항이 있을 수 있습니다. 예를 들어 ModelProto.quadratic_constraints 및 QuadraticConstraintUpdatesProto.new_constraints를 참조하세요.

SecondOrderConeConstraintProto

형태의 단일 2차 원뿔 제약조건:

||argumentsToNorm||_2 <= upperBound,

여기서 upperBoundargumentsToNorm의 각 요소는 선형 표현식입니다.

이 제약조건과 관련된 변수가 삭제되면 0으로 설정된 것처럼 처리됩니다.

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 제약조건을 나타내는 데이터입니다.

이 제약조건과 관련된 변수가 삭제되면 0으로 설정된 것처럼 처리됩니다.

JSON 표현
{
  "expressions": [
    {
      object (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
입력란
expressions[]

object (LinearExpressionProto)

SOS 제약 조건을 적용할 표현식입니다. * SOS1: 최대 한 개의 요소만 0이 아닌 값을 갖습니다. * SOS2: 최대 2개의 요소는 0이 아닌 값을 가지며 반복된 순서로 인접해야 합니다.

weights[]

number

비어 있거나 표현식과 길이가 같습니다. 비어 있는 경우 기본 가중치는 1, 2, ...(있는 경우)이며 고유한 항목이어야 합니다.

name

string

상위 메시지에는 이 필드에 대한 고유성 요구사항이 있을 수 있습니다. 예를 들어 ModelProto.sos1_constraints 및 SosConstraintUpdatesProto.new_constraints를 참조하세요.

IndicatorConstraintProto

양식의 단일 표시기 제약조건을 나타내기 위한 데이터: Variable(indicatorId) = (activateOnZero ? 0 : 1) ⇒ 하한값 <= 표현식 <= 상한값

이 제약조건과 관련된 변수 (표시기이거나 expression에 표시됨)가 삭제되면 마치 0으로 설정된 것처럼 처리됩니다. 특히 표시기 변수를 삭제하면 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.values의 모든 요소는 유한해야 하며, * expression.idsVariablesProto.ids의 하위 집합입니다.

lowerBound

number

값이 [-inf, inf]이어야 합니다. NaN이 될 수 없습니다.

upperBound

number

(-inf, inf]에는 값이 있어야 합니다. NaN이 될 수 없습니다.

name

string

상위 메시지에는 이 필드에 고유성 요구사항이 있을 수 있습니다(예: ModelProto.indicator_constraintsIndicatorConstraintUpdatesProto.new_constraints 참고).

indicatorId

string (int64 format)

바이너리 변수에 해당하거나 설정되지 않은 ID입니다. 설정하지 않으면 표시기 제약 조건이 무시됩니다. 설정하는 경우 다음이 필요합니다. * VariablesProto.integer[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. 이러한 조건은 MathOpt에서 검증하지 않지만 충족되지 않을 경우 문제 해결사에서 해결 시 오류를 반환합니다.

SolveParametersProto

단일 Solve를 제어하기 위한 매개변수입니다.

모든 솔버에 공통으로 적용되는 매개변수(예: timeLimit)와 특정 문제 해결사의 매개변수(예: gscip)를 모두 포함합니다. 일반 필드와 문제 해결사 관련 필드 모두에 값이 설정된 경우 솔버별 설정이 사용됩니다.

선택사항이며 설정되지 않은 공통 매개변수 또는 값이 지정되지 않은 enum은 솔버 기본값이 사용된다는 것을 나타냅니다.

사용 중인 것 이외의 문제 해결사의 특정 매개변수는 무시됩니다.

모델에 종속되는 매개변수 (예: 각 변수에 분기 우선순위가 설정됨)가 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 해결에만 이를 사용합니다 (그렇지 않은 경우 듀얼 심플렉스 사용).

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)

기본 알고리즘 (예: 심플렉스 피벗)의 반복을 제한합니다. 구체적인 동작은 사용된 솔버와 알고리즘에 따라 다르지만 종종 확정적인 해결 한도를 제공할 수 있습니다 (하나의 스레드와 같이 추가 구성이 필요할 수 있음).

일반적으로 LP, QP, MIP 솔버에서 지원하지만 MIP 솔버의 경우 nodeLimit도 참고하세요.

nodeLimit

string (int64 format)

열거 검색 (예: 브랜치 및 바인딩)에서 해결되는 하위 문제의 수를 제한합니다. 많은 문제 해결사의 경우 이 함수를 사용하여 계산을 결정론적으로 제한할 수 있습니다 (하나의 스레드와 같이 추가 구성이 필요할 수 있음).

일반적으로 MIP 솔버의 경우 iterationLimit도 참조하세요.

cutoffLimit

number

문제 해결사는 최소한 컷오프 수준 이상의 원시 해가 없다는 것을 증명할 수 있으면 조기에 중단합니다.

조기 중단 시 문제 해결사는 CUTOFF 한도로 종료 이유 NO_SOLUTION_FOUND를 반환하며 추가 솔루션 정보를 제공할 필요가 없습니다. 조기 중단이 없으면 반환 값에 영향을 미치지 않습니다.

목표가 마감과 정확히 동일한 솔루션을 반환하려면 허용 오차를 사용하는 것이 좋습니다.

자세한 내용과 bestBoundLimit와의 비교는 사용자 가이드를 참조하세요.

objectiveLimit

number

문제 해결사는 최소한 이 정도 수준의 해법을 찾는 즉시 중단 사유를 FEASIBLE로 지정하고 OBJECTIVE를 제한합니다.

bestBoundLimit

number

해결사는 최적 경계가 최소한 이 정도 좋음이상임을 증명하는 즉시 중지합니다. 종료 이유는 FEASIBLE 또는 NO_SOLUTION_FOUND이고 OBJECTIVE를 제한합니다.

자세한 내용과 cutoffLimit와의 비교는 사용자 가이드를 참고하세요.

solutionLimit

integer

문제 해결사는 가능한 많은 해를 찾은 후 조기에 중단하며, 종료 이유는 FEASIBLE이고 SOLUTION을 제한합니다. 설정하는 경우 0보다 커야 합니다. 문제 해결사가 찾은 첫 번째 가능한 해결 방법에서 멈추도록 하는 데 자주 사용됩니다. 반환되는 솔루션의 목표 값은 보장되지 않습니다.

솔버는 일반적으로 솔루션 한도보다 많은 솔루션을 반환하지 않지만 MathOpt에서는 이를 시행하지 않습니다. b/214041169를 참고하세요.

현재 Gurobi 및 SCIP와 값이 1인 CP-SAT에만 지원됩니다.

threads

integer

설정하는 경우 1 이상이어야 합니다.

randomSeed

integer

기본 솔버의 의사 랜덤 숫자 생성기의 시드입니다. 모든 솔버는 의사 난수를 사용하여 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

number

주로 MIP 솔버의 절대 최적성 허용 오차입니다.

절대 GAP는 * 발견된 가장 적합한 해답의 목표값 * 검색에 의해 생성된 이중 경계 사이의 차이의 절댓값입니다. 문제 해결사는 절대 GAP가 최대 절대 GapTolerance (설정된 경우) 이하가 되면 중지하고 TERMINATION_REASON_OPTIMAL을 반환합니다.

설정된 경우 0 이상이어야 합니다.

상대GapTolerance도 참조하세요.

relativeGapTolerance

number

주로 MIP 솔버의 상대 최적성 허용 오차입니다.

상대 GAP는 절대 GapTolerance에 정의된 절대 GAP의 정규화된 버전입니다.여기서 정규화는 해결사에 의존합니다. 예를 들어 절대 GAP를 찾은 최적 해의 목적 값으로 나눈 값입니다.

문제 해결사는 상대 GAP가 상대적 GapTolerance 이하 (설정된 경우)에 도달하면 중지하고 TERMINATION_REASON_OPTIMAL을 반환합니다.

설정된 경우 0 이상이어야 합니다.

absoluteGapTolerance도 참고하세요.

solutionPoolSize

integer

검색 중에 최대 solutionPoolSize개의 솔루션을 유지할 수 있습니다. 솔루션 풀에는 일반적으로 두 가지 함수가 있습니다. (1) 둘 이상의 솔루션을 반환할 수 있는 문제 해결사의 경우 반환되는 솔루션 수를 제한합니다. (2) 일부 솔버는 솔루션 풀의 해를 사용하여 휴리스틱을 실행할 수 있으므로 이 값을 변경하면 알고리즘의 경로에 영향을 줄 수 있습니다. 문제 해결사가 해답 풀을 강제로 채우도록 하려면(예: 최고의 해를 사용해 n개) 추가 솔버별 구성이 필요합니다.

LPAlgorithmProto

선형 프로그램을 풀기 위한 알고리즘을 선택합니다.

열거형
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX (기본) 단방향 메서드입니다. 일반적으로 원시 솔루션과 이중 솔루션, 원시/이중 무제한 문제에 대한 원시/이중 광선, 그리고 기반을 제공할 수 있습니다.
LP_ALGORITHM_DUAL_SIMPLEX 이중 심플렉스 방법입니다. 일반적으로 원시 솔루션과 이중 솔루션, 원시/이중 무제한 문제에 대한 원시/이중 광선, 그리고 기반을 제공할 수 있습니다.
LP_ALGORITHM_BARRIER 일반적으로 IPM (Interior Point Method)이라고도 하는 배리어 메서드입니다. 일반적으로 원시 솔루션과 이중 솔루션을 모두 제공할 수 있습니다. 일부 구현에서는 무한하거나 실행할 수 없는 문제에 관해서도 광선이 발생할 수 있습니다. 기본 솔버가 '크로스오버'를 하고 심플렉스로 마무리하지 않으면 기초가 주어지지 않습니다.
LP_ALGORITHM_FIRST_ORDER 1차 방법에 기반한 알고리즘입니다. 이러한 솔루션은 일반적으로 원시 솔루션과 이중 솔루션을 모두 생성하며 잠재적으로 원시 솔루션 및/또는 이중 실행 가능성에 대한 인증서도 생성합니다. 일반적으로 1차 메서드는 정확성이 낮은 솔루션을 제공하므로 사용자는 솔루션 품질 매개변수 (예: 허용 오차)를 설정하고 솔루션을 검증하는 데 주의를 기울여야 합니다.

EmphasisProto

해결 중에 선택적 작업에 적용되는 난이도 수준입니다 (사용하려면 SolveParametersProto 참고).

강조는 다음과 같이 솔버 기능을 구성하는 데 사용됩니다. * 솔버가 이 기능을 지원하지 않는 경우 UNSPECIFIED만 항상 유효하고 다른 설정은 일반적으로 유효하지 않은 인수 오류가 발생합니다. 일부 솔버가 OFF를 허용할 수도 있습니다. * 솔버가 기능을 지원하는 경우: - UNSPECIFIED로 설정하면 기본 기본값이 사용됩니다. - 기능을 끌 수 없는 경우 끄기는 오류를 반환합니다. - 기능이 기본적으로 사용 설정되어 있으면 솔버 기본값은 보통 중간으로 매핑됩니다. - 기능이 지원되는 경우 LOW, MEDIUM, HIGH, VERY HIGH는 오류를 표시하지 않으며 가장 일치하는 항목으로 매핑됩니다.

열거형
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)로 키가 지정된, 반환된 모든 희소 컨테이너에 적용되는 필터입니다.

요구사항: * 필터링 ID는 VariablesProto.ids의 요소입니다.

dualValuesFilter

object (SparseVectorFilterProto)

DualSolutionProto 및 DualRay (DualSolutionProto.dual_values, DualRay.dual_values)의 선형 제약조건으로 키가 지정된 모든 반환된 희소 컨테이너에 적용되는 필터입니다.

요구사항: * 필터링 ID는 LinearConstraints.ids의 요소입니다.

reducedCostsFilter

object (SparseVectorFilterProto)

DualSolutionProto 및 DualRay의 변수 (DualSolutionProto.reduced_costs, DualRay.reduced_costs)로 키가 지정된 모든 반환된 희소 컨테이너에 적용되는 필터입니다.

요구사항: * 필터링 ID는 VariablesProto.ids의 요소입니다.

initialBasis

object (BasisProto)

웜 스타트 심플렉스 LP 솔버를 위한 선택적 초기 기초입니다. 설정된 경우 현재 ModelSummaryvalidators/solution_validator.h에 있는 ValidateBasis에 따라 유효할 것으로 예상됩니다.

solutionHints[]

object (SolutionHintProto)

솔루션 힌트(선택사항) 기본 문제 해결사가 단일 힌트만 허용하는 경우 첫 번째 힌트가 사용됩니다.

branchingPriorities

object (SparseInt32VectorProto)

선택적 브랜치 우선순위입니다. 값이 더 높은 변수가 먼저 분기됩니다. 우선순위가 설정되지 않은 변수는 문제 해결사의 기본 우선순위를 갖습니다 (일반적으로 0).

요구사항: * branchingPriorities.values는 유한해야 합니다. * BranchingPriorities.ids는 VariablesProto.ids의 요소여야 합니다.

SparseVectorFilterProto

이 메시지를 사용하면 SparseXxxxVector의 특정 부분을 쿼리/설정할 수 있습니다. 기본 동작은 아무것도 필터링하지 않는 것입니다. 일반적인 사용법은 솔루션의 일부만 (0이 아닌 값 또는 직접 선택한 변수 값의 집합만) 쿼리하는 것입니다.

JSON 표현
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
입력란
skipZeroValues

boolean

SparseBoolVectorProto의 경우 'zero'는 false입니다.

filterByIds

boolean

true인 경우 필터링 ID에 나열된 ID에 해당하는 값만 반환합니다.

filteredIds[]

string (int64 format)

filterByIds가 true인 경우 사용할 ID 목록입니다. filterByIds가 false인 경우 비어 있어야 합니다. 참고: 이 필드가 비어 있고 filterByIds가 true인 경우 결과에 어떤 정보도 포함하지 않아도 됩니다.

BasisProto

선형 프로그램 해의 조합 특성입니다.

선형 프로그램을 푸는 심플렉스 방법은 항상 베이스에 의해 조합적으로 설명할 수 있는 '기본 실행 가능한 해'를 반환합니다. 기준으로 모든 변수 및 선형 제약조건에 BasisStatusProto를 할당합니다.

예를 들어 제약조건보다 변수가 많고 전체 행 순위 A가 있는 표준 형식 LP(min c * x s.t. A * x = b x >= 0)를 고려해 보세요.

n은 변수의 수이고 m은 선형 제약조건의 수입니다. 이 문제에 대한 유효한 근거는 다음과 같이 구성할 수 있습니다. * 모든 제약 조건은 기준 상태가 FIXED입니다. * A의 열이 선형으로 독립하도록 m개의 변수를 선택하고 'BASIC' 상태를 할당합니다. * 나머지 n~m개 변수에 대해 상태 AT_LOWER를 할당합니다.

이를 기반으로 하는 기본 솔루션은 A * x = b라는 고유한 솔루션으로, AT_LOWER 상태를 가진 모든 변수가 하한 (모두 0)에 고정되어 있습니다. 결과로 도출된 해가 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에서 최적화되지 않은 LP 솔루션의 실행 가능성을 나타내기 위해 사용하는 고급 기능입니다 (최적의 솔루션은 항상 SOLUTION_STATUS_FEASIBLE 상태가 됩니다).

단면 LP의 경우 관련 이중 솔루션의 실행 가능성 상태와 같아야 합니다. 양면 LP의 경우 일부 특이 사례 (예: 기본 단방향으로 불완전한 해결)에서 다를 수 있습니다.

ModelSolveParametersProto.initial_basis를 통해 시작 기반을 제공하는 경우 이 값은 무시됩니다. SolutionProto.basis에서 반환된 기준에만 관련이 있습니다.

SparseBasisStatusVector

기본 상태의 벡터의 희소 표현입니다.

JSON 표현
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
입력란
ids[]

string (int64 format)

모든 요소가 구별되도록 정렬 (오름차순으로)해야 합니다.

values[]

enum (BasisStatusProto)

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 (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
입력란
variableValues

object (SparseDoubleVectorProto)

문제의 원시 변수에 값이 부분적으로 할당될 수 있습니다. 이 하위 메시지의 문제 해결사와 상관없는 요구사항은 다음과 같습니다. *variableValues.ids는 VariablesProto.ids의 요소입니다. * variableValues.values는 모두 유한해야 합니다.

dualValues

object (SparseDoubleVectorProto)

문제의 선형 제약 조건에 대한 값 할당 (부분적일 수 있음)입니다.

요구사항: * dualValues.ids는 LinearConstraintsProto.ids의 요소입니다. * doubleValues.values는 모두 유한해야 합니다.

SparseInt32VectorProto

정수 벡터의 희소 표현입니다.

JSON 표현
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
입력란
ids[]

string (int64 format)

모든 요소가 다른 순서대로 정렬되어야 합니다 (오름차순).

values[]

integer

ID와 길이가 같아야 합니다.

SolveResultProto

기본/이중 솔루션/레이가 복잡한 경우의 계약입니다.자세한 설명은일이 종료됩니다.

정확한 계약이 체결될 때까지는 종료 이유를 참고하기보다는 솔루션/레이가 있는지 단순히 확인하는 것이 가장 안전합니다.

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)

무한한 원료 개선 또는 이에 상응하는 이중 실현 가능성 인증서에 대한 지침. 일반적으로 종료ReasonProtos UNBOUNDED 및 DUAL_INFEASIBLE에 제공됩니다.

dualRays[]

object (DualRayProto)

무한한 이중 개선 또는 이와 동등한 원천성 실현성 인증서에 대한 지침. 일반적으로 종료ReasonProto 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일부로 이 메시지가 누락되었을 수 있습니다. 누락된 경우 problemStatus는 SolveResultProto.solve_stats에서 찾을 수 있습니다.

objectiveBounds

object (ObjectiveBoundsProto)

최적의 목표값의 경계입니다. 2023년 7월 18일부로 이 메시지가 누락되었을 수 있습니다. 누락된 경우 goalBounds.primal_bound는 SolveResultProto.solve.stats.best_primal_bound에서, goalBounds.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 근본적인 문제는 실현 불가능하거나 무한합니다. 문제 상태에 대한 자세한 내용은 SolStats.problem_status에서 확인할 수 있습니다. Gurobi의 unbounded 상태는 여기에 매핑될 수 있습니다.
TERMINATION_REASON_IMPRECISE

문제가 위의 기준 (Optimal, Infeasible, Unbounded, InfeasibleOrUnbounded) 중 하나에 맞게 해결되었지만 하나 이상의 허용 오차가 충족되지 않았습니다. 몇 가지 기본/이중 해법/선도 존재하기는 하지만, 약간 실현할 수 없거나, (문제가 거의 최적의 경우) 최선의 해법 목표와 최선의 목표 경계 사이의 격차가 될 수도 있습니다.

사용자는 여전히 기본/이중 해법/레이와 해답 통계를 쿼리할 수 있지만, 숫자의 미정밀도를 처리할 책임은 본인에게 있습니다.

TERMINATION_REASON_FEASIBLE 옵티마이저가 일종의 한도에 도달하여 실현 가능한 기본 솔루션이 반환됩니다. 도달한 한도의 종류에 대한 자세한 설명은 SolveResultProto.limit_detail를 참조하세요.
TERMINATION_REASON_NO_SOLUTION_FOUND 최적화 도구가 일종의 한도에 도달하여 가장 적합한 솔루션을 찾지 못했습니다. 도달한 한도의 종류에 대한 자세한 설명은 SolveResultProto.limit_detail를 참조하세요.
TERMINATION_REASON_NUMERICAL_ERROR 복구할 수 없는 숫자 오류가 발생하여 알고리즘이 중지되었습니다. 솔루션 정보가 없습니다.
TERMINATION_REASON_OTHER_ERROR 위에 정의된 상태 중 하나에 해당하지 않는 오류로 인해 알고리즘이 중지되었습니다. 솔루션 정보가 없습니다.

LimitProto

Solve()가 종료ReasonProto FEASIBLE 또는 NO_SOLUTION_FOUND로 조기에 중지되는 경우 도달한 구체적인 한도입니다.

열거형
LIMIT_UNSPECIFIED 한도 (예: TERMINATION_REASON_OPTIMAL)에 따라 해지되지 않은 경우 null 값으로 사용됩니다.
LIMIT_UNDETERMINED 기본 문제 해결자가 어떤 한도에 도달했는지 노출하지 않습니다.
LIMIT_ITERATION 최대 반복 횟수 (예: 심플렉스 또는 배리어 반복)를 수행한 후 반복 알고리즘이 중지되었습니다.
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는 이유가 알 수 있지만 위의 대안에 해당하지 않는 경우에 사용됩니다.

TermProto.detail에는 한도에 대한 추가 정보가 포함될 수 있습니다.

ProblemStatusProto

문제 해결사가 주장한 원초 문제와 이 문제의 이중 (또는 연속 이완의 이중)의 실행 가능성 상태입니다. 문제 해결사는 클레임에 대한 인증서를 반환하지 않아도 됩니다 (예: 문제 해결사는 태고 가능한 해결 방법을 반환하지 않고 1차 타당성을 주장할 수 있음). 이러한 통합 상태는 해결된 문제의 실행 가능성과 무한성에 대한 문제 해결사의 주장을 포괄적으로 설명합니다. 예를 들면 다음과 같습니다.

  • 원초 및 이중 문제에 대한 실현 가능한 상태는 기본 문제가 실행 가능하고 한정되어 있으며 최적의 솔루션을 가지고 있을 가능성이 높음을 나타냅니다 (비선형 제약이 없는 문제에 대해 보장됨).
  • 실현 가능하고 이중으로 실현할 수 없는 상태는 원시 문제가 무한하다는 것을 나타냅니다 (즉, 임의의 좋은 해결책이 있음).

이중 실현 불가 상태 그 자체 (즉, 미확인 원고 상태가 수반됨)는 두 가지 문제를 모두 실현할 수 없을 수 있기 때문에 근본적인 문제가 제한되지 않음을 의미하지 않습니다. 또한 원시 상태와 이중 실현 가능 상태는 최적의 해의 존재를 암시할 수 있지만, 문제 해결사가 실제로 이러한 최적의 해법을 찾았다고 보장하지는 않습니다.

JSON 표현
{
  "primalStatus": enum (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
입력란
primalStatus

enum (FeasibilityStatusProto)

원시 문제의 상태입니다.

dualStatus

enum (FeasibilityStatusProto)

이중 문제 (또는 지속적인 휴식의 이중 문제)의 상태입니다.

primalOrDualInfeasible

boolean

참인 경우 문제 해결사는 원초 문제 또는 이중 문제를 실현할 수 없다고 주장하지만 어떤 문제인지 (또는 둘 다 실현할 수 없는지) 알지 못합니다. primal_problem_status = dual_problem_status = kUnconfirmd인 경우에만 true일 수 있습니다. 이러한 추가 정보는 전처리를 통해 문제에 대한 최적의 해결책이 없다고 판단할 때 (그러나 그것이 실행 가능성, 무한성 또는 둘 다로 인한 것인지는 판단할 수 없음) 필요할 때가 많습니다.

FeasibilityStatusProto

문제 해결사가 주장한 문제 실현 가능성 상태입니다 (해결자는 주장을 위해 인증서를 반환하지 않아도 됨).

열거형
FEASIBILITY_STATUS_UNSPECIFIED 상태가 없음을 나타내는 가드 값입니다.
FEASIBILITY_STATUS_UNDETERMINED 문제 해결사가 상태를 주장하지 않습니다.
FEASIBILITY_STATUS_FEASIBLE 솔버는 이 문제가 실현 가능하다고 주장합니다.
FEASIBILITY_STATUS_INFEASIBLE 솔버는 실현 불가능한 문제라고 주장합니다.

ObjectiveBoundsProto

최적의 목표값의 경계입니다.

JSON 표현
{
  "primalBound": number,
  "dualBound": number
}
입력란
primalBound

number

솔버는 최적값이 문제 해결사의 기본 타당성 허용 범위까지 primalBound보다 primalBound보다 작거나 더 크다고 주장합니다(아래 경고 참고). * 솔버가 이러한 경계를 갖는다고 주장하지 않는 경우 primalBound는 사소합니다(최소화의 경우 +inf, -inf 최대화는 -inf 최대화). * primalBound는 실현 가능한 최적의 기본 솔루션의 목표보다 최적 값에 더 가까울 수 있습니다. 특히 primalBound는 가능한 기본 솔루션이 반환되지 않는 경우에도 심각하지 않을 수 있습니다. 경고: 정확한 주장은 *가 수치적으로 실행 가능하며 (즉, 문제 해결사의 허용 오차까지 실행 가능) *에 목표 값 primalBound가 있는 기본 해가 있다는 것입니다. 수치적으로 가능한 이 솔루션은 약간 실행이 불가능할 수 있으며, 이 경우 primalBound가 최적 값보다 엄밀할 수 있습니다. 기본 타당성 허용 오차를 primalBound의 허용 오차로 변환하는 것은 그리 간단하지 않습니다. 특히 타당성 허용 오차가 상대적으로 큰 경우 (예: PDLP로 해결할 때)가 더 중요합니다.

dualBound

number

솔버는 최적의 값이 doubleBound와 같거나 더 나쁘다고 주장합니다 (최소화의 경우 더 크며, 최대화의 경우 더 작음) 해결사의 이중 타당성 허용 오차 (아래 경고 참고). * doubleBound는 사소한 값(최소화의 경우 -inf 및 +inf 최대화의 경우)입니다. primalBound와 마찬가지로 이는 최적값을 반환하는 경우에도 일부 문제 해결사의 경우 발생할 수 있습니다. MIP 솔버는 부정확하더라도 일반적으로 경계를 보고합니다. * 지속적인 문제의 경우 doubleBound는 가능한 최적의 이중 실현 가능한 솔루션의 목표보다 최적 값에 더 가까울 수 있습니다. MIP의 경우 doubleBound의 중요한 첫 번째 값 중 하나가 MIP의 LP 완화의 최적 값입니다. * doubleBound가 솔버 허용 범위 (아래 경고 참조)까지 primalBound보다 더 나아야 합니다 (최소화의 경우 더 작거나 최대화의 경우 더 큼). 경고: * 연속 문제의 경우 정확한 주장은 * 숫자적으로 실행 가능하고 (즉, 문제 해결사의 허용 오차까지 실행 가능) * 목표 값 doubleBound를 갖는 이중 해법이 있다는 것입니다. 수치적으로 가능한 이 솔루션은 약간 실행할 수 없을 수 있으며, 이 경우 doubleBound가 최적 값 및 primalBound보다 나빠질 수 있습니다. 초기 사례와 마찬가지로 이중 실행 가능성 허용 오차를 doubleBound의 허용 오차로 변환하는 것은 그리 간단하지 않으며 특히 타당성 허용 오차가 비교적 큰 경우에 해당합니다. 그러나 일부 솔버는 수치적으로 더 안전할 수 있는 doubleBound의 수정된 버전을 제공합니다. 이 수정된 버전은 문제 해결사의 특정 출력 (예: PDLP의 경우 pdlp_output.convergence_information.corrected_dual_objective)을 통해 액세스할 수 있습니다. * MIP 솔버의 경우 doubleBound는 지속적인 완화 (예: LP 완화)를 위해 이중 솔루션과 연결될 수 있지만, 종종 솔버 실행의 복잡한 결과이며 LP 솔버가 보고한 경계보다 일반적으로 더 부정확합니다.

SolutionProto

솔루션에 포함되는 것은 문제의 종류와 문제 해결사에 따라 다릅니다. 현재 공통 패턴은 1입니다. MIP 솔버는 기본 솔루션만 반환합니다. 2. 심플렉스 LP 솔버는 종종 기초와 이 기반과 관련된 기본 및 이중 솔루션을 반환합니다. 3. 다른 연속 문제 해결사는 문제 해결사에 종속된 형태로 연결된 기본 및 이중 솔루션 솔루션을 반환하는 경우가 많습니다.

요구사항: * 하나 이상의 필드를 설정해야 합니다. 솔루션은 비워 둘 수 없습니다.

JSON 표현
{
  "primalSolution": {
    object (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
입력란
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

PrimalSolutionProto

최적화 문제에 대한 해결책입니다.

예를 들어 간단한 선형 프로그램인 min c * x s.t. A * x >= b x >= 0이 있다고 가정해 보겠습니다. 우선 해답은 x에 값을 할당하는 것입니다. 위에서 A * x >= b 및 x >= 0을 충족하면 실행할 수 있습니다. 아래 PrimalSolutionProto 메시지에서 변수의 값은 x이고, goalValue는 c * x입니다.

JSON 표현
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
입력란
variableValues

object (SparseDoubleVectorProto)

요구사항: * variableValues.ids는 VariablesProto.ids의 요소입니다. * variableValues.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

최적화 문제의 이중에 대한 해결책입니다.

예를 들어 원시 이중 쌍 선형 프로그램 쌍(원시) (이중) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0이라고 가정해 보겠습니다. 이중 솔루션은 쌍 (y, r)입니다. 위의 (Dual) 제약 조건을 충족하면 실행할 수 있습니다.

아래 메시지에서 y는 doubleValues이고, r은 감소비용이며, b * y는 목표 값입니다.

JSON 표현
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
입력란
dualValues

object (SparseDoubleVectorProto)

요구사항: * doubleValues.ids는 LinearConstraints.ids의 요소입니다. * doubleValues.values는 모두 유한해야 합니다.

reducedCosts

object (SparseDoubleVectorProto)

요구사항: * reduceCosts.ids는 VariablesProto.ids의 요소입니다. * ReduceCosts.values는 모두 유한해야 합니다.

feasibilityStatus

enum (SolutionStatusProto)

기본 문제 해결자에 따른 솔루션의 실행 가능성 상태입니다.

objectiveValue

number

PrimalRayProto

최적화 문제에 대한 무한한 개선의 방향입니다. 이와 동등하게, 최적화 문제의 이중에 대한 실행 불가능에 대한 인증서입니다.

예를 들어 간단한 선형 프로그램인 min c * x s.t. A * x >= b x >= 0을 만족하는 x입니다. 원시선도 이중 최적화 문제가 실현 불가능하다는 것을 증명합니다.

아래의 PrimalRay 메시지에서 변수Values는 x입니다.

JSON 표현
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  }
}
입력란
variableValues

object (SparseDoubleVectorProto)

요구사항: * variableValues.ids는 VariablesProto.ids의 요소입니다. * variableValues.values는 모두 유한해야 합니다.

DualRayProto

최적화 문제의 이중, 즉 원시 실행 가능성에 대한 인증서로 무한한 개선을 도모하는 방향입니다.

예를 들어 원시 이중 쌍 선형 프로그램 쌍(원시) (이중) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0이라고 가정해 보겠습니다. 이중 광선은 b * y > 0 y * A + r = 0 y, r >= 0을 만족하는 쌍 (y, r)입니다. 이중 실현 가능한 용액에 (y, r)의 양의 배수를 추가하면 이중 실현 가능성이 유지되고 목표가 개선되는 것을 관찰합니다 (이중이 제한되지 않음을 입증). 또한 원초적인 문제가 실현 불가능하다는 것을 증명합니다.

아래 DualRay 메시지에서 y는 doubleValues이고 r은 감소비용입니다.

JSON 표현
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
입력란
dualValues

object (SparseDoubleVectorProto)

요구사항: * doubleValues.ids는 LinearConstraints.ids의 요소입니다. * doubleValues.values는 모두 유한해야 합니다.

reducedCosts

object (SparseDoubleVectorProto)

요구사항: * reduceCosts.ids는 VariablesProto.ids의 요소입니다. * ReduceCosts.values는 모두 유한해야 합니다.

SolveStatsProto

JSON 표현
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
입력란
solveTime

string (Duration format)

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)