Chỉ mục
BasisProto
(thông báo)BasisStatusProto
(enum)DualRayProto
(thông báo)DualSolutionProto
(thông báo)EmphasisProto
(enum)FeasibilityStatusProto
(enum)IndicatorConstraintProto
(thông báo)LPAlgorithmProto
(enum)LimitProto
(enum)LinearConstraintsProto
(thông báo)LinearExpressionProto
(thông báo)ModelProto
(thông báo)ModelSolveParametersProto
(thông báo)ObjectiveBoundsProto
(thông báo)ObjectiveProto
(thông báo)PrimalRayProto
(thông báo)PrimalSolutionProto
(thông báo)ProblemStatusProto
(thông báo)QuadraticConstraintProto
(thông báo)SecondOrderConeConstraintProto
(thông báo)SolutionHintProto
(thông báo)SolutionProto
(thông báo)SolutionStatusProto
(enum)SolveParametersProto
(thông báo)SolveResultProto
(thông báo)SolveStatsProto
(thông báo)SolverTypeProto
(enum)SosConstraintProto
(thông báo)SparseBasisStatusVector
(thông báo)SparseDoubleMatrixProto
(thông báo)SparseDoubleVectorProto
(thông báo)SparseInt32VectorProto
(thông báo)SparseVectorFilterProto
(thông báo)TerminationProto
(thông báo)TerminationReasonProto
(enum)VariablesProto
(thông báo)
BasisProto
Đặc tính tổ hợp để tìm lời giải cho chương trình tuyến tính.
Phương pháp đơn giản để giải các chương trình tuyến tính luôn trả về một "giải pháp khả thi cơ bản" có thể được mô tả kết hợp bằng cơ sở. Cơ sở sẽ chỉ định BasisStatusProto cho mọi quy tắc ràng buộc biến và tuyến tính.
Ví dụ: hãy xem xét một LP dạng chuẩn: min c * x s.t. A * x = b x >= 0 có nhiều biến hơn so với hạn chế và có thứ hạng hàng đầy đủ là A.
Gọi n là số biến và m số giới hạn tuyến tính. Cơ sở hợp lệ cho vấn đề này có thể được xây dựng như sau: * Tất cả ràng buộc sẽ có trạng thái cơ sở FIXED. * Chọn m biến sao cho các cột A là độc lập tuyến tính và gán trạng thái cơ bản. * Chỉ định trạng thái AT_LEFT cho các biến n – m còn lại.
Nghiệm cơ bản cho cơ sở này là nghiệm duy nhất của A * x = b có tất cả các biến có trạng thái AT_LEFT cố định vào giới hạn dưới của chúng (tất cả đều bằng 0). Giải pháp thu được được gọi là giải pháp khả thi cơ bản nếu nó cũng thoả mãn x >= 0.
Trường | |
---|---|
constraint_status |
Trạng thái cơ sở của quy tắc ràng buộc. Yêu cầu: * binding_status.ids bằng LinearConstraints.ids. |
variable_status |
Trạng thái cơ sở của biến. Yêu cầu: * scope_status.ids bằng VariablesProto.ids. |
basic_dual_feasibility |
Đây là một tính năng nâng cao mà MathOpt sử dụng để mô tả tính khả thi của các giải pháp LP dưới mức tối ưu (các giải pháp tối ưu sẽ luôn có trạng thái SOLUTION_STATUS_FEASIBLE). Đối với LP một mặt, giá trị này phải bằng với trạng thái khả thi của giải pháp kép đã liên kết. Đối với LP hai mặt, giá trị này có thể khác trong một số trường hợp hiếm gặp (ví dụ: các nghiệm không hoàn toàn với đơn giản nguyên tố). Nếu bạn đang cung cấp cơ sở bắt đầu thông qua ModelSolveParametersProto.Initial_basis, giá trị này sẽ bị bỏ qua. Dữ liệu này chỉ phù hợp với cơ sở mà SolutionProto.basis trả về. |
BasisStatusProto
Trạng thái của một biến/quy tắc ràng buộc trong cơ sở LP.
Enum | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Giá trị bảo vệ không biểu thị trạng thái nào. |
BASIS_STATUS_FREE |
Biến/giới hạn là tự do (không có giới hạn hữu hạn). |
BASIS_STATUS_AT_LOWER_BOUND |
Biến/ràng buộc ở giới hạn dưới (phải có giới hạn). |
BASIS_STATUS_AT_UPPER_BOUND |
Biến/giới hạn nằm ở giới hạn trên (phải có giới hạn). |
BASIS_STATUS_FIXED_VALUE |
Biến/quy tắc ràng buộc có giới hạn dưới và giới hạn trên có giới hạn giống hệt nhau. |
BASIS_STATUS_BASIC |
Biến/quy tắc ràng buộc ở đây là cơ bản. |
DualRayProto
Hướng cải thiện không giới hạn đối với cả hai yếu tố tối ưu hoá hoặc vấn đề, tương đương với chứng chỉ tính không khả thi ban đầu.
Ví dụ: hãy xem xét cặp chương trình tuyến tính cặp nguyên tố: (Primal) (Kép) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Tia kép là cặp (y, r) thoả mãn: b * y > 0 y * A + r = 0 y, r >= 0 Quan sát thấy việc cộng bội dương của (y, r) vào nghiệm khả thi kép sẽ duy trì tính khả thi kép và cải thiện mục tiêu (chứng minh kép không giới hạn). Tia kép cũng chứng minh bài toán nguyên thuỷ là không khả thi.
Trong thông báo DualRay dưới đây, y là double_values và r là discount_costs.
Trường | |
---|---|
dual_values |
Yêu cầu: * Dual_values.ids là các phần tử của LinearConstraints.ids. * kép_values.values đều phải hữu hạn. |
reduced_costs |
Yêu cầu: * discount_costs.ids là các phần tử của VariablesProto.ids. * discount_costs.values phải là giá trị hữu hạn. |
DualSolutionProto
Một giải pháp cho cả vấn đề tối ưu hoá.
Ví dụ: hãy xem xét cặp chương trình tuyến tính cặp nguyên tố: (Primal) (Kép) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Nghiệm kép là cặp (y, r). Điều này có thể xảy ra nếu đáp ứng các điều kiện ràng buộc từ (Kép) ở trên.
Trong thông báo dưới đây, y là giá trị kép, r là chi phí giảm và b * y là giá trị mục tiêu.
Trường | |
---|---|
dual_values |
Yêu cầu: * Dual_values.ids là các phần tử của LinearConstraints.ids. * kép_values.values đều phải hữu hạn. |
reduced_costs |
Yêu cầu: * discount_costs.ids là các phần tử của VariablesProto.ids. * discount_costs.values phải là giá trị hữu hạn. |
feasibility_status |
Trạng thái khả thi của giải pháp theo trình giải quyết cơ bản. |
objective_value |
|
EmphasisProto
Mức độ nỗ lực được áp dụng cho một tác vụ không bắt buộc trong khi giải (xem SolveParametersProto để sử dụng).
Điểm nhấn được dùng để định cấu hình tính năng trình giải như sau: * Nếu một trình giải toán không hỗ trợ tính năng này, thì chỉ UNSPECIFIED sẽ luôn hợp lệ, mọi chế độ cài đặt khác thường sẽ có lỗi đối số không hợp lệ (một số trình giải toán cũng có thể chấp nhận TẮT). * Nếu trình giải toán hỗ trợ tính năng: – Khi bạn đặt thành UNSPECIFIED, giá trị mặc định cơ bản sẽ được dùng. – Khi không thể tắt tính năng này, trạng thái TẮT sẽ trả về lỗi. – Nếu tính năng này được bật theo mặc định thì chế độ mặc định của trình giải thường được ánh xạ tới TRUNG BÌNH. – Nếu tính năng này được hỗ trợ, các hàm LOW, TRUNG BÌNH, HIGH và VERY HIGH sẽ không bao giờ hiển thị lỗi và sẽ được đánh dấu dựa trên kết quả phù hợp nhất.
Enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
Trạng thái khả thi của vấn đề theo tuyên bố của trình giải quyết (không yêu cầu người giải quyết trả lại chứng chỉ cho yêu cầu xác nhận quyền sở hữu).
Enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Giá trị bảo vệ không biểu thị trạng thái nào. |
FEASIBILITY_STATUS_UNDETERMINED |
Trình giải quyết không xác nhận trạng thái. |
FEASIBILITY_STATUS_FEASIBLE |
Solver tuyên bố vấn đề này có thể thực hiện được. |
FEASIBILITY_STATUS_INFEASIBLE |
Solver tuyên bố sự cố này không khả thi. |
IndicatorConstraintProto
Dữ liệu biểu thị một điều kiện ràng buộc chỉ báo có dạng: Variable(indicator_id) = (activate_on_zero ? 0 : 1) ⇒ giới hạn dưới <= biểu thức <= giới hạn trên.
Nếu một biến liên quan đến quy tắc ràng buộc này (chỉ báo hoặc xuất hiện trong expression
) bị xoá, thì biến đó sẽ được coi là được đặt thành 0. Cụ thể, việc xoá biến chỉ báo có nghĩa là giới hạn chỉ báo sẽ trống nếu activate_on_zero
là false và tương đương với điều kiện ràng buộc tuyến tính nếu activate_on_zero
là true.
Trường | |
---|---|
activate_on_zero |
Nếu đúng, thì nếu biến chỉ báo nhận giá trị 0, thì ràng buộc ngụ ý phải giữ nguyên. Ngược lại, nếu biến chỉ báo nhận giá trị 1, thì ràng buộc ngụ ý phải giữ. |
expression |
Phải là một biểu thức tuyến tính hợp lệ đối với mô hình chứa: * Tất cả các điều kiện đã nêu trên |
lower_bound |
Phải có giá trị bằng [-inf, inf); không được là NaN. |
upper_bound |
Phải có giá trị trong (-inf, inf]; không được là NaN. |
name |
Thông báo gốc có thể có yêu cầu về tính riêng biệt trong trường này. Ví dụ: xem |
indicator_id |
Mã nhận dạng tương ứng với một biến nhị phân hoặc chưa được đặt. Nếu bạn không đặt chính sách này, thì điều kiện ràng buộc đối với chỉ báo sẽ bị bỏ qua. Nếu đặt giá trị, chúng ta yêu cầu: * VariablesProto.integers[indicator_id] = true, * VariablesProto.lower_bounds[indicator_id] >= 0, * VariablesProto.upper_bounds[indicator_id] <= 1. MathOpt không xác thực các điều kiện này, nhưng nếu bạn không thoả mãn điều kiện này, trình giải toán sẽ trả về lỗi khi giải. |
LPAlgorithmProto
Chọn một thuật toán để giải các chương trình tuyến tính.
Enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Phương thức đơn giản (nguyên bản). Thường có thể đưa ra nghiệm nguyên thuỷ và nghiệm kép, tia nguyên tố/kép đối với các bài toán nguyên thuỷ/kép không giới hạn và cơ sở. |
LP_ALGORITHM_DUAL_SIMPLEX |
Phương thức đơn giản kép. Thường có thể đưa ra nghiệm nguyên thuỷ và nghiệm kép, tia nguyên tố/kép đối với các bài toán nguyên thuỷ/kép không giới hạn và cơ sở. |
LP_ALGORITHM_BARRIER |
Phương pháp chắn, còn thường được gọi là phương pháp điểm bên trong (IPM). Thường có thể đưa ra cả dung dịch nguyên tố và dung dịch kép. Một số phương pháp triển khai cũng có thể tạo ra tia trên các vấn đề không ràng buộc/không khả thi. Cơ sở không được đưa ra trừ phi trình giải quyết cơ bản thực hiện "chuyển đổi" và kết thúc bằng đơn giản. |
LP_ALGORITHM_FIRST_ORDER |
Một thuật toán dựa trên phương thức bậc nhất. Những giải pháp này thường sẽ tạo ra cả giải pháp ban đầu và giải pháp kép, cũng như có thể cũng có cả chứng chỉ không khả thi nguyên gốc và/hoặc giải pháp kép. Phương thức bậc nhất thường sẽ cung cấp giải pháp với độ chính xác thấp hơn. Vì vậy, người dùng nên chú ý đặt thông số chất lượng của giải pháp (ví dụ: dung sai) và xác thực giải pháp. |
LimitProto
Khi một Solve() ngừng sớm bằng TermReasonProto FEASIBLE hoặc NO_SOLUTION_FOUND, thì đây là giới hạn cụ thể đã đạt đến.
Enum | |
---|---|
LIMIT_UNSPECIFIED |
Được sử dụng làm giá trị rỗng khi chúng tôi chấm dứt không phải trong một giới hạn (ví dụ: termINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Trình giải toán cơ bản không cho biết giới hạn đã đạt đến. |
LIMIT_ITERATION |
Một thuật toán lặp lại đã dừng sau khi tiến hành số lần lặp tối đa (ví dụ: vòng lặp đơn giản hoặc rào cản). |
LIMIT_TIME |
Thuật toán đã dừng sau thời gian tính toán do người dùng chỉ định. |
LIMIT_NODE |
Thuật toán nhánh và giới hạn đã dừng vì thuật toán này đã khám phá số lượng nút tối đa trong cây nhánh và giới hạn. |
LIMIT_SOLUTION |
Thuật toán đã ngừng hoạt động vì tìm thấy số lượng giải pháp cần thiết. Tính năng này thường được dùng trong MIP để yêu cầu trình giải toán trả về giải pháp khả thi đầu tiên mà hệ thống gặp phải. |
LIMIT_MEMORY |
Thuật toán đã ngừng hoạt động vì hết bộ nhớ. |
LIMIT_CUTOFF |
Trình giải toán đã chạy với điểm hạn chế (ví dụ: đã đặt SolveParameters.cutoff_limit) trên mục tiêu, cho biết rằng người dùng không muốn có bất kỳ giải pháp nào tệ hơn điểm cắt và trình giải giải kết luận là không có giải pháp nào ít nhất bằng điểm cắt. Thường thì Google sẽ không cung cấp thêm thông tin về giải pháp. |
LIMIT_OBJECTIVE |
Thuật toán đã ngừng hoạt động vì đã tìm thấy một giải pháp hoặc một giới hạn tốt hơn giới hạn do người dùng đặt (xem SolveParameters.objective_limit và SolveParameters.best_bound_limit). |
LIMIT_NORM |
Thuật toán đã ngừng hoạt động vì tiêu chuẩn của một vòng lặp trở nên quá lớn. |
LIMIT_INTERRUPTED |
Thuật toán đã dừng lại do tín hiệu gián đoạn hoặc yêu cầu làm gián đoạn của người dùng. |
LIMIT_SLOW_PROGRESS |
Thuật toán đã ngừng hoạt động vì không thể tiếp tục cải tiến giải pháp. |
LIMIT_OTHER |
Thuật toán đã ngừng hoạt động do một giới hạn không được đề cập ở trên. Lưu ý rằng LIMIT_UNDEtermINED được sử dụng khi không thể xác định lý do và LIMIT_OTHER được sử dụng khi đã biết lý do nhưng không phù hợp với bất kỳ phương án thay thế nào ở trên. Chấm dứt Proto.detail có thể chứa thông tin bổ sung về giới hạn. |
LinearConstraintsProto
Như được sử dụng dưới đây, chúng tôi xác định "#linearConstraint" = kích thước(LinearConstraintsProto.ids).
Trường | |
---|---|
ids[] |
Phải là số không âm và tăng dần. Không thể dùng giá trị max(int64). |
lower_bounds[] |
Phải có độ dài bằng #giới hạn tuyến tính, các giá trị tính bằng [-inf, inf). |
upper_bounds[] |
Phải có độ dài bằng #giới hạn tuyến tính, các giá trị trong (-inf, inf]. |
names[] |
Nếu bạn không đặt chính sách này, giá trị được giả định là tất cả các chuỗi trống. Nếu không, đoạn mã phải có độ dài bằng #hàm ràng buộc tuyến tính. Tất cả tên không trống phải khác biệt. |
LinearExpressionProto
Biểu diễn thưa của một biểu thức tuyến tính (tổng các biến có trọng số cộng với độ lệch không đổi).
Trường | |
---|---|
ids[] |
Mã của biến. Phải được sắp xếp (theo thứ tự tăng dần) với tất cả các phần tử riêng biệt. |
coefficients[] |
Phải có độ dài bằng mã nhận dạng. Giá trị không được hữu hạn và không được là NaN. |
offset |
Phải hữu hạn và không thể là NaN. |
ModelProto
Vấn đề về tối ưu hoá. MathOpt hỗ trợ: – Biến quyết định liên tục và số nguyên với các giới hạn hữu hạn không bắt buộc. – Mục tiêu tuyến tính và mục tiêu bậc hai (một hoặc nhiều mục tiêu), giảm thiểu hoặc tối đa. - Một số loại ràng buộc, bao gồm: * Các ràng buộc tuyến tính * Các ràng buộc bậc hai * Các ràng buộc về nón bậc hai * Các ràng buộc logic > Các ràng buộc SOS1 và SOS2 > Các ràng buộc của chỉ báo
Theo mặc định, các điều kiện ràng buộc được thể hiện trong bản đồ "mã nhận dạng với dữ liệu". Tuy nhiên, chúng ta biểu diễn các ràng buộc tuyến tính ở định dạng "cấu trúc mảng" hiệu quả hơn.
Trường | |
---|---|
name |
|
variables |
|
objective |
Mục tiêu chính của mô hình. |
auxiliary_objectives |
Các mục tiêu phụ trợ để sử dụng trong mô hình đa mục tiêu. Mã khoá ánh xạ phải nằm trong giá trị [0, max(int64)). Mỗi mức độ ưu tiên và mỗi tên không được để trống phải là duy nhất và cũng khác biệt với |
linear_constraints |
|
linear_constraint_matrix |
Các hệ số biến cho các điều kiện ràng buộc tuyến tính. Nếu một biến liên quan đến quy tắc ràng buộc này bị xoá, thì biến đó sẽ được coi như được đặt thành 0. Yêu cầu: * Linear_boundt_trix.row_ids là các phần tử củaLinear_Constraintts.ids. * Linear_Constraintt_trix.column_ids là các phần tử của biến.ids. * Các mục nhập ma trận chưa được chỉ định bằng 0. * tất cả các giá trị tuyến tính__tr_ăng_ đều phải hữu hạn. |
quadratic_constraints |
Các ràng buộc bậc hai trong mô hình. |
second_order_cone_constraints |
Các quy tắc ràng buộc của nón bậc hai trong mô hình. |
sos1_constraints |
Các điều kiện ràng buộc của SOS1 trong mô hình, ràng buộc rằng tối đa một |
sos2_constraints |
Các điều kiện ràng buộc của SOS2 trong mô hình này ràng buộc rằng tối đa hai mục nhập của |
indicator_constraints |
Các quy tắc ràng buộc về chỉ báo trong mô hình sẽ thực thi điều đó nếu đặt một "biến chỉ báo" nhị phân thành 1, thì "quy tắc ràng buộc ngụ ý" phải giữ nguyên. |
ModelSolveParametersProto
Trường | |
---|---|
variable_values_filter |
Bộ lọc được áp dụng cho tất cả các vùng chứa thưa được trả về được khoá bởi các biến trong PrimalSolutionProto và PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values). Yêu cầu: * filter_ids là các phần tử của VariablesProto.ids. |
dual_values_filter |
Bộ lọc được áp dụng cho tất cả các vùng chứa thưa được trả về được khoá bởi các điều kiện ràng buộc tuyến tính trong DualSolutionProto và DualRay (DualSolutionProto.dual_values, DualRay.dual_values). Yêu cầu: * filter_id là các phần tử của LinearConstraints.ids. |
reduced_costs_filter |
Bộ lọc được áp dụng cho tất cả các vùng chứa thưa được trả về được khoá theo các biến trong DualSolutionProto và DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs). Yêu cầu: * filter_ids là các phần tử của VariablesProto.ids. |
initial_basis |
Cơ sở ban đầu không bắt buộc cho trình phân giải LP đơn giản khởi động ấm. Nếu được đặt, giá trị này dự kiến sẽ hợp lệ theo |
solution_hints[] |
Gợi ý giải pháp không bắt buộc. Nếu trình giải cơ bản chỉ chấp nhận một gợi ý, thì gợi ý đầu tiên sẽ được sử dụng. |
branching_priorities |
Mức độ ưu tiên phân nhánh không bắt buộc. Các biến có giá trị cao hơn sẽ được phân nhánh trước. Các biến không đặt mức độ ưu tiên sẽ nhận được mức độ ưu tiên mặc định của trình giải (thường là 0). Yêu cầu: * sourceing_preferred.values phải là giá trị hữu hạn. * Branching_Priority.ids phải là các phần tử của VariablesProto.ids. |
ObjectiveBoundsProto
Giới hạn giá trị mục tiêu tối ưu.
Trường | |
---|---|
primal_bound |
Trình giải toán tuyên bố giá trị tối ưu bằng hoặc tốt hơn (nhỏ hơn để thu gọn và lớn hơn để tối đa hoá) so với giới hạn nguyên thuỷ tối đa với dung sai khả thi ban đầu của các bộ giải (xem cảnh báo dưới đây): * Prial_bound là không đáng kể (+inf để tối đa hoá và tối đa hoá -inf) khi trình giải toán không tuyên bố là có giới hạn như vậy. * Prial_bound có thể gần với giá trị tối ưu hơn mục tiêu của giải pháp khả thi gốc tốt nhất. Cụ thể, native_bound có thể không quan trọng ngay cả khi không có giải pháp khả thi nguyên gốc nào được trả về. Cảnh báo: Tuyên bố chính xác là có một nghiệm nguyên gốc: * khả thi về mặt số học (tức là khả thi theo khả năng chấp nhận của trình giải) và * có giá trị mục tiêu Prial_bound. Giải pháp khả thi về mặt số lượng này có thể hơi không khả thi, trong trường hợp đó Prial_bound có thể tốt hơn giá trị tối ưu. Việc chuyển đổi dung sai khả thi nguyên gốc thành dung sai trên Prial_bound là không nhỏ, đặc biệt khi dung sai khả thi tương đối lớn (ví dụ: khi giải quyết bằng PDLP). |
dual_bound |
Trình giải toán tuyên bố giá trị tối ưu bằng hoặc kém hơn (lớn hơn để giảm tối đa và nhỏ hơn để tối đa hoá) so với giới hạn kép lên đến dung sai khả thi kép của trình giải (xem cảnh báo bên dưới): * giới hạn kép là không đáng kể (-inf để thu nhỏ và tối đa hoá +inf) khi trình giải toán không tuyên bố giới hạn như vậy. Tương tự như Prial_bound, điều này có thể xảy ra với một số trình giải toán ngay cả khi trả về giá trị tối ưu. Trình giải quyết MIP thường sẽ báo cáo ràng buộc ngay cả khi thông tin đó không chính xác. * đối với các bài toán liên tục giới hạn kép có thể gần với giá trị tối ưu hơn so với mục tiêu của giải pháp khả thi kép tốt nhất. Đối với MIP, một trong những giá trị không quan trọng đầu tiên của giới hạn kép thường là giá trị tối ưu của việc nới lỏng LP của MIP. * giới hạn_kép nên tốt hơn (nhỏ hơn để giảm thiểu tối đa và lớn hơn để tối đa hoá) so với giới hạn_nguyên thuỷ cho đến dung sai của trình giải (xem cảnh báo dưới đây). Cảnh báo: * Đối với các bài toán liên tục, tuyên bố chính xác là có một giải pháp kép: * khả thi về mặt số học (tức là khả thi tuỳ thuộc vào khả năng giải quyết của bài toán) và * có giá trị mục tiêu kép. Giải pháp khả thi về mặt số lượng này có thể không khả thi một chút, trong trường hợp double_bound có thể sẽ tệ hơn so với giá trị tối ưu và Prial_bound. Tương tự như trường hợp ban đầu, việc chuyển đổi dung sai khả thi kép thành dung sai trên ràng buộc kép là không hề nhỏ, đặc biệt khi dung sai khả thi tương đối lớn. Tuy nhiên, một số trình giải toán cung cấp một phiên bản chính xác của double_bound an toàn hơn về mặt số học. Bạn có thể truy cập vào phiên bản đã sửa lỗi này thông qua kết quả cụ thể của trình giải toán (ví dụ: PDlp_output.convergence_information.corrected_dual_objective) * Đối với các trình giải MIP, giới hạn kép có thể được liên kết với một giải pháp kép để giải quyết một số trường hợp thư giãn liên tục (ví dụ: thư giãn LP). Tuy nhiên, đây thường là hệ quả phức tạp của quá trình thực thi các trình giải quyết và thường không chính xác hơn các giới hạn mà các trình giải LP báo cáo. |
ObjectiveProto
Trường | |
---|---|
maximize |
false là giảm thiểu, true là tối đa hóa |
offset |
Phải hữu hạn và không phải NaN. |
linear_coefficients |
Thuật ngữ ObjectiveProto tuyến tính trong các biến quyết định. Yêu cầu: * Linear_coperformances.ids là các phần tử của VariablesProto.ids. * VariablesProto không được chỉ định tương ứng với 0. * hệ số tuyến tính.giá trị tuyến tính phải là hữu hạn. * hệ số tuyến tính.values có thể bằng 0, nhưng việc này chỉ lãng phí không gian. |
quadratic_coefficients |
Cụm từ khách quan mang tính bậc hai trong các biến quyết định. Các yêu cầu ngoài những yêu cầu đối với thông báo SparseDoubleMatrixProto: * Mỗi phần tử của quadratic_co {7/}s.row_ids và mỗi phần tử của quadratic_co {7/}s.column_ids phải là một thành phần của VariablesProto.ids. * Ma trận phải là hình tam giác trên: với mỗi i, hệ số bậc hai.row_ids[i] <= quadratic_co {7/}s.column_ids[i]. Lưu ý: * Các thuật ngữ không được lưu trữ rõ ràng có hệ số bằng 0. * Các phần tử của hệ số bậc hai.Hệ số có thể bằng 0, nhưng việc này chỉ lãng phí không gian. |
name |
Các thông báo gốc có thể có yêu cầu về tính riêng biệt trong trường này; ví dụ: xem ModelProto.objectives và AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
Đối với các bài toán đa mục tiêu, mức độ ưu tiên của mục tiêu này so với các mục tiêu khác (càng thấp thì càng quan trọng). Giá trị này không được là số âm. Hơn nữa, mỗi mức độ ưu tiên của mục tiêu trong mô hình phải khác biệt tại thời điểm giải quyết. Điều kiện này không được xác thực ở cấp proto, vì vậy, các mô hình có thể tạm thời có các mục tiêu có cùng mức độ ưu tiên. |
PrimalRayProto
Hướng cải thiện không giới hạn của bài toán tối ưu hoá; tương đương với chứng chỉ không khả thi cho bài toán kép của bài toán tối ưu hoá.
Ví dụ: xem xét một chương trình tuyến tính đơn giản: min c * x s.t. A * x >= b x >= 0 Tia nguyên thuỷ là một x thoả mãn: c * x < 0 A * x >= 0 x >= 0 Tia nguyên tố cũng chứng minh vấn đề tối ưu hoá kép là không khả thi.
Trong thông báo PrimalRay dưới đây, biến_values là x.
Trường | |
---|---|
variable_values |
Yêu cầu: * Variable_values.ids là các phần tử của VariablesProto.ids. * tất cả biến_values.values phải là giá trị hữu hạn. |
PrimalSolutionProto
Giải pháp cho một vấn đề tối ưu hoá.
Ví dụ: hãy xem xét một chương trình tuyến tính đơn giản: min c * x s.t. A * x >= b x >= 0. Nghiệm nguyên sơ là gán các giá trị cho x. Điều này có thể xảy ra nếu nó thỏa mãn A * x >= b và x >= 0 từ trên xuống. Trong thông báo PrimalSolutionProto dưới đây, các giá trị biến là x và giá trị mục tiêu là c * x.
Trường | |
---|---|
variable_values |
Yêu cầu: * Variable_values.ids là các phần tử của VariablesProto.ids. * tất cả biến_values.values phải là giá trị hữu hạn. |
objective_value |
Giá trị mục tiêu do trình giải toán cơ bản tính toán. Không được là vô hạn hoặc NaN. |
auxiliary_objective_values |
Các giá trị mục tiêu phụ do trình giải toán cơ bản tính toán. Khoá phải là mã mục tiêu phụ hợp lệ. Giá trị không được là vô hạn hoặc NaN. |
feasibility_status |
Trạng thái khả thi của giải pháp theo trình giải quyết cơ bản. |
ProblemStatusProto
Trạng thái khả thi của vấn đề nguyên gốc và vấn đề kép của vấn đề này (hoặc kép của một quá trình thư giãn liên tục) theo tuyên bố của người giải quyết. Trình giải quyết không bắt buộc phải trả lại chứng chỉ cho tuyên bố (ví dụ: trình giải quyết có thể tuyên bố về tính khả thi ban đầu mà không trả về một giải pháp khả thi ban đầu). Trạng thái kết hợp này cung cấp thông tin mô tả toàn diện về tuyên bố của người giải về tính khả thi và tính không ràng buộc của bài toán đã giải. Ví dụ:
- trạng thái khả thi cho bài toán nguyên hàm và bài toán kép chỉ ra điều kiện sơ cấp khả thi và bị giới hạn và có thể có giải pháp tối ưu (đảm bảo cho bài toán không có ràng buộc phi tuyến tính).
- một khả năng khả thi nguyên gốc và trạng thái không khả thi kép cho thấy vấn đề nguyên thuỷ là không có giới hạn (tức là có các giải pháp tốt tuỳ ý).
Lưu ý rằng trạng thái không khả thi kép (tức là đi kèm với trạng thái nguyên gốc chưa được xác định) không ngụ ý vấn đề nguyên gốc không bị ràng buộc vì chúng ta có thể khiến cả hai vấn đề đều không khả thi. Ngoài ra, mặc dù trạng thái khả thi ban đầu và trạng thái khả thi kép có thể ngụ ý sự tồn tại của một giải pháp tối ưu nhưng điều này không đảm bảo rằng trình giải toán thực sự tìm thấy giải pháp tối ưu đó.
Trường | |
---|---|
primal_status |
Trạng thái của sự cố ban đầu. |
dual_status |
Trạng thái của bài toán kép (hoặc bài toán kép khi thư giãn liên tục). |
primal_or_dual_infeasible |
Nếu đúng, trình giải toán tuyên bố bài toán nguyên gốc hoặc bài toán kép là không khả thi, nhưng không biết bài toán nào (hoặc cả hai có khả thi hay không). Chỉ có thể đúng khi Prial_problem_status = Dual_problem_status = kUndefined. Thông tin bổ sung này thường cần thiết khi quá trình xử lý trước xác định không có giải pháp tối ưu cho vấn đề (nhưng không thể xác định liệu vấn đề là do tính không khả thi, không bị ràng buộc hay cả hai). |
QuadraticConstraintProto
Một ràng buộc bậc hai có dạng: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.
Nếu một biến liên quan đến quy tắc ràng buộc này bị xoá, thì biến đó sẽ được coi như được đặt thành 0.
Trường | |
---|---|
linear_terms |
Những thuật ngữ tuyến tính trong các biến quyết định. Ngoài các yêu cầu về thông báo SparseDoubleVectorProto, chúng tôi yêu cầu: * Linear_terms.ids là các phần tử của VariablesProto.ids. * tất cả giá trị tuyến tính điều kiện tuyến tính phải là hữu hạn và không phải giá trị NaN. Lưu ý: * Các mã biến bị bỏ qua có hệ số tương ứng bằng 0. * Linear_terms.values có thể bằng 0, nhưng việc này chỉ lãng phí không gian. |
quadratic_terms |
Những thuật ngữ bậc hai trong các biến quyết định. Ngoài các yêu cầu đối với thông báo SparseDoubleMatrixProto, chúng tôi yêu cầu: * Mỗi phần tử của quadratic_terms.row_ids và mỗi phần tử của quadratic_terms.column_ids phải là một phần tử của VariablesProto.ids. * Ma trận phải là hình tam giác trên: đối với mỗi i, điều kiện bậc hai.row_ids[i] <= quadratic_terms.column_ids[i]. Lưu ý: * Các thuật ngữ không được lưu trữ rõ ràng có hệ số bằng 0. * Các phần tử của quadratic_terms.cohệ số có thể bằng 0, nhưng việc này chỉ gây lãng phí không gian. |
lower_bound |
Phải có giá trị tính bằng [-inf, inf) và nhỏ hơn hoặc bằng |
upper_bound |
Phải có giá trị bằng (-inf, inf] và lớn hơn hoặc bằng |
name |
Thông báo mẹ có thể có các yêu cầu về tính riêng biệt trên trường này; ví dụ: xem ModelProto.quadratic_Constraintts và QuadraticConstraintUpdatesProto.new_constraints. |
SecondOrderConeConstraintProto
Một ràng buộc về hình nón bậc hai của dạng:
|arguments_to_norm
||_2 <= upper_bound
,
trong đó upper_bound
và mỗi phần tử của arguments_to_norm
là biểu thức tuyến tính.
Nếu một biến liên quan đến quy tắc ràng buộc này bị xoá, thì biến đó sẽ được coi như được đặt thành 0.
Trường | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
Thông báo gốc có thể có yêu cầu về tính riêng biệt trong trường này. Ví dụ: xem |
SolutionHintProto
Một giải pháp bắt đầu được đề xuất cho trình giải toán.
Các trình phân giải MIP thường chỉ cần thông tin nguyên gốc (variable_values
), trong khi trình giải LP cần cả thông tin nguyên gốc và thông tin kép (dual_values
).
Nhiều trình phân giải MIP có thể xử lý được: (1) giải pháp từng phần không nêu rõ tất cả các biến hoặc (2) giải pháp không khả thi. Trong những trường hợp này, trình giải quyết thường giải quyết một MIP phụ để hoàn tất/sửa gợi ý.
Cách người giải quyết sử dụng gợi ý (nếu có) phụ thuộc nhiều vào cách giải, dạng bài toán và thuật toán được sử dụng. Cách đáng tin cậy nhất để đảm bảo gợi ý có hiệu quả là đọc nhật ký của trình giải cơ bản có và không có gợi ý.
Các trình giải LP dạng đơn giản thường ưu tiên cơ sở ban đầu là gợi ý giải pháp (nếu không thì họ cần chuyển đổi gợi ý để chuyển đổi gợi ý thành một giải pháp cơ bản khả thi).
Trường | |
---|---|
variable_values |
Có thể chỉ định một phần các giá trị cho biến nguyên gốc của bài toán. Các yêu cầu độc lập với trình giải quyết cho thông báo phụ này là: * variable_values.ids là các phần tử của VariablesProto.ids. * tất cả biến_values.values phải là giá trị hữu hạn. |
dual_values |
Chỉ định (có thể là một phần) giá trị cho giới hạn tuyến tính của bài toán. Yêu cầu: * double_values.ids là các phần tử của LinearConstraintsProto.ids. * kép_values.values đều phải hữu hạn. |
SolutionProto
Những nội dung trong giải pháp sẽ tuỳ thuộc vào loại vấn đề và cách giải quyết. Một mẫu hình phổ biến hiện nay là 1. Trình phân giải MIP chỉ trả về giải pháp nguyên thuỷ. 2. Các trình giải LP đơn giản thường trả về cơ sở và nghiệm nguyên tố và nghiệm kép liên quan đến cơ sở này. 3. Các phép giải liên tục khác thường trả về một nghiệm nguyên thuỷ và nghiệm kép. Các nghiệm này kết nối với nhau dưới dạng phụ thuộc vào trình giải.
Yêu cầu: * phải đặt ít nhất một trường; không được để trống một giải pháp.
Trường | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
Tính khả thi của một nghiệm nguyên thuỷ hoặc giải pháp kép theo tuyên bố của người giải toán.
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Giá trị bảo vệ không biểu thị trạng thái nào. |
SOLUTION_STATUS_UNDETERMINED |
Trình giải quyết không xác nhận trạng thái khả thi. |
SOLUTION_STATUS_FEASIBLE |
Solver tuyên bố giải pháp này khả thi. |
SOLUTION_STATUS_INFEASIBLE |
Solver tuyên bố giải pháp này không khả thi. |
SolveParametersProto
Các tham số để kiểm soát một giải pháp duy nhất.
Chứa cả hai tham số chung cho tất cả các trình giải toán (ví dụ: giới hạn thời gian) và tham số cho một trình giải toán cụ thể, ví dụ: gscip. Nếu một giá trị được đặt trong cả trường phổ biến và trường cụ thể của trình giải, thì chế độ cài đặt cụ thể của trình giải sẽ được sử dụng.
Các tham số phổ biến không bắt buộc và không được đặt hoặc một giá trị enum không chỉ định giá trị sẽ cho biết trình giải toán đang được sử dụng theo giá trị mặc định.
Các tham số cụ thể của Solver cho các trình giải toán không phải là tham số đang được sử dụng sẽ bị bỏ qua.
Các tham số phụ thuộc vào mô hình (ví dụ: mức độ ưu tiên phân nhánh được đặt cho mỗi biến) được chuyển vào ModelSolveParametersProto.
Trường | |
---|---|
time_limit |
Thời gian tối đa mà người giải toán cần dành cho bài toán (hoặc vô hạn nếu chưa đặt). Giá trị này không phải là giới hạn cố định, thời gian giải quyết có thể vượt quá giá trị này một chút. Tham số này luôn được truyền đến trình giải toán cơ bản, chứ không sử dụng trình giải toán mặc định. |
enable_output |
Cho phép in dấu vết triển khai trình giải quyết. Vị trí của những dấu vết đó phụ thuộc vào trình giải quyết. Đối với SCIP và Gurobi, đây sẽ là các luồng đầu ra tiêu chuẩn. Đối với Glop và CP-SAT, thao tác này sẽ LOG(INFO). Xin lưu ý rằng nếu trình giải quyết hỗ trợ lệnh gọi lại tin nhắn và người dùng đăng ký lệnh gọi lại cho hàm đó, thì giá trị tham số này sẽ bị bỏ qua và không có dấu vết nào được in. |
lp_algorithm |
Thuật toán để giải chương trình tuyến tính. Nếu là LP_ALGORITHM_UNSPECIFIED, hãy sử dụng thuật toán mặc định của trình giải toán. Đối với những bài toán không phải là chương trình tuyến tính nhưng trong đó việc lập trình tuyến tính là một chương trình con, thì trình giải toán có thể sử dụng giá trị này. Ví dụ: Trình giải quyết MIP thường chỉ dùng cách này cho quá trình giải LP gốc (và nếu không thì sử dụng đơn giản kép). |
presolve |
Cố gắng đơn giản hoá bài toán trước khi bắt đầu thuật toán chính hoặc mức nỗ lực mặc định của trình giải toán nếu {/7}_UNSPECIFIED. |
cuts |
Nỗ lực để tăng mức nới lỏng LP mạnh hơn (chỉ dành cho MIP) hoặc mức nỗ lực mặc định của trình giải nếu {7}_UNSPECIFIED. LƯU Ý: việc tắt tính năng cắt giảm có thể ngăn lệnh gọi lại có cơ hội thêm đoạn cắt tại MIP_node. Đây là hành vi riêng của một trình giải quyết. |
heuristics |
Nỗ lực tìm ra các giải pháp khả thi ngoài những giải pháp gặp phải trong quy trình tìm kiếm hoàn chỉnh (chỉ dành cho MIP) hoặc mức nỗ lực mặc định của trình giải nếu kênh_UNSPECIFIED. |
scaling |
Nỗ lực thay đổi kích thước bài toán để cải thiện độ ổn định số hoặc mức nỗ lực mặc định của trình giải nếu {7}_UNSPECIFIED. |
iteration_limit |
Giới hạn số lần lặp lại của thuật toán cơ bản (ví dụ: các trục đơn giản). Hành vi cụ thể phụ thuộc vào trình giải toán và thuật toán được sử dụng, nhưng thường có thể đưa ra giới hạn giải quyết theo thuật toán (có thể cần cấu hình thêm, ví dụ như một luồng). Thường được trình giải quyết LP, QP và MIP hỗ trợ, nhưng đối với các trình phân giải MIP, hãy xem thêm nút_limit. |
node_limit |
Giới hạn số lượng bài toán phụ được giải trong phương thức tìm kiếm liệt kê (ví dụ: nhánh và ràng buộc). Đối với nhiều trình giải toán, bạn có thể dùng tính năng này để giới hạn việc tính toán một cách quyết định (có thể cần cấu hình hơn nữa, ví dụ như một luồng). Thông thường, đối với các trình phân giải MIP, hãy xem thêm bộ lặp_limit. |
cutoff_limit |
Trình giải toán sẽ dừng sớm nếu có thể chứng minh được không có nghiệm nguyên tố nào ít nhất là tốt bằng điểm cắt. Khi ngừng hoạt động sớm, trình giải quyết sẽ trả về lý do chấm dứt NO_SOLUTION_FOUND và có giới hạn CUTOFF, đồng thời không cần phải cung cấp thêm thông tin về giải pháp. Không ảnh hưởng đến giá trị trả về nếu không có điểm dừng sớm. Bạn nên sử dụng dung sai nếu muốn trả về các giải pháp có mục tiêu chính xác bằng ngưỡng cắt. Hãy xem hướng dẫn sử dụng để biết thêm thông tin chi tiết và so sánh với Best_bound_limit. |
objective_limit |
Trình giải quyết sẽ dừng sớm ngay khi tìm thấy giải pháp tối thiểu là phù hợp, với lý do kết thúc CÓ THỂ và giới hạn MỤC TIÊU. |
best_bound_limit |
Trình giải toán sẽ dừng sớm ngay khi chứng minh được ràng buộc tốt nhất ít nhất là phù hợp, với lý do chấm dứt là FEASIBLE hoặc NO_SOLUTION_FOUND và giới hạn Objective. Xem hướng dẫn sử dụng để biết thêm thông tin chi tiết và so sánh với giới hạn mức cắt. |
solution_limit |
Trình giải quyết sẽ ngừng sớm sau khi tìm thấy nhiều giải pháp khả thi này, với lý do chấm dứt là CÓ THỂ và giới hạn GIẢI PHÁP. Phải lớn hơn 0 nếu được đặt. Phương pháp này thường được dùng để yêu cầu trình giải quyết dừng lại ở giải pháp khả thi đầu tiên tìm được. Lưu ý rằng không có đảm bảo về giá trị mục tiêu cho bất kỳ nghiệm nào được trả về. Trình giải toán thường sẽ không trả về nhiều giải pháp hơn giới hạn giải pháp, nhưng điều này không được MathOpt thực thi, hãy xem thêm b/214041169. Hiện được hỗ trợ cho Gurobi và SCIP, đồng thời chỉ hỗ trợ CP-SAT với giá trị 1. |
threads |
Nếu được đặt, giá trị này phải lớn hơn 1. |
random_seed |
Nội dung gốc cho trình tạo số giả ngẫu nhiên trong trình giải toán cơ bản. Lưu ý rằng tất cả trình giải đều sử dụng số giả ngẫu nhiên để chọn những yếu tố như nhiễu loạn trong thuật toán LP, cho các quy tắc phân tách và để sửa lỗi suy nghiệm. Việc thay đổi cách này có thể tác động đáng kể đến hành vi của trình giải toán. Mặc dù tất cả trình giải toán đều có khái niệm hạt giống, nhưng hãy lưu ý rằng các giá trị hợp lệ phụ thuộc vào cách giải thực tế. - Gurobi: [0:GRB_MAXINT] (kể từ Gurobi 9.0 là 2x10^9). - GSCIP: [0:2147483647] (là MAX_INT hoặc kint32max hoặc 2^31-1). - GLOP: [0:2147483647] (tương tự như trên) Trong mọi trường hợp, trình giải quyết sẽ nhận được một giá trị bằng: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, random_seed)). |
absolute_gap_tolerance |
Dung sai tối ưu tuyệt đối (chủ yếu) cho trình giải MIP. GAP tuyệt đối là giá trị tuyệt đối của hiệu số giữa: * giá trị mục tiêu của giải pháp khả thi nhất tìm được, * giới hạn kép do cụm từ tìm kiếm tạo ra. Trình giải quyết có thể dừng lại khi GAP tuyệt đối có dung sai_khoảng cách tuyệt đối tối đa (khi đặt) và trả về giá trị termINATION_REASON_OPTIMAL. Phải lớn hơn 0 nếu đặt. Ngoài ra, hãy xem thêm parameter_gap_Vay. |
relative_gap_tolerance |
Dung sai tối ưu tương đối (chủ yếu) cho trình phân giải MIP. GAP tương đối là phiên bản chuẩn hoá của GAP tuyệt đối (được xác định theo tỷ lệ_khoảng_không_ tuyệt đối), trong đó việc chuẩn hoá phụ thuộc vào trình giải, ví dụ: GAP tuyệt đối chia cho giá trị mục tiêu của giải pháp khả thi tốt nhất đã tìm thấy. Trình giải quyết có thể dừng lại sau khi GAP tương đối đạt tối đa tương đối_khoảng_Dung_dốc_(khi đã đặt) và trả về giá trị termINATION_REASON_OPTIMAL. Phải lớn hơn 0 nếu đặt. Ngoài ra, hãy xem thêm thuộc tính ngăn_giãn_ô_lực_tuyệt_đối. |
solution_pool_size |
Duy trì tối đa |
SolveResultProto
Hợp đồng về thời điểm dung dịch nguyên thuỷ/giải pháp kép/tia sáng phức tạp, hãy truy cập vào join_reasons.md để biết nội dung mô tả đầy đủ.
Cho đến khi ký kết một hợp đồng chính xác, cách an toàn nhất là chỉ cần kiểm tra xem có giải pháp/tia UV hay không thay vì dựa vào lý do chấm dứt.
Trường | |
---|---|
termination |
Nguyên nhân khiến trình giải toán dừng hoạt động. |
solutions[] |
Hợp đồng chung về thứ tự các giải pháp mà những người giải quyết trong tương lai nên triển khai là sắp xếp theo: 1. Các giải pháp có giải pháp khả thi sơ cấp, được sắp xếp theo mục tiêu sơ cấp tốt nhất trước tiên. 2. Các giải pháp có giải pháp khả thi kép, được sắp xếp theo mục tiêu kép tốt nhất (mục tiêu kép chưa xác định là mục tiêu kém nhất) 3. Bạn có thể trả về tất cả dung dịch còn lại theo thứ tự bất kỳ. |
primal_rays[] |
Hướng dẫn cải thiện nguyên gốc không giới hạn hoặc tương đương với chứng chỉ không khả thi kép. Thường được cung cấp cho ExpirationReasonProtos UNBOUNDED và DUAL_INFEASIBLE |
dual_rays[] |
Hướng dẫn về cải tiến kép không ràng buộc hoặc chứng chỉ không khả thi nguyên gốc tương đương. Thường được cung cấp cho termReasonProto INFEASIBLE. |
solve_stats |
Số liệu thống kê về quy trình giải quyết, ví dụ: thời gian chạy, số lần lặp lại. |
SolveStatsProto
Trường | |
---|---|
solve_time |
Thời gian của đồng hồ treo tường đã trôi qua được tính bằngMath_opt, xấp xỉ thời gian trong Solver::Solve(). Lưu ý: điều này không bao gồm công việc hoàn tất xây dựng mô hình. |
problem_status |
Trạng thái khả thi cho bài toán nguyên gốc và bài toán kép. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
Các trình giải toán mà MathOpt hỗ trợ.
Enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Trình giải quyết chương trình số nguyên ràng buộc (SCIP) (bên thứ ba). Hỗ trợ các bài toán LP, MIP và số nguyên không lồi. Tuy nhiên, hệ thống không trả về dữ liệu kép cho LP. Ưu tiên GLOP cho LP. |
SOLVER_TYPE_GUROBI |
Trình giải Gurobi (bên thứ ba). Hỗ trợ các bài toán LP, MIP và số nguyên không lồi. Nhìn chung là lựa chọn nhanh nhất nhưng có giấy phép đặc biệt. |
SOLVER_TYPE_GLOP |
Trình phân giải Gốm màn hình của Google. Hỗ trợ LP với phương thức đơn giản và nguyên gốc. |
SOLVER_TYPE_CP_SAT |
Trình giải CP-SAT của Google. Hỗ trợ các sự cố trong đó tất cả các biến đều là số nguyên và bị giới hạn (hoặc được ngụ ý sau khi giải quyết). Hỗ trợ thử nghiệm để thay đổi kích thước và làm rõ vấn đề bằng các biến liên tục. |
SOLVER_TYPE_PDLP |
Trình giải quyết vấn đề Ngăn chặn mất dữ liệu (PDLP) của Google. Hỗ trợ mục tiêu bậc hai LP và đường chéo lồi. Sử dụng phương thức bậc nhất thay vì đơn giản. Có thể giải quyết những vấn đề rất lớn. |
SOLVER_TYPE_GLPK |
Bộ công cụ lập trình tuyến tính GNU (GLPK) (bên thứ ba). Hỗ trợ MIP và LP. An toàn cho luồng: GLPK sử dụng bộ nhớ cục bộ cho luồng để phân bổ bộ nhớ. Do đó, phải huỷ các thực thể Solver trên cùng một luồng khi chúng được tạo, nếu không GLPK sẽ gặp sự cố. Có vẻ như bạn có thể gọi Solver::Solve() từ một luồng khác ngoài luồng được sử dụng để tạo Solver nhưng GLPK không ghi lại được và bạn nên tránh. Khi giải một LP bằng bộ tiền giải, một giải pháp (và các tia không liên kết) chỉ được trả lại nếu đã tìm được giải pháp tối ưu. Nếu không, sẽ không có kết quả nào được trả về. Xem glpk-5.0/doc/glpk.pdf trang #40 có sẵn từ glpk-5.0.tar.gz để biết chi tiết. |
SOLVER_TYPE_OSQP |
Trình giải toán Chương trình phân chia toán tử (OSQP) (bên thứ ba). Hỗ trợ các bài toán liên tục có điều kiện ràng buộc tuyến tính và mục tiêu bậc hai lồi hoặc tuyến tính. Sử dụng phương thức bậc nhất. |
SOLVER_TYPE_ECOS |
Embedded Conic Solver (ECOS) (bên thứ ba). Hỗ trợ các vấn đề LP và SOCP. Sử dụng các phương pháp điểm bên trong (hàng rào). |
SOLVER_TYPE_SCS |
The Splitting Conic Solver (SCS) (bên thứ ba). Hỗ trợ các vấn đề LP và SOCP. Sử dụng phương thức bậc nhất. |
SOLVER_TYPE_HIGHS |
HiGHS Solver (bên thứ ba). Hỗ trợ các vấn đề về LP và MIP (chưa triển khai các QP lồi). |
SOLVER_TYPE_SANTORINI |
Cách triển khai tham chiếu trình giải MIP của MathOpt. Chậm/không nên dùng cho quá trình sản xuất. Không phải là trình giải LP (không trả về thông tin kép). |
SosConstraintProto
Dữ liệu để biểu thị một quy tắc ràng buộc SOS1 hoặc SOS2.
Nếu một biến liên quan đến quy tắc ràng buộc này bị xoá, thì biến đó sẽ được coi như được đặt thành 0.
Trường | |
---|---|
expressions[] |
Các biểu thức để áp dụng quy tắc ràng buộc SOS: * SOS1: Tối đa một phần tử nhận giá trị khác 0. * SOS2: Tối đa là hai phần tử nhận các giá trị khác 0 và các phần tử đó phải nằm liền kề theo thứ tự lặp lại. |
weights[] |
Để trống hoặc có độ dài bằng biểu thức. Nếu trống, trọng số mặc định là 1, 2, ... Nếu có, các mục phải là duy nhất. |
name |
Thông báo mẹ có thể có các yêu cầu về tính riêng biệt trên trường này; ví dụ: xem ModelProto.sos1_constraints và SosConstraintUpdatesProto.new_constraints. |
SparseBasisStatusVector
Biểu diễn thưa một vectơ của các trạng thái cơ sở.
Trường | |
---|---|
ids[] |
Phải được sắp xếp (theo thứ tự tăng dần) với tất cả các phần tử riêng biệt. |
values[] |
Phải có độ dài bằng mã nhận dạng. |
SparseDoubleMatrixProto
Biểu diễn thưa của một ma trận nhân đôi.
Ma trận được lưu trữ dưới dạng bộ ba mã nhận dạng hàng, mã cột và hệ số. Ba vectơ này phải có độ dài bằng nhau. Đối với tất cả giá trị i, bộ dữ liệu (row_ids[i], column_ids[i]) phải khác biệt. Các mục phải theo thứ tự hàng chính.
Trường | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
Có thể không chứa NaN. |
SparseDoubleVectorProto
Biểu diễn thưa của một vectơ nhân đôi.
Trường | |
---|---|
ids[] |
Phải được sắp xếp (theo thứ tự tăng dần) với tất cả các phần tử riêng biệt. |
values[] |
Phải có độ dài bằng mã nhận dạng. Có thể không chứa NaN. |
SparseInt32VectorProto
Biểu diễn thưa của một vectơ int.
Trường | |
---|---|
ids[] |
Phải được sắp xếp (theo thứ tự tăng dần) với tất cả các phần tử riêng biệt. |
values[] |
Phải có độ dài bằng mã nhận dạng. |
SparseVectorFilterProto
Thông báo này cho phép truy vấn/đặt các phần cụ thể của SparseXxxxVector. Hành vi mặc định là không lọc bỏ bất cứ thứ gì. Một cách sử dụng phổ biến là chỉ truy vấn các phần của nghiệm (chỉ các giá trị khác 0 và/hoặc chỉ truy vấn một tập hợp các giá trị biến được chọn thủ công).
Trường | |
---|---|
skip_zero_values |
Đối với SparseBoolVectorProto, "zero" là |
filter_by_ids |
Khi đúng, chỉ trả về các giá trị tương ứng với các mã được liệt kê trong filter_ids. |
filtered_ids[] |
Danh sách mã nhận dạng cần sử dụng khi filter_by_ids là true. Phải để trống khi filter_by_ids là false. LƯU Ý: nếu giá trị này trống và filter_by_ids là true, tức là bạn đang nói rằng bạn không muốn có bất kỳ thông tin nào trong kết quả. |
TerminationProto
Tất cả thông tin về lý do tại sao lệnh gọi đến Solve() bị chấm dứt.
Trường | |
---|---|
reason |
Thông tin bổ sung trong |
limit |
là LIMIT_UNSPECIFIED, trừ phi lý do là TERMSINATION_REASON_FEASIBLE hoặc TERMSINATION_REASON_NO_SOLUTION_FOUND. Không phải tất cả trình giải quyết đều có thể xác định giới hạn dẫn đến việc chấm dứt tài khoản, LIMIT_UNDEtermINED được sử dụng khi không xác định được nguyên nhân. |
detail |
Thông tin bổ sung thường giải quyết thông tin cụ thể về việc chấm dứt. |
problem_status |
Trạng thái khả thi cho bài toán nguyên gốc và bài toán kép. Kể từ ngày 18 tháng 7 năm 2023, thư này có thể bị thiếu. Nếu thiếu, bạn có thể tìm thấy issue_status trong SolveResultProto.solve_stats. |
objective_bounds |
Giới hạn giá trị mục tiêu tối ưu. Kể từ ngày 18 tháng 7 năm 2023, thư này có thể bị thiếu. Nếu bị thiếu, bạn có thể tìm thấy items_bounds.primal_bound trong SolveResultProto.solve.stats.best_primal_bounds và goal_bounds.dual_bound trong SolveResultProto.solve.stats.best_dual_bound |
TerminationReasonProto
Lý do lệnh gọi đến Solve() chấm dứt.
Enum | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Đã tìm ra nghiệm tối ưu có thể chứng minh được (lên đến dung sai bằng số). |
TERMINATION_REASON_INFEASIBLE |
Vấn đề sơ cấp không có giải pháp khả thi. |
TERMINATION_REASON_UNBOUNDED |
Vấn đề nguyên gốc là khả thi và có thể tìm thấy các giải pháp tối ưu tuỳ ý dọc theo tia nguyên gốc. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Vấn đề ban đầu là không khả thi hoặc không bị ràng buộc. Bạn có thể xem thêm chi tiết về trạng thái sự cố trong resolve_stats.problem_status. Lưu ý rằng trạng thái không bị ràng buộc của Gurobi có thể được ánh xạ ở đây. |
TERMINATION_REASON_IMPRECISE |
Sự cố đã được giải quyết theo một trong các tiêu chí ở trên (Tối ưu, Không khả thi, Không bị ràng buộc hoặc Không thể giới hạn hoặc Không thể giới hạn), nhưng ít nhất một dung sai chưa được đáp ứng. Một số giải pháp/tia ban đầu/kép đã có mặt, nhưng những giải pháp này ít khả thi hoặc (nếu vấn đề gần như đã được tối ưu) nhưng chúng có thể là khoảng cách giữa mục tiêu giải pháp tốt nhất và giới hạn mục tiêu tốt nhất. Người dùng vẫn có thể truy vấn nghiệm nguyên thuỷ/giải pháp kép/tia và số liệu thống kê về nghiệm, nhưng họ phải chịu trách nhiệm xử lý hiện tượng sai số. |
TERMINATION_REASON_FEASIBLE |
Trình tối ưu hoá đã đạt đến loại giới hạn nào đó và giải pháp khả thi gốc được trả về. Xem SolveResultProto.limit_detail để biết mô tả chi tiết về loại giới hạn đã đạt đến. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Trình tối ưu hoá đã đạt đến một loại giới hạn nào đó và không tìm thấy giải pháp khả thi gốc. Xem SolveResultProto.limit_detail để biết mô tả chi tiết về loại giới hạn đã đạt đến. |
TERMINATION_REASON_NUMERICAL_ERROR |
Thuật toán đã dừng lại vì gặp phải lỗi số không thể khôi phục. Không có thông tin về giải pháp. |
TERMINATION_REASON_OTHER_ERROR |
Thuật toán đã ngừng hoạt động vì một lỗi không thuộc một trong các trạng thái đã xác định ở trên. Không có thông tin về giải pháp. |
VariablesProto
Như được sử dụng dưới đây, chúng tôi xác định "#variables" = size(VariablesProto.ids).
Trường | |
---|---|
ids[] |
Phải là số không âm và tăng dần. Không thể dùng giá trị max(int64). |
lower_bounds[] |
Phải có độ dài bằng #variables, các giá trị trong [-inf, inf). |
upper_bounds[] |
Phải có độ dài bằng #variables, các giá trị trong (-inf, inf]. |
integers[] |
Phải có độ dài bằng #variables. Giá trị là false đối với biến liên tục và true đối với biến số nguyên. |
names[] |
Nếu bạn không đặt chính sách này, giá trị được giả định là tất cả các chuỗi trống. Nếu không, phải có độ dài bằng #variables. Tất cả tên không trống phải khác biệt. |