Package google.research.optimization.v1.mathopt

색인

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도 충족한다면 이 해를 기본 실현 가능한 해라고 합니다.

입력란
constraint_status

SparseBasisStatusVector

제약조건 기준 상태입니다.

요구사항: * constraint_status.ids는 LinearConstraints.ids와 같습니다.

variable_status

SparseBasisStatusVector

가변 기반 상태입니다.

요구사항: * constraint_status.ids는 VariablesProto.ids와 같습니다.

basic_dual_feasibility

SolutionStatusProto

이 기능은 MathOpt에서 최적화되지 않은 LP 솔루션의 실행 가능성을 나타내기 위해 사용하는 고급 기능입니다 (최적의 솔루션은 항상 SOLUTION_STATUS_FEASIBLE 상태가 됩니다).

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

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

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 변수/제약조건은 기본입니다.

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는 이중_값이고 r은 감소_비용입니다.

입력란
dual_values

SparseDoubleVectorProto

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

reduced_costs

SparseDoubleVectorProto

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

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는 이중_값, r은 감소_비용, b * y는 목표 값입니다.

입력란
dual_values

SparseDoubleVectorProto

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

reduced_costs

SparseDoubleVectorProto

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

feasibility_status

SolutionStatusProto

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

objective_value

double

EmphasisProto

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

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

열거형
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

FeasibilityStatusProto

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

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

IndicatorConstraintProto

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

이 제약조건과 관련된 변수 (표시기이거나 expression에 표시됨)가 삭제되면 마치 0으로 설정된 것처럼 처리됩니다. 특히 표시기 변수를 삭제하면 activate_on_zero가 false인 경우 표시기 제약조건이 빈 상태이고 activate_on_zero가 true인 경우 선형 제약조건과 같습니다.

입력란
activate_on_zero

bool

true인 경우 표시기 변수가 값 0을 취하면 암시적 제약 조건이 충족되어야 합니다. 그렇지 않고 표시기 변수가 값 1을 취하면 암시적 제약 조건이 충족되어야 합니다.

expression

SparseDoubleVectorProto

포함하는 모델과 관련하여 유효한 선형 표현식이어야 합니다. * SparseDoubleVectorProto에 명시된 모든 조건, * expression.values의 모든 요소는 유한해야 하며, * expression.idsVariablesProto.ids의 하위 집합입니다.

lower_bound

double

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

upper_bound

double

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

name

string

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

indicator_id

int64

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

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차 메서드는 정확성이 낮은 솔루션을 제공하므로 사용자는 솔루션 품질 매개변수 (예: 허용 오차)를 설정하고 솔루션을 검증하는 데 주의를 기울여야 합니다.

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에는 한도에 대한 추가 정보가 포함될 수 있습니다.

LinearConstraintsProto

아래에 사용된 것처럼 '#linear constraints' = size(LinearConstraintsProto.ids)를 정의합니다.

입력란
ids[]

int64

음수가 아니고 엄격하게 증가해야 합니다. max(int64) 값은 사용할 수 없습니다.

lower_bounds[]

double

#linear 제약 조건, [-inf, inf)의 값은 길이가 같아야 합니다.

upper_bounds[]

double

길이가 #linear 제약 조건, (-inf, inf]의 값은 값과 같아야 합니다.

names[]

string

설정되지 않은 경우 모두 빈 문자열로 간주됩니다. 그렇지 않은 경우 길이는 #linear 제약 조건과 같아야 합니다.

비어 있지 않은 모든 이름은 고유해야 합니다.

LinearExpressionProto

선형 표현식의 희소 표현 (변수의 가중 합계에 상수 오프셋을 더한 값)입니다.

입력란
ids[]

int64

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

coefficients[]

double

ID와 길이가 같아야 합니다. 유한한 값은 NaN이 아니어야 합니다.

offset

double

유한해야 하며 NaN이 아니어야 합니다.

ModelProto

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

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

입력란
name

string

variables

VariablesProto

objective

ObjectiveProto

모델의 기본 목표입니다.

auxiliary_objectives

map<int64, ObjectiveProto>

다중 목표 모델에서 사용하기 위한 보조 목표입니다.

맵 키 ID는 [0, max(int64))에 있어야 합니다. 각 우선순위와 비어 있지 않은 각 이름은 고유해야 하며 기본 objective와도 구분되어야 합니다.

linear_constraints

LinearConstraintsProto

linear_constraint_matrix

SparseDoubleMatrixProto

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

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

요구사항: * linear_constraint_matrix.row_ids는 linear_constraints.ids의 요소입니다. * linear_constraint_matrix.column_ids는 variables.ids의 요소입니다. * 지정되지 않은 행렬 항목은 0입니다. * linear_constraint_matrix.values는 모두 유한해야 합니다.

quadratic_constraints

map<int64, QuadraticConstraintProto>

모델의 이차 제약 조건입니다.

second_order_cone_constraints

map<int64, SecondOrderConeConstraintProto>

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

sos1_constraints

map<int64, SosConstraintProto>

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

sos2_constraints

map<int64, SosConstraintProto>

모델의 SOS2 제약 조건으로, expression의 항목이 최대 2개까지 0이 아닐 수 있으며 순서에서 인접해야 함을 제한합니다. weights가 제공되지 않으면 이 순서는 expressions 목록의 선형 순서입니다. weights가 표시되면 이러한 값을 기준으로 오름차순으로 정렬됩니다.

indicator_constraints

map<int64, IndicatorConstraintProto>

모델의 표시기 제약 조건으로, 바이너리 '지표 변수'가 1로 설정된 경우 '암시적 제약 조건'이 반드시 유지되어야 합니다.

ModelSolveParametersProto

입력란
variable_values_filter

SparseVectorFilterProto

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

요구사항: * filters_ids는 VariablesProto.ids의 요소입니다.

dual_values_filter

SparseVectorFilterProto

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

요구사항: * filter_ids는 LinearConstraints.ids의 요소입니다.

reduced_costs_filter

SparseVectorFilterProto

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

요구사항: * filters_ids는 VariablesProto.ids의 요소입니다.

initial_basis

BasisProto

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

solution_hints[]

SolutionHintProto

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

branching_priorities

SparseInt32VectorProto

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

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

ObjectiveBoundsProto

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

입력란
primal_bound

double

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

dual_bound

double

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

ObjectiveProto

입력란
maximize

bool

false는 최소화, true는 최대화입니다.

offset

double

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

linear_coefficients

SparseDoubleVectorProto

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

요구사항: * linear_co 사실, id는 VariablesProto.ids의 요소입니다. * VariablesProto를 지정하지 않으면 0에 해당합니다. * linear_coeffectives.values는 모두 유한해야 합니다. * linear_co 사실, .values는 0이 될 수 있지만, 이렇게 하면 공간이 낭비됩니다.

quadratic_coefficients

SparseDoubleMatrixProto

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

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

참고: * 명시적으로 저장되지 않은 검색어는 계수가 0입니다. * quadratic_coefficiencys.co하려고 할 때 요소가 0이 될 수 있지만 공간만 낭비됩니다.

name

string

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

priority

int64

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

PrimalRayProto

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

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

아래 PrimalRay 메시지에서 변수_값은 x입니다.

입력란
variable_values

SparseDoubleVectorProto

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

PrimalSolutionProto

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

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

입력란
variable_values

SparseDoubleVectorProto

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

objective_value

double

기본 문제 해결사가 계산한 목표 값입니다. 무한 또는 NaN일 수 없습니다.

auxiliary_objective_values

map<int64, double>

기본 솔버가 계산한 보조 목표 값입니다. 키는 유효한 보조 목표 ID여야 합니다. 값은 무한하거나 NaN일 수 없습니다.

feasibility_status

SolutionStatusProto

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

ProblemStatusProto

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

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

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

입력란
primal_status

FeasibilityStatusProto

원시 문제의 상태입니다.

dual_status

FeasibilityStatusProto

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

primal_or_dual_infeasible

bool

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

QuadraticConstraintProto

형태의 단일 이차 제약조건: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub입니다.

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

입력란
linear_terms

SparseDoubleVectorProto

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

SparseDoubleVectorProto 메시지에 대한 요구사항 외에도 다음 사항을 요구합니다. * linear_terms.ids는 VariablesProto.ids의 요소입니다. * linear_terms.values는 모두 유한해야 하며 NaN이 아니어야 합니다.

참고: * 변수 ID를 생략하면 해당 계수가 0입니다. * linear_terms.values는 0일 수 있지만 공간을 낭비할 뿐입니다.

quadratic_terms

SparseDoubleMatrixProto

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

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

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

lower_bound

double

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

upper_bound

double

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

name

string

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

SecondOrderConeConstraintProto

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

||arguments_to_norm||_2 <= upper_bound,

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

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

입력란
upper_bound

LinearExpressionProto

arguments_to_norm[]

LinearExpressionProto

name

string

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

SolutionHintProto

문제 해결사에게 제안된 시작 솔루션입니다.

MIP 솔버는 일반적으로 기본 정보 (variable_values)만 원하지만 LP 솔버는 기본 정보와 이중 정보 (dual_values)를 모두 원합니다.

많은 MIP 솔버는 (1) 모든 변수를 지정하지 않는 부분 솔루션 또는 (2) 실현할 수 없는 솔루션을 사용할 수 있습니다. 이러한 경우 문제 해결사는 일반적으로 하위 MIP를 해결하여 힌트를 완성/수정합니다.

문제 해결사가 힌트를 사용하는 방식은 문제 해결사, 문제 유형, 사용되는 알고리즘에 따라 크게 달라집니다. 힌트가 효과를 갖도록 하는 가장 신뢰할 수 있는 방법은 힌트를 사용하거나 사용하지 않고 기본 문제 해결사 로그를 읽는 것입니다.

심플렉스 기반 LP 솔버는 일반적으로 솔루션 힌트보다 초기 기반을 선호합니다 (그렇지 않은 경우 힌트를 실행 가능한 기본 솔루션으로 변환하려면 크로스오버해야 함).

입력란
variable_values

SparseDoubleVectorProto

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

dual_values

SparseDoubleVectorProto

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

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

SolutionProto

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

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

입력란
primal_solution

PrimalSolutionProto

dual_solution

DualSolutionProto

basis

BasisProto

SolutionStatusProto

문제 해결사가 주장한 원천 또는 이중 해법의 실행 가능성입니다.

열거형
SOLUTION_STATUS_UNSPECIFIED 상태가 없음을 나타내는 가드 값입니다.
SOLUTION_STATUS_UNDETERMINED 문제 해결사는 타당성 상태를 주장하지 않습니다.
SOLUTION_STATUS_FEASIBLE 해결 방법이 실현 가능하다고 주장합니다.
SOLUTION_STATUS_INFEASIBLE 솔버는 해결책이 불가능하다고 주장합니다.

SolveParametersProto

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

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

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

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

모델에 종속되는 매개변수 (예: 각 변수에 분기 우선순위가 설정됨)가 ModelSolveParametersProto에 전달됩니다.

입력란
time_limit

Duration

문제 해결사가 문제에 소비해야 하는 최대 시간입니다. 설정되지 않은 경우 무제한입니다.

이 값은 엄격한 제한이 아니므로 해결 시간이 이 값을 약간 초과할 수 있습니다. 이 매개변수는 항상 기본 솔버로 전달되며 솔버 기본값은 사용되지 않습니다.

enable_output

bool

솔버 구현 트레이스를 출력하도록 사용 설정합니다. 이러한 트레이스의 위치는 솔버에 따라 다릅니다. SCIP 및 Gurobi의 경우에는 표준 출력 스트림이 됩니다. Glop 및 CP-SAT의 경우 LOG(INFO)입니다.

솔버가 메시지 콜백을 지원하고 사용자가 콜백을 등록하면 이 매개변수 값은 무시되고 트레이스가 출력되지 않습니다.

lp_algorithm

LPAlgorithmProto

선형 프로그램을 푸는 알고리즘입니다. LP_ALGORITHM_UNSPECIFIED인 경우 솔버 기본 알고리즘을 사용합니다.

선형 프로그램은 아니지만 선형 프로그래밍이 서브 루틴인 문제의 경우, 문제 해결사는 이 값을 사용할 수 있습니다. 예를 들어 MIP 솔버는 일반적으로 루트 LP 해결에만 이를 사용합니다 (그렇지 않은 경우 듀얼 심플렉스 사용).

presolve

EmphasisProto

기본 알고리즘을 시작하기 전에 문제를 단순화하거나, 또는 EMPHASIS_UNSPECIFIED인 경우 문제 해결사 기본 노력 수준

cuts

EmphasisProto

더 강력한 LP 완화 (MIP만 해당) 또는 EMPHASIS_UNSPECIFIED인 경우 솔버 기본 노력 수준을 얻기 위한 노력

참고: 컷을 사용 중지하면 콜백이 MIP_NODE에 컷을 추가할 수 없게 됩니다. 이 동작은 솔버에 따라 다릅니다.

heuristics

EmphasisProto

전체 검색 절차(MIP만 해당) 또는 문제 해결사의 기본 노력 수준(EMPHASIS_UNSPECIFIED인 경우)에서 접하는 것 이상의 가능한 해결책을 찾기 위한 노력

scaling

EmphasisProto

수치 안정성 또는 문제 해결사 기본 노력 수준(EMPHASIS_UNSPECIFIED인 경우)을 개선하기 위해 문제의 크기를 조정하려는 노력

iteration_limit

int64

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

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

node_limit

int64

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

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

cutoff_limit

double

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

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

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

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

objective_limit

double

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

best_bound_limit

double

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

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

solution_limit

int32

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

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

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

threads

int32

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

random_seed

int32

기본 솔버의 의사 랜덤 숫자 생성기의 시드입니다. 모든 솔버는 의사 난수를 사용하여 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, random_seed))와 동일한 값을 받게 됩니다.

absolute_gap_tolerance

double

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

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

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

relative_gap_allow도 참조하시기 바랍니다.

relative_gap_tolerance

double

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

상대 GAP는 절대 GAP에 대한 정규화된 버전 (absolute_gap_allow에서 정의됨)으로, 정규화는 해결사에 따라 달라집니다. 예를 들어 절대 GAP를 실현 가능한 최적의 해의 목표값으로 나눈 값입니다.

문제 해결사는 상대 GAP가 상대적인 GAP (설정된 경우) 이하가 되면 중지할 수 있으며 TERMINATION_REASON_OPTIMAL을 반환합니다.

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

absolute_gap_allow도 참조하세요.

solution_pool_size

int32

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

SolveResultProto

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

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

입력란
termination

TerminationProto

문제 해결사가 중지된 이유입니다.

solutions[]

SolutionProto

향후 문제 해결사가 구현해야 하는 솔루션 주문에 관한 일반 계약은 다음과 같은 기준으로 주문하는 것입니다. 1. 실행 가능한 기본 솔루션이 있는 솔루션(최적의 원시 목표에 따라 먼저 정렬됨) 2. 이중 실행 가능한 솔루션을 포함한 솔루션, 최적의 이중 목표를 기준으로 정렬 (알려지지 않은 이중 목표가 최악) 3. 나머지 모든 솔루션은 순서와 관계없이 반환할 수 있습니다.

primal_rays[]

PrimalRayProto

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

dual_rays[]

DualRayProto

무한한 이중 개선 또는 이와 동등한 원천성 실현성 인증서에 대한 지침. 일반적으로 종료ReasonProto INFEASIBLE에 제공됩니다.

solve_stats

SolveStatsProto

실행 시간, 반복과 같은 해결 프로세스에 대한 통계입니다.

SolveStatsProto

입력란
solve_time

Duration

math_opt로 측정한 경과된 벽시계 시간(대략 Solver::Solve() 내부 시간)입니다. 참고: 모델 빌드 작업이 이 시간 동안 수행되지는 않습니다.

problem_status

ProblemStatusProto

원시 문제와 이중 문제의 실행 가능성 상태입니다.

simplex_iterations

int64

barrier_iterations

int64

first_order_iterations

int64

node_count

int64

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 솔버가 아닙니다 (이중 정보는 반환되지 않음).

SosConstraintProto

단일 SOS1 또는 SOS2 제약조건을 나타내는 데이터입니다.

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

입력란
expressions[]

LinearExpressionProto

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

weights[]

double

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

name

string

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

SparseBasisStatusVector

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

입력란
ids[]

int64

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

values[]

BasisStatusProto

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

SparseDoubleMatrixProto

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

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

입력란
row_ids[]

int64

column_ids[]

int64

coefficients[]

double

NaN을 포함할 수 없습니다.

SparseDoubleVectorProto

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

입력란
ids[]

int64

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

values[]

double

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

SparseInt32VectorProto

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

입력란
ids[]

int64

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

values[]

int32

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

SparseVectorFilterProto

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

입력란
skip_zero_values

bool

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

filter_by_ids

bool

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

filtered_ids[]

int64

filter_by_ids가 true인 경우 사용할 ID 목록입니다. filter_by_ids가 false인 경우 비워 두어야 합니다. 참고: 이 필드가 비어 있고 filter_by_ids가 true인 경우 결과에 어떠한 정보도 포함하지 않습니다.

TerminationProto

Solve() 호출이 종료된 이유에 관한 모든 정보입니다.

입력란
reason

TerminationReasonProto

값이 TERMINATION_REASON_FEASIBLE 또는 TERMINATION_REASON_NO_SOLUTION_FOUND인 경우 limit에 대한 추가 정보입니다. 자세한 내용은 limit를 참조하세요.

limit

LimitProto

사유가 TERMINATION_REASON_FEASIBLE 또는 TERMINATION_REASON_NO_SOLUTION_FOUND가 아니면 LIMIT_UNSPECIFIED입니다. 모든 문제 해결사가 항상 폐쇄를 야기한 한도를 결정할 수 있는 것은 아니며, 원인을 알 수 없는 경우에는 LIMIT_UNDETERMINED가 사용됩니다.

detail

string

해지에 대한 일반적인 문제 해결사별 추가 정보입니다.

problem_status

ProblemStatusProto

원시 문제와 이중 문제의 실행 가능성 상태입니다. 2023년 7월 18일부로 이 메시지가 누락되었을 수 있습니다. 누락된 경우 problem_status는 SolveResultProto.solve_stats에서 찾을 수 있습니다.

objective_bounds

ObjectiveBoundsProto

최적의 목표값의 경계입니다. 2023년 7월 18일부로 이 메시지가 누락되었을 수 있습니다. 누락된 경우 goal_bounds.primal_bound는 SolveResultProto.solve.stats.best_primal_bound에서, goal_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 근본적인 문제는 실현 불가능하거나 무한합니다. 문제 상태에 대한 자세한 내용은 Sol_stats.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 위에 정의된 상태 중 하나에 해당하지 않는 오류로 인해 알고리즘이 중지되었습니다. 솔루션 정보가 없습니다.

VariablesProto

아래와 같이 '#variables' = size(VariablesProto.ids)를 정의합니다.

입력란
ids[]

int64

음수가 아니고 엄격하게 증가해야 합니다. max(int64) 값은 사용할 수 없습니다.

lower_bounds[]

double

길이는 #variables와 같고 [-inf, inf) 값은 같아야 합니다.

upper_bounds[]

double

길이는 #variables와 같고 값은 (-inf, inf]로 되어 있어야 합니다.

integers[]

bool

길이는 #variables와 같아야 합니다. 연속 변수의 경우 값은 false, 정수 변수의 경우 true입니다.

names[]

string

설정되지 않은 경우 모두 빈 문자열로 간주됩니다. 그렇지 않은 경우 길이는 #variables와 같아야 합니다.

비어 있지 않은 모든 이름은 고유해야 합니다.