ดัชนี
BasisProto
(ข้อความ)BasisStatusProto
(enum)DualRayProto
(ข้อความ)DualSolutionProto
(ข้อความ)EmphasisProto
(enum)FeasibilityStatusProto
(enum)IndicatorConstraintProto
(ข้อความ)LPAlgorithmProto
(enum)LimitProto
(enum)LinearConstraintsProto
(ข้อความ)LinearExpressionProto
(ข้อความ)ModelProto
(ข้อความ)ModelSolveParametersProto
(ข้อความ)ObjectiveBoundsProto
(ข้อความ)ObjectiveProto
(ข้อความ)PrimalRayProto
(ข้อความ)PrimalSolutionProto
(ข้อความ)ProblemStatusProto
(ข้อความ)QuadraticConstraintProto
(ข้อความ)SecondOrderConeConstraintProto
(ข้อความ)SolutionHintProto
(ข้อความ)SolutionProto
(ข้อความ)SolutionStatusProto
(enum)SolveParametersProto
(ข้อความ)SolveResultProto
(ข้อความ)SolveStatsProto
(ข้อความ)SolverTypeProto
(enum)SosConstraintProto
(ข้อความ)SparseBasisStatusVector
(ข้อความ)SparseDoubleMatrixProto
(ข้อความ)SparseDoubleVectorProto
(ข้อความ)SparseInt32VectorProto
(ข้อความ)SparseVectorFilterProto
(ข้อความ)TerminationProto
(ข้อความ)TerminationReasonProto
(enum)VariablesProto
(ข้อความ)
BasisProto
การกำหนดลักษณะเฉพาะแบบผสมสำหรับคำตอบของโปรแกรมเชิงเส้น
วิธีการแก้โปรแกรมเชิงเส้นจะจะแสดงผล "วิธีแก้ปัญหาที่เป็นไปได้เบื้องต้น" เสมอ ซึ่งสามารถอธิบายได้แบบครั้งละ 1 ฐาน พื้นฐานจะกำหนด BasisStatusProto สำหรับตัวแปรทุกตัวและข้อจำกัดเชิงเส้น
เช่น ลองพิจารณา LP รูปแบบมาตรฐาน: min c * x s.t. A * x = b x >= 0 ที่มีตัวแปรมากกว่าข้อจำกัดและมีอันดับแถวเต็มอันดับ A
กำหนดให้ n เป็นจำนวนของตัวแปร และจำนวน m ของจำนวนจุดยึดเชิงเส้น พื้นฐานที่ถูกต้องสำหรับปัญหานี้สามารถสร้างขึ้นได้ดังนี้ * ข้อจำกัดทั้งหมดจะมีสถานะพื้นฐานเป็น "แก้ไขแล้ว" * เลือกตัวแปร m ให้คอลัมน์ของ A เป็นอิสระเชิงเส้นและกำหนดสถานะ BASIC * กำหนดสถานะ AT_LOWER สำหรับตัวแปร n - m ตัวที่เหลือ
วิธีแก้ปัญหาพื้นฐานสำหรับเกณฑ์พื้นฐานนี้คือคำตอบของ A * x = b ที่ไม่ซ้ำกันซึ่งมีตัวแปรทั้งหมดที่มีสถานะ AT_LOWER อยู่ในขอบเขตล่าง (0 ทั้งหมด) คำตอบที่ได้เรียกว่าวิธีการพื้นฐานที่เป็นไปได้หากตรงกับ x >= 0 ด้วย
ช่อง | |
---|---|
constraint_status |
สถานะพื้นฐานของข้อจำกัด ข้อกำหนด: * restriction_status.ids เท่ากับ LinearConstraints.ids |
variable_status |
สถานะพื้นฐานที่เปลี่ยนแปลงได้ ข้อกำหนด: * restriction_status.ids เท่ากับ VariantProto.ids |
basic_dual_feasibility |
นี่เป็นฟีเจอร์ขั้นสูงที่ MathOpt ใช้ในการระบุลักษณะของโซลูชัน LP ที่มีประสิทธิภาพต่ำกว่าเกณฑ์ (โซลูชันที่ดีที่สุดจะมีสถานะ SOLUTION_STATUS_FEASIBLE เสมอ) สำหรับ LP ด้านเดียว ควรมีสถานะความเป็นไปได้ของโซลูชันแบบคู่ที่เกี่ยวข้อง สำหรับ LP ที่มี 2 ฝั่ง อาจแตกต่างออกไปในบางกรณี (เช่น การแก้โจทย์ที่ไม่สมบูรณ์ด้วยสูตรดั้งเดิม) หากคุณระบุพื้นฐานเริ่มต้นผ่าน ModelSolveParametersProto.initial_basis ระบบจะไม่สนใจค่านี้ ข้อมูลนี้เกี่ยวข้องกับพื้นฐานที่แสดงโดย SolutionProto.basis เท่านั้น |
BasisStatusProto
สถานะของตัวแปร/ข้อจํากัดในพื้นฐาน LP
Enum | |
---|---|
BASIS_STATUS_UNSPECIFIED |
ค่า Guard ที่แสดงถึงสถานะ |
BASIS_STATUS_FREE |
ตัวแปร/ข้อจํากัดเป็นแบบอิสระ (ไม่มีขอบเขตที่จำกัด) |
BASIS_STATUS_AT_LOWER_BOUND |
ตัวแปร/ข้อจํากัดอยู่ที่ขอบเขตล่าง (ซึ่งต้องจำกัด) |
BASIS_STATUS_AT_UPPER_BOUND |
ตัวแปร/ข้อจำกัดอยู่ที่ขอบเขตบน (ซึ่งต้องจำกัด) |
BASIS_STATUS_FIXED_VALUE |
ตัวแปร/ข้อจํากัดมีขอบเขตล่างและบนเหมือนกันทุกประการ |
BASIS_STATUS_BASIC |
ตัวแปร/ข้อจำกัดเป็นพื้นฐาน |
DualRayProto
ทิศทางของการปรับปรุงอย่างไม่มีขอบเขตในด้านการเพิ่มประสิทธิภาพ กล่าวคือ เป็นใบรับรองความเป็นไปได้ในเบื้องต้น
เช่น ลองพิจารณาคู่โปรแกรมเชิงเส้นคู่เบื้องต้น: (พื้นฐาน) (คู่) นาที c * x สูงสุด b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0 รังสีคู่คือคู่ (y, r) ที่ได้ความพึงพอใจ: b * y > 0 y * A + r = 0 y, r >= 0 สังเกตว่าการเพิ่มผลบวกของผลบวกของ (y, r) กับคำตอบที่เป็นไปได้คู่จะช่วยรักษาความเป็นไปได้คู่และปรับปรุงวัตถุประสงค์ (พิสูจน์ว่าทวีคูณไม่มีขอบเขต) แสงคู่ยังเป็นการพิสูจน์ว่าปัญหาพื้นฐานนั้นหาได้ยาก
ในข้อความ DualRay ด้านล่าง y คือ dual_values และ r คือ ลด_ต้นทุน
ช่อง | |
---|---|
dual_values |
ข้อกำหนด: * dual_values.id เป็นองค์ประกอบของ LinearConstraints.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด |
reduced_costs |
ข้อกำหนด: * Reduce_costs.ids เป็นองค์ประกอบของ VariantProto.ids * discount_costs.values ต้องเป็นค่าจำกัดทั้งหมด |
DualSolutionProto
วิธีแก้ปัญหาการเพิ่มประสิทธิภาพทั้ง 2 อย่าง
เช่น ลองพิจารณาคู่โปรแกรมเชิงเส้นคู่เบื้องต้น: (พื้นฐาน) (คู่) นาที c * x สูงสุด b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0 ผลเฉลยแบบคู่คือคู่ค่า (y, r) โดยจะเป็นไปได้หากการดำเนินการดังกล่าวเป็นไปตามข้อจำกัดจาก (แบบคู่) ข้างต้น
ในข้อความด้านล่าง y คือ dual_values, r คือการลด_ต้นทุน และ b * y คือค่าวัตถุประสงค์
ช่อง | |
---|---|
dual_values |
ข้อกำหนด: * dual_values.id เป็นองค์ประกอบของ LinearConstraints.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด |
reduced_costs |
ข้อกำหนด: * Reduce_costs.ids เป็นองค์ประกอบของ VariantProto.ids * discount_costs.values ต้องเป็นค่าจำกัดทั้งหมด |
feasibility_status |
สถานะความเป็นไปได้ของโซลูชันตามเครื่องมือแก้โจทย์คณิตที่สำคัญ |
objective_value |
|
EmphasisProto
ระดับความพยายามที่ใช้กับงานที่ไม่บังคับขณะแก้ปัญหา (ดู SolveParametersProto สำหรับการใช้งาน)
การเน้นจะใช้เพื่อกำหนดค่าฟีเจอร์เครื่องมือแก้โจทย์ดังนี้ * หากเครื่องมือแก้โจทย์ไม่รองรับฟีเจอร์นี้ จะมีเพียง "UNSPECIFIED" เท่านั้นที่จะมีผลเสมอ การตั้งค่าอื่นๆ มักจะเป็นข้อผิดพลาดด้านอาร์กิวเมนต์ที่ไม่ถูกต้อง (เครื่องมือแก้โจทย์บางอย่างอาจยอมรับ "ปิด") * หากเครื่องมือแก้โจทย์คณิตรองรับฟีเจอร์นี้ - เมื่อตั้งค่าเป็น "ไม่ระบุ" ระบบจะใช้ค่าเริ่มต้นที่เกี่ยวข้อง - เมื่อไม่สามารถปิดฟีเจอร์ได้ ปุ่ม "ปิด" จะแสดงผลข้อผิดพลาด - หากมีการเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น ค่าเริ่มต้นของเครื่องมือแก้โจทย์จะถูกจับคู่กับ MEDIUM - หากระบบรองรับฟีเจอร์นี้ ระดับต่ำ ปานกลาง สูง และสูงมาก จะไม่แสดงข้อผิดพลาดเลย และจะจับคู่กับการจับคู่ที่ดีที่สุด
Enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
สถานะความเป็นไปได้ของปัญหาตามที่ผู้แก้โจทย์อ้างสิทธิ์ (ตัวแก้ปัญหาไม่จำเป็นต้องส่งคืนใบรับรองสำหรับคำกล่าวอ้าง)
Enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
ค่า Guard ที่แสดงถึงสถานะ |
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
เป็นจริง
ช่อง | |
---|---|
activate_on_zero |
หากเป็น "จริง" หากตัวแปรตัวบ่งชี้มีค่า 0 จุดยึดโดยนัยจะต้องเก็บเอาไว้ หรือไม่เช่นนั้น หากตัวแปรตัวบ่งชี้มีค่า 1 ข้อจำกัดโดยนัยจะต้องเก็บเอาไว้ |
expression |
ต้องเป็นนิพจน์เชิงเส้นที่ถูกต้องซึ่งเกี่ยวข้องกับโมเดลที่มี: * เงื่อนไขที่ระบุไว้ทั้งหมดใน |
lower_bound |
ต้องมีค่าเป็น [-inf, inf) เป็น NaN ไม่ได้ |
upper_bound |
ต้องมีค่าเป็น (-inf, inf] ต้องไม่ใช่ NaN |
name |
ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู |
indicator_id |
รหัสที่สอดคล้องกับตัวแปรไบนารี หรือไม่ได้ตั้งค่า หากไม่ได้ตั้งค่า ระบบจะไม่พิจารณาข้อจำกัดตัวบ่งชี้ หากตั้งค่า เราจะกำหนดให้เป็น * VariableProto.integers[indicator_id] = true, * VariantProto.lower_bounds[indicator_id] >= 0, * VariantProto.upper_bounds[indicator_id] <= 1. MathOpt ไม่ตรวจสอบเงื่อนไขเหล่านี้ แต่หากไม่พอใจจะทำให้เครื่องมือแก้โจทย์แสดงข้อผิดพลาดเมื่อแก้ |
LPAlgorithmProto
เลือกอัลกอริทึมสำหรับการแก้ปัญหาโปรแกรมเชิงเส้น
Enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
เมทริกซ์ (หลัก) โดยทั่วไปสามารถให้วิธีแก้ปัญหาเบื้องต้นและทางคู่ รังสีพื้นฐาน/รังสีคู่ในปัญหาที่ไม่มีขอบเขตพื้นฐาน/คู่ และเป็นพื้นฐาน |
LP_ALGORITHM_DUAL_SIMPLEX |
เมทริกซ์แบบคู่ โดยทั่วไปสามารถให้วิธีแก้ปัญหาเบื้องต้นและทางคู่ รังสีพื้นฐาน/รังสีคู่ในปัญหาที่ไม่มีขอบเขตพื้นฐาน/คู่ และเป็นพื้นฐาน |
LP_ALGORITHM_BARRIER |
วิธีกีดขวาง หรือที่เรียกกันโดยทั่วไปว่า Interior Point Method (IPM) มักจะให้วิธีแก้ปัญหาทั้งเบื้องต้นและคู่ การติดตั้งบางวิธียังทำให้เกิดรังสีต่อปัญหาที่ไม่มีขอบเขต/ไม่สามารถเป็นไปได้ จะไม่มีการกำหนดพื้นฐานเว้นแต่ตัวแก้โจทย์ที่อยู่เบื้องหลังจะ "ครอสโอเวอร์" และสิ้นสุดด้วยด้านเดียว |
LP_ALGORITHM_FIRST_ORDER |
อัลกอริทึมที่อิงตามเมธอดแบบลำดับแรก โซลูชันเหล่านี้มักเป็นโซลูชันทั้งแบบดั้งเดิมและร่วม และอาจออกใบรับรองว่าจะเกิดความเป็นไปได้ที่แม่นยําและ/หรือการป้องกันทั้ง 2 อย่าง วิธีการแบบลำดับต้นๆ มักจะให้โซลูชันที่มีความแม่นยำต่ำ ดังนั้นผู้ใช้ควรระมัดระวังในการตั้งพารามิเตอร์คุณภาพของโซลูชัน (เช่น ความคลาดเคลื่อนยินยอม) และตรวจสอบความถูกต้องของโซลูชัน |
LimitProto
เมื่อ Solve() หยุดก่อนกำหนดด้วย FinalReasonProto FEASIBLE หรือ NO_SOLUTION_FOUND ขีดจำกัดที่เฉพาะเจาะจงจะต้องถูกเรียกใช้
Enum | |
---|---|
LIMIT_UNSPECIFIED |
ใช้เป็นค่า Null เมื่อเราสิ้นสุดการใช้งานโดยไม่มีขีดจำกัด (เช่น TERMINATION_REASON_OPTIMAL) |
LIMIT_UNDETERMINED |
เครื่องมือแก้โจทย์คณิตพื้นฐานจะไม่แสดงว่าถึงขีดจำกัดใดแล้ว |
LIMIT_ITERATION |
อัลกอริทึมการทำซ้ำหยุดทำงานหลังจากทำการทำซ้ำจนถึงจำนวนครั้งสูงสุดแล้ว (เช่น การหาวิกซ์หรือสิ่งกีดขวาง) |
LIMIT_TIME |
อัลกอริทึมหยุดทำงานหลังจากเวลาคำนวณที่ผู้ใช้ระบุ |
LIMIT_NODE |
อัลกอริทึมแบบ Branch หยุดการทำงานเนื่องจากสำรวจจำนวนโหนดสูงสุดในโครงสร้างที่มีขอบเขตและขอบเขต |
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 เมื่อทราบเหตุผลแล้ว แต่ไม่ตรงกับทางเลือกใดๆ ข้างต้น FinalProto.detail อาจมีข้อมูลเพิ่มเติมเกี่ยวกับขีดจํากัด |
LinearConstraintsProto
ดังที่ใช้ด้านล่าง เราได้ให้คำจำกัดความ "#linear privacys" = size(LineConstraintsProto.ids)
ช่อง | |
---|---|
ids[] |
ต้องไม่เป็นค่าลบและต้องเพิ่มขึ้นอย่างเคร่งครัด ใช้ค่า max(int64) ไม่ได้ |
lower_bounds[] |
ควรมีความยาวเท่ากับ #เชิงเส้น ข้อจำกัด ค่าเป็น [-inf, inf) |
upper_bounds[] |
ควรมีความยาวเท่ากับ #เชิงเส้น ข้อจำกัด ค่าในหน่วย (-inf, inf] |
names[] |
หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ไม่เช่นนั้น ควรมีความยาวเท่ากับข้อจํากัดแบบ #เชิงเส้น ชื่อที่ไม่ว่างเปล่าทั้งหมดต้องไม่ซ้ำกัน |
LinearExpressionProto
การนำเสนอแบบน้อยของนิพจน์เชิงเส้น (ผลรวมแบบถ่วงน้ำหนักของตัวแปร บวกค่าคงที่)
ช่อง | |
---|---|
ids[] |
รหัสของตัวแปร ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน |
coefficients[] |
ต้องมีความยาวเท่ากับรหัส ค่าต้องเป็นค่าจำกัดต้องไม่ใช่ NaN |
offset |
ต้องมีระยะเวลาจำกัดและต้องไม่ใช่ NaN |
ModelProto
ปัญหาการเพิ่มประสิทธิภาพ MathOpt - ตัวแปรการตัดสินใจแบบต่อเนื่องและจำนวนเต็มที่มีขอบเขตจำกัดที่ไม่บังคับ - วัตถุประสงค์เชิงเส้นและวัตถุประสงค์กำลังสอง (วัตถุประสงค์ข้อเดียวหรือหลายข้อ) อาจเป็นแบบย่อหรือขยายใหญ่สุด - ประเภทข้อจำกัดจำนวนหนึ่ง ได้แก่ * ข้อจำกัดเชิงเส้น * ข้อจำกัดกำลังสอง * ข้อจำกัดแบบกรวยลำดับที่ 2 * ข้อจำกัดเชิงตรรกะ > ข้อจำกัด SOS1 และ SOS2 > ข้อจำกัดตัวบ่งชี้
โดยค่าเริ่มต้น ข้อจำกัดจะแสดงในแมป "id-to-data" อย่างไรก็ตาม เราแสดงข้อจำกัดเชิงเส้นในรูปแบบ "struct-of-arrays" ที่มีประสิทธิภาพมากกว่า
ช่อง | |
---|---|
name |
|
variables |
|
objective |
วัตถุประสงค์หลักในรูปแบบ |
auxiliary_objectives |
วัตถุประสงค์เสริมสำหรับใช้ในโมเดลหลายวัตถุประสงค์ รหัสคีย์แมปต้องเป็น [0, max(int64)) ลำดับความสำคัญแต่ละรายการและชื่อที่ไม่ว่างแต่ละรายการต้องไม่ซ้ำกันและต่างจาก |
linear_constraints |
|
linear_constraint_matrix |
ค่าสัมประสิทธิ์ตัวแปรสำหรับข้อจำกัดเชิงเส้น หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0 ข้อกำหนด: * linear_constraint_matrix.row_ids เป็นองค์ประกอบของ linear_constraints.ids * linear_constraint_matrix.column_id เป็นองค์ประกอบของตัวแปร * รายการเมทริกซ์ที่ไม่ได้ระบุเป็น 0 * linear_constraint_matrix.values ต้องเป็นค่าจำกัดทั้งหมด |
quadratic_constraints |
ข้อจำกัดกำลังสองในโมเดล |
second_order_cone_constraints |
ข้อจำกัดกรวยอันดับ 2 ในโมเดล |
sos1_constraints |
ข้อจำกัด SOS1 ในโมเดล ซึ่งกำหนดให้ |
sos2_constraints |
ข้อจำกัด SOS2 ในโมเดล ซึ่งกำหนดให้รายการ |
indicator_constraints |
ข้อจำกัดตัวบ่งชี้ในโมเดล ซึ่งบังคับใช้นั้น หากตั้งค่าไบนารีของ "ตัวแปรตัวบ่งชี้" เป็น 1 จะต้องมี "ข้อจำกัดโดยนัย" |
ModelSolveParametersProto
ช่อง | |
---|---|
variable_values_filter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยตัวแปรใน PrimalSolutionProto และ PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) ข้อกำหนด: * filter_id คือองค์ประกอบของ VariantProto.ids |
dual_values_filter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยข้อจำกัดเชิงเส้นใน DualSolutionProto และ DualRay (DualSolutionProto.dual_values, DualRay.dual_values) ข้อกำหนด: * filter_ids คือองค์ประกอบของ LinearConstraints.ids |
reduced_costs_filter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยตัวแปรใน DualSolutionProto และ DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) ข้อกำหนด: * filter_id คือองค์ประกอบของ VariantProto.ids |
initial_basis |
พื้นฐานเริ่มต้นที่ไม่บังคับสำหรับเครื่องมือแก้โจทย์ LP แบบง่ายของ Warm Start หากตั้งค่าไว้ คาดว่าจะถูกต้องตาม |
solution_hints[] |
คำแนะนำโซลูชันที่ไม่บังคับ หากเครื่องมือแก้โจทย์คณิตพื้นฐานยอมรับคําแนะนําเพียงครั้งเดียว ระบบจะใช้คําแนะนําแรก |
branching_priorities |
ลำดับความสำคัญของการโยงหัวข้อ (ไม่บังคับ) ตัวแปรที่มีค่าสูงกว่าจะได้รับการแยกสาขาแรก ตัวแปรที่ไม่ได้ตั้งค่าลำดับความสำคัญจะได้รับลำดับความสำคัญเริ่มต้นของเครื่องมือแก้โจทย์ (โดยปกติจะเป็น 0) ข้อกำหนด: * ranching_priorities.values ต้องมีขีดจำกัด * ranching_priorities.ids ต้องเป็นองค์ประกอบของ VariantProto.ids |
ObjectiveBoundsProto
ผูกกับค่าวัตถุประสงค์ที่เหมาะสม
ช่อง | |
---|---|
primal_bound |
เครื่องมือแก้โจทย์อ้างว่าค่าที่เหมาะสมมีค่าเท่ากับหรือดีกว่า (น้อยกว่าสำหรับการปรับให้เล็กสุดและมากกว่าสำหรับการกำหนดขีดจำกัดสูงสุด) ถึงค่าที่เป็นไปได้เบื้องต้นสำหรับเครื่องมือแก้โจทย์คณิต (ดูคำเตือนด้านล่าง): * Primeal_bound เป็นค่าที่ไม่สำคัญ (+inf สำหรับการปรับให้น้อยที่สุดและ -inf maximization) เมื่อตัวแก้โจทย์ไม่ได้กล่าวอ้างว่าจะมีขอบเขตดังกล่าว * Primeal_bound อาจมีค่าใกล้เคียงกับค่าที่เหมาะสมมากกว่าวัตถุประสงค์ของวิธีแก้ปัญหาเบื้องต้นที่ดีที่สุด โดยเฉพาะอย่างยิ่ง Primeal_bound จึงอาจไม่ใช่ตัวแปรเล็กๆ แม้จะไม่มีผลลัพธ์ที่เป็นไปได้แบบพื้นฐานก็ตาม คำเตือน: การกล่าวอ้างที่แม่นยําคือมีวิธีแก้ปัญหาเบื้องต้นที่ * เป็นตัวเลขที่เป็นไปได้ (เช่น เป็นไปได้โดยขึ้นอยู่กับความคลาดเคลื่อนของค่าแก้ความแก้โจทย์) และ * มีค่าที่เป็นปศุสัตว์ Primeal_bound วิธีแก้ปัญหาที่เป็นไปได้เชิงตัวเลขนี้อาจเป็นไปไม่ได้เล็กน้อย ในกรณีของ Primeal_bound อาจดีกว่าค่าที่เหมาะสมที่สุดอย่างสิ้นเชิง การแปลความยอมรับความเป็นไปได้เบื้องต้นเป็นความคลาดเคลื่อนเบื้องต้นตาม Primeal_bound นั้นไม่ใช่เรื่องเล็กน้อย โดยเฉพาะเมื่อความคลาดเคลื่อนของความเป็นไปได้อยู่ในระดับที่ค่อนข้างสูง (เช่น เมื่อแก้ปัญหาด้วย PDLP) |
dual_bound |
เครื่องมือแก้โจทย์อ้างว่าค่าที่เหมาะสมมีค่าเท่ากับหรือแย่กว่า (ใหญ่กว่าสำหรับการปรับให้เล็กสุดและเล็กกว่าสำหรับการเพิ่มประสิทธิภาพสูงสุด) มากกว่าค่า dual_bound ถึงการยอมรับความเป็นไปได้แบบคู่ของเครื่องมือแก้โจทย์ (ดูคำเตือนด้านล่าง): * dual_bound เป็นค่าที่ไม่สำคัญ (-inf สำหรับการปรับให้น้อยที่สุดและ +inf maximization) เมื่อเครื่องมือแก้โจทย์ไม่ได้อ้างว่ามีข้อจำกัดเช่นนี้ ในกรณีของ Primeal_bound ปัญหานี้อาจเกิดขึ้นสําหรับเครื่องมือแก้โจทย์คณิตบางราย แม้ว่าจะได้ผลลัพธ์ที่ดีที่สุดก็ตาม โดยทั่วไปเครื่องมือแก้โจทย์ MIP จะรายงานขอบเขตแม้จะไม่ชัดเจนก็ตาม * สำหรับปัญหาต่อเนื่อง dual_bound อาจใกล้เคียงกับค่าที่เหมาะสมมากกว่าวัตถุประสงค์ของโซลูชันคู่ที่ดีที่สุดเท่าที่ทำได้ สำหรับ MIP หนึ่งในค่าที่ไม่สำคัญแรกๆ ของ dual_bound มักเป็นค่าที่เหมาะสมที่สุดของการผ่อนปรน LP ของ MIP * dual_bound ควรจะดีกว่า (เล็กกว่าในการปรับให้เล็กสุดและใหญ่กว่าสำหรับขีดความสามารถสูงสุด) มากกว่า Primeal_bound จนถึงความคลาดเคลื่อนของค่าแก้โจทย์ (ดูคำเตือนด้านล่าง) คำเตือน: * สำหรับปัญหาต่อเนื่อง การกล่าวอ้างที่แม่นยําคือมีวิธีแก้ปัญหาแบบคู่ที่ * สามารถเป็นไปได้ในเชิงตัวเลข (เช่น เป็นไปได้โดยขึ้นอยู่กับความคลาดเคลื่อนของคำตอบสำหรับเครื่องมือแก้โจทย์) และ * มีค่าที่เป็นกลาง dual_bound วิธีแก้ปัญหาที่เป็นไปได้ในเชิงตัวเลขนี้อาจเป็นไปได้เล็กน้อยเล็กน้อย ซึ่งในกรณีนี้ dual_bound อาจแย่กว่าค่าที่เหมาะสมที่สุดและ Primeal_bound คล้ายกับกรณีพื้นฐาน การแปลความยอมรับความเป็นไปได้แบบคู่เป็นการยอมรับใน dual_bound นั้นไม่ใช่เรื่องง่ายๆ โดยเฉพาะอย่างยิ่งเมื่อความคลาดเคลื่อนของความเป็นไปได้อยู่ในระดับที่ค่อนข้างมาก อย่างไรก็ตาม เครื่องมือแก้โจทย์คณิตบางรายจะให้ dual_bound เวอร์ชันที่แก้ไขแล้วซึ่งเป็นตัวเลขที่ปลอดภัยกว่า เวอร์ชันที่แก้ไขแล้วนี้เข้าถึงได้ผ่านเอาต์พุตที่เฉพาะเจาะจงของโปรแกรมแก้โจทย์ (เช่น สำหรับ PDLP, pdlp_เอาต์พุต.convergence_information.corrected_dual_objective) * สำหรับเครื่องมือแก้โจทย์ MIP dual_bound อาจเชื่อมโยงกับโซลูชันคู่เพื่อการผ่อนคลายอย่างต่อเนื่องบางอย่าง (เช่น การผ่อนคลายหน้า LP) แต่มักเป็นผลที่ซับซ้อนของการเรียกใช้เครื่องมือแก้โจทย์และมักจะไม่แน่นอนมากกว่าขอบเขตที่เครื่องมือแก้โจทย์ LP รายงาน |
ObjectiveProto
ช่อง | |
---|---|
maximize |
เท็จ คือ ย่อเล็กสุด จริง คือขยายใหญ่สุด |
offset |
ต้องมีจำกัด ไม่ใช่ NaN |
linear_coefficients |
คำวัตถุประสงค์ของโปรโตที่อยู่ในตัวแปรการตัดสินใจ ข้อกำหนด: * linear_coefficiencys.id เป็นองค์ประกอบของ VariantProto.ids * ที่ไม่ได้ระบุ VariantProto ตรงกับค่า 0 * ne_coefficiencys.values ค่าทั้งหมดต้องมีค่าจำกัด * linear_coefficiencys.values ค่าอาจเป็น 0 ได้ แต่ก็ทำให้สิ้นเปลืองพื้นที่เท่านั้น |
quadratic_coefficients |
คำศัพท์ที่เป็นกลางในตัวแปรการตัดสินใจ ข้อกำหนดนอกเหนือจากข้อกำหนดในข้อความ SparseDoubleMatrixProto: * แต่ละองค์ประกอบของ quadratic_coefficiencys.row_ids แต่ละองค์ประกอบของ quadratic_coefficiencys.column_ids ต้องเป็นองค์ประกอบของ VariantProto.ids * เมทริกซ์ต้องเป็นรูปสามเหลี่ยมด้านบน สำหรับ i, quadratic_coeffectives.row_ids[i] <= quadratic_coefficiencys.column_ids[i] แต่ละรายการ หมายเหตุ: * คำศัพท์ที่ไม่ได้จัดเก็บอย่างชัดเจนมีค่าสัมประสิทธิ์เป็นศูนย์ * องค์ประกอบของ quadratic_coefficiencys.coeffectives อาจเป็น 0 ได้ แต่ก็ทำให้เปลืองพื้นที่ |
name |
ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.objectives และ AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
สำหรับปัญหาแบบหลายวัตถุประสงค์ ลำดับความสำคัญของวัตถุประสงค์นี้เมื่อเทียบกับข้ออื่นๆ (ต่ำกว่าถือว่าสำคัญกว่า) ค่านี้ต้องไม่ติดลบ นอกจากนี้ ลําดับความสําคัญของวัตถุประสงค์แต่ละข้อในโมเดลต้องแตกต่างกันในขณะที่แก้โจทย์ เงื่อนไขนี้ไม่ได้รับการตรวจสอบที่ระดับโปรโตคอล ดังนั้นโมเดลอาจมีวัตถุประสงค์ที่มีลำดับความสำคัญเท่ากันเป็นการชั่วคราว |
PrimalRayProto
ทิศทางของการปรับปรุงปัญหาการเพิ่มประสิทธิภาพที่ไม่มีขอบเขต เทียบเท่ากับใบรับรองความเป็นไปได้ของปัญหาการเพิ่มประสิทธิภาพ 2 อย่าง
เช่น ลองพิจารณาโปรแกรมเชิงเส้นอย่างง่าย: min c * x s.t. A * x >= b x >= 0 A Primeal ray คือ x ที่มีค่าดังต่อไปนี้ c * x < 0 A * x >= 0 x >= 0 ให้สังเกตว่าคำตอบที่เป็นไปได้บวกกับคำตอบที่เป็นไปได้คือพหุคูณที่เป็นไปได้ ค่าพหุคูณที่เป็นไปได้คือค่าพหุคูณที่เป็นไปได้ซึ่งให้ผลพหุคูณที่เป็นไปได้และผลพหุคูณที่เป็นไปได้ นอกจากนี้ แสงสีหลักยังเป็นการพิสูจน์ว่าปัญหาการเพิ่มประสิทธิภาพซ้ำซ้อนนั้นไม่อาจเป็นไปได้อีกด้วย
ในข้อความ PrimalRay ด้านล่างตัวแปร_ค่าคือ x
ช่อง | |
---|---|
variable_values |
ข้อกำหนด: * variable_values.id เป็นองค์ประกอบของ VariantProto.ids * ค่าตัวแปร_ค่า.ค่าต้องเป็นค่าจำกัดทั้งหมด |
PrimalSolutionProto
วิธีแก้ปัญหาการเพิ่มประสิทธิภาพ
เช่น ลองพิจารณาโปรแกรมเชิงเส้นง่ายๆ อย่าง min c * x s.t. A * x >= b x >= 0 วิธีแก้ปัญหาเบื้องต้นคือ กำหนดค่าให้กับ x สามารถเป็นไปได้หากเป็นไปตาม A * x >= b และ x >= 0 จากด้านบน ในข้อความ PrimalSolutionProto ด้านล่างตัวแปร_ค่าคือ x และobject_valueคือ c * x
ช่อง | |
---|---|
variable_values |
ข้อกำหนด: * variable_values.id เป็นองค์ประกอบของ VariantProto.ids * ค่าตัวแปร_ค่า.ค่าต้องเป็นค่าจำกัดทั้งหมด |
objective_value |
ค่าวัตถุประสงค์ที่คํานวณโดยเครื่องมือแก้โจทย์คณิตพื้นฐาน ต้องไม่เป็นอนันต์หรือ NaN |
auxiliary_objective_values |
ค่าวัตถุประสงค์เสริมที่คํานวณโดยเครื่องมือแก้โจทย์คณิตพื้นฐาน คีย์ต้องเป็นรหัสวัตถุประสงค์เสริมที่ถูกต้อง ค่าต้องไม่สิ้นสุดหรือ NaN |
feasibility_status |
สถานะความเป็นไปได้ของโซลูชันตามเครื่องมือแก้โจทย์คณิตที่สำคัญ |
ProblemStatusProto
สถานะความเป็นไปได้ของปัญหาขั้นต้นและคู่ของปัญหานั้น (หรือคู่ของการผ่อนปรนอย่างต่อเนื่อง) ตามที่ผู้แก้โจทย์กล่าวอ้าง ผู้แก้โจทย์ไม่จำเป็นต้องส่งคืนใบรับรองสำหรับการอ้างสิทธ์ (เช่น เครื่องมือแก้โจทย์อาจอ้างความเป็นไปได้เบื้องต้นโดยไม่ต้องส่งคืนวิธีการแก้ปัญหาที่เป็นไปได้เบื้องต้น) สถานะแบบรวมนี้ให้คำอธิบายที่ครอบคลุมเกี่ยวกับคำกล่าวอ้างของผู้แก้โจทย์เกี่ยวกับความเป็นไปได้และความไร้ขอบเขตของโจทย์ที่แก้โจทย์ ตัวอย่างเช่น
- สถานะที่เป็นไปได้ของโจทย์ปัญหาขั้นต้นและปัญหาคู่บ่งบอกว่าวิธีเบื้องต้นเป็นไปได้และมีขอบเขต และมีแนวโน้มที่จะมีวิธีแก้ปัญหาที่ดีที่สุด (รับประกันสำหรับปัญหาที่ไม่มีข้อจำกัดที่ไม่ใช่เชิงเส้น)
- ความเป็นไปได้เบื้องต้นและสถานะความเป็นไปไม่ได้คู่กัน แสดงว่าปัญหาหลักนั้นไม่มีขอบเขต (นั่นคือ มีทางออกที่ดีเสมอ)
โปรดทราบว่าสถานะที่ไม่สามารถดำเนินการได้ควบคู่กันนั้น (กล่าวคือ สถานะเริ่มต้นควบคู่ไปด้วย) ไม่ได้บอกเป็นนัยว่าปัญหาหลักไม่มีขอบเขต เนื่องจากเราอาจมีทั้ง 2 ปัญหาที่ไม่สามารถทำได้ นอกจากนี้ แม้ว่าสถานะที่เป็นไปได้พื้นฐานและแบบคู่อาจบอกเป็นนัยถึงการมีอยู่ของโซลูชันที่ดีที่สุด แต่ก็ไม่ได้รับประกันว่าเครื่องมือแก้โจทย์จะได้พบวิธีแก้ปัญหาที่เหมาะสมที่สุดจริงๆ
ช่อง | |
---|---|
primal_status |
สถานะของปัญหาเบื้องต้น |
dual_status |
สถานะของโจทย์คู่ (หรือสำหรับการผ่อนปรนอย่างต่อเนื่อง) |
primal_or_dual_infeasible |
หากเป็นจริง ผู้แก้โจทย์อ้างว่าปัญหาหลักหรือปัญหา 2 อย่างนั้นไม่อาจเป็นไปได้ แต่ไม่รู้ว่าปัญหาใด (หรือทั้ง 2 อย่างเป็นสิ่งที่ทำไม่ได้) เป็นจริงได้เฉพาะเมื่อ Primeal_problem_status = dual_problem_status = kUndetermined จำเป็นต้องใช้ข้อมูลเพิ่มเติมนี้เมื่อการประมวลผลล่วงหน้าตัดสินว่าไม่มีวิธีแก้ปัญหาที่ดีที่สุด (แต่ระบุไม่ได้ว่าเกิดจากความไม่สามารถเป็นไปได้ การไม่มีขอบเขต หรือทั้ง 2 อย่าง) |
QuadraticConstraintProto
ข้อจำกัดกำลังสองเดี่ยวของรูป: lb <= sum{linear_terms} + ผลรวม{quadratic_terms} <= ub
หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0
ช่อง | |
---|---|
linear_terms |
คำศัพท์ที่อยู่ในตัวแปรการตัดสินใจ นอกจากข้อกำหนดเกี่ยวกับข้อความ SparseDoubleVectorProto แล้ว เรายังกำหนดให้ * linear_terms.id เป็นองค์ประกอบของ VariantProto.ids * ne_terms.values ต้องเป็นค่าที่มีจำกัดและไม่ใช่ NaN หมายเหตุ: * รหัสตัวแปรที่ละไว้มีค่าสัมประสิทธิ์ที่สอดคล้องกันเป็น 0 * linear_terms.values อาจเป็น 0 ได้ แต่ก็ทำให้เปลืองพื้นที่ |
quadratic_terms |
คำที่เป็นกำลังสองในตัวแปรการตัดสินใจ นอกจากข้อกำหนดเกี่ยวกับข้อความ SparseDoubleMatrixProto แล้ว เรายังกำหนดให้ดังนี้ * องค์ประกอบแต่ละรายการของ quadratic_terms.row_ids และองค์ประกอบแต่ละรายการของ quadratic_terms.column_ids ต้องเป็นองค์ประกอบของ VariantProto.ids * เมทริกซ์ต้องเป็นรูปสามเหลี่ยมด้านบน สำหรับ i แต่ละรูป, quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i] หมายเหตุ: * คำศัพท์ที่ไม่ได้จัดเก็บอย่างชัดเจนมีค่าสัมประสิทธิ์เป็นศูนย์ * แม้องค์ประกอบของ quadratic_terms.coEffectives อาจเป็น 0 ได้ แต่ก็ทำให้เปลืองพื้นที่ |
lower_bound |
ต้องมีค่าเป็น [-inf, inf) และน้อยกว่าหรือเท่ากับ |
upper_bound |
ต้องมีค่าเป็น (-inf, inf] และมากกว่าหรือเท่ากับ |
name |
ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.quadratic_constraints และ QuadraticConstraintUpdatesProto.new_constraints |
SecondOrderConeConstraintProto
ข้อจำกัดรูปกรวยลำดับที่ 2 ของรูปแบบ
||arguments_to_norm
||_2 <= upper_bound
โดยที่ upper_bound
และองค์ประกอบแต่ละรายการของ arguments_to_norm
เป็นนิพจน์เชิงเส้น
หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0
ช่อง | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู |
SolutionHintProto
โซลูชันเริ่มต้นที่แนะนำสำหรับเครื่องมือแก้โจทย์
โดยทั่วไปแล้ว เครื่องมือแก้โจทย์ MIP ต้องการเฉพาะข้อมูลเบื้องต้น (variable_values
) ขณะที่เครื่องมือแก้ LP ต้องการทั้งข้อมูลขั้นต้นและข้อมูลคู่ (dual_values
)
เครื่องมือแก้โจทย์คณิตหลายชนิด (1) โซลูชันบางส่วนที่ไม่ได้ระบุตัวแปรทั้งหมด หรือ (2) วิธีแก้ปัญหาที่ทำไม่ได้ ในกรณีเหล่านี้ เครื่องมือแก้โจทย์คณิตมักจะแก้ปริศนา MIP เพื่อเติม/แก้ไขคำใบ้
หลักในการแก้โจทย์จะขึ้นอยู่กับผู้แก้โจทย์ ประเภทของโจทย์ และอัลกอริทึมที่ใช้ วิธีที่เชื่อถือได้มากที่สุดที่จะทำให้คำแนะนำของคุณได้ผลคือการอ่านบันทึกเครื่องมือแก้โจทย์คณิตที่มีอยู่ที่มีและไม่มีคำแนะนำ
โดยทั่วไปแล้ว เครื่องมือแก้โจทย์คณิตที่ใช้ LP จะใช้หลักการพื้นฐานมากกว่าในการบอกใบ้โซลูชัน (พวกเขาจะต้องครอสโอเวอร์เพื่อแปลงคำแนะนำให้เป็นวิธีแก้ปัญหาเบื้องต้นที่เป็นไปได้)
ช่อง | |
---|---|
variable_values |
การอาจกำหนดค่าเพียงบางส่วนของตัวแปรเบื้องต้นของโจทย์ ข้อกำหนดที่ไม่เกี่ยวข้องกับเครื่องมือแก้โจทย์คณิตสำหรับข้อความย่อยนี้คือ *variable_values.id เป็นองค์ประกอบของ VariableProto.ids * ค่าตัวแปร_ค่า.ค่าต้องเป็นค่าจำกัดทั้งหมด |
dual_values |
การกำหนด (อาจบางส่วน) ค่าไปยังข้อจำกัดเชิงเส้นของโจทย์ ข้อกำหนด: * dual_values.ids เป็นองค์ประกอบของ LinearConstraintsProto.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด |
SolutionProto
สิ่งที่รวมอยู่ในคำตอบจะขึ้นอยู่กับประเภทของปัญหาและเครื่องมือแก้โจทย์ รูปแบบที่พบบ่อยในปัจจุบันคือ 1 เครื่องมือแก้โจทย์คณิต MIP จะแสดงผลเฉพาะโซลูชันหลักเท่านั้น 2. เครื่องมือแก้โจทย์ LP มักจะแสดงผลแบบพื้นฐานและวิธีแก้ปัญหาเบื้องต้นและคู่ที่เกี่ยวข้องกับพื้นฐานนี้ 3. เครื่องมือแก้โจทย์อย่างต่อเนื่องอื่นๆ มักจะส่งคืนโซลูชันพื้นฐานและโซลูชันคู่ที่เชื่อมต่อในรูปแบบที่ขึ้นอยู่กับเครื่องมือแก้โจทย์
ข้อกำหนด: * ต้องตั้งค่าอย่างน้อย 1 ฟิลด์ โซลูชันต้องไม่เว้นว่าง
ช่อง | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
ความเป็นไปได้ของวิธีแก้ปัญหาเบื้องต้นหรือทั้ง 2 โซลูชันตามที่เครื่องมือแก้โจทย์อ้างสิทธิ์
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
ค่า Guard ที่แสดงถึงสถานะ |
SOLUTION_STATUS_UNDETERMINED |
เครื่องมือแก้ปัญหาไม่ได้อ้างสถานะความเป็นไปได้ |
SOLUTION_STATUS_FEASIBLE |
นักแก้ไขอ้างว่าโซลูชันนี้เป็นไปได้ |
SOLUTION_STATUS_INFEASIBLE |
นักแก้ไขอ้างว่าโซลูชันเป็นไปไม่ได้ |
SolveParametersProto
พารามิเตอร์สำหรับควบคุมโซลูชันเดียว
มีทั้งพารามิเตอร์ที่ใช้บ่อยสำหรับเครื่องมือแก้โจทย์ทั้งหมด เช่น time_limit และพารามิเตอร์สำหรับเครื่องมือแก้โจทย์ที่เฉพาะเจาะจง เช่น gscip หากตั้งค่าทั้งในช่องทั่วไปและของช่องสำหรับแก้โจทย์ที่เจาะจง ระบบจะใช้การตั้งค่าเฉพาะเครื่องมือแก้โจทย์คณ
พารามิเตอร์ทั่วไปที่ไม่บังคับและไม่ได้ตั้งค่า หรือ enum ที่มีค่าไม่ได้ระบุจะระบุว่ามีการใช้ค่าเริ่มต้นของเครื่องมือแก้โจทย์
ระบบจะไม่สนใจพารามิเตอร์ที่เจาะจงสำหรับตัวแก้โจทย์นอกเหนือจากพารามิเตอร์ที่ใช้อยู่
ระบบจะส่งพารามิเตอร์ที่ขึ้นอยู่กับโมเดล (เช่น กำหนดลำดับความสำคัญของการโยงหัวข้อให้กับตัวแปรแต่ละรายการ) ใน ModelSolveParametersProto
ช่อง | |
---|---|
time_limit |
เวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้ในการแก้โจทย์ (หรือไม่จำกัดหากไม่ได้ตั้งค่าไว้) ค่านี้ไม่ใช่ค่าจำกัด เวลาที่แก้โจทย์อาจเกินค่านี้เล็กน้อย ระบบจะส่งพารามิเตอร์นี้ไปยังเครื่องมือแก้โจทย์คณิตที่เกี่ยวข้องเสมอ โดยจะไม่ใช้ค่าเริ่มต้นของเครื่องมือแก้โจทย์ |
enable_output |
เปิดใช้การพิมพ์การติดตามการใช้งานเครื่องมือแก้โจทย์คณ ตำแหน่งของการติดตามเหล่านั้นจะขึ้นอยู่กับเครื่องมือแก้โจทย์ สำหรับ SCIP และ Gurobi จะเป็นสตรีมเอาต์พุตมาตรฐาน สำหรับ Glop และ CP-SAT ระบบจะ LOG(INFO) โปรดทราบว่าหากเครื่องมือแก้โจทย์รองรับการเรียกกลับข้อความและผู้ใช้บันทึกการติดต่อกลับ ระบบจะไม่สนใจค่าพารามิเตอร์นี้ และจะไม่พิมพ์การติดตาม |
lp_algorithm |
อัลกอริทึมสำหรับการแก้ปัญหาโปรแกรมเชิงเส้น หาก LP_ALGORITHM_UNSPECIFIED ให้ใช้อัลกอริทึมเริ่มต้นของเครื่องมือแก้โจทย์คณ สำหรับปัญหาที่ไม่ใช่โปรแกรมเชิงเส้น แต่การเขียนโปรแกรมเชิงเส้นเป็นกิจวัตรย่อย เครื่องมือแก้โจทย์อาจใช้ค่านี้ เช่น โดยทั่วไปเครื่องมือแก้โจทย์ MIP จะใช้ค่านี้สำหรับการแก้โจทย์ LP ระดับรูทเท่านั้น (ในกรณีอื่น ให้ใช้คู่ทางเดียว) |
presolve |
พยายามทำให้ปัญหาง่ายขึ้นก่อนเริ่มอัลกอริทึมหลัก หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
cuts |
พยายามทำให้หน้า Landing Page ผ่อนคลายมากขึ้น (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED หมายเหตุ: การปิดใช้การตัดอาจทำให้โค้ดเรียกกลับไม่มีโอกาสในการเพิ่มการตัดที่ MIP_NODE เนื่องจากลักษณะการทำงานนี้มีไว้สำหรับเครื่องมือแก้โจทย์โดยเฉพาะ |
heuristics |
พยายามค้นหาวิธีแก้ปัญหาที่เป็นไปได้นอกเหนือจากที่พบในกระบวนการค้นหาที่สมบูรณ์ (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
scaling |
ความพยายามในการปรับขนาดปัญหาเพื่อปรับปรุงความเสถียรของตัวเลข หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
iteration_limit |
ข้อจำกัดการทำซ้ำของอัลกอริทึมพื้นฐาน (เช่น การหมุนแกนเดียว) ลักษณะการทำงานที่เจาะจงจะขึ้นอยู่กับเครื่องมือแก้โจทย์และอัลกอริทึมที่ใช้ แต่มักจะให้ขีดจำกัดการแก้โจทย์เชิงกำหนด (อาจต้องกำหนดค่าเพิ่มเติม เช่น ชุดข้อความเดียว) โดยปกติจะรองรับโดยเครื่องมือแก้โจทย์คณิต LP, QP และ MIP แต่สำหรับเครื่องมือแก้โจทย์ MIP โปรดดู Node_limit ด้วย |
node_limit |
ขีดจำกัดของจำนวนปัญหาย่อยที่แก้ไขในการค้นหาแบบแจกแจง (เช่น สาขาและขอบเขต) สำหรับเครื่องมือแก้โจทย์คณิตจำนวนมาก คุณสามารถใช้คำสั่งนี้เพื่อจำกัดการคํานวณเชิงกําหนดได้ (อาจต้องกําหนดค่าเพิ่มเติม เช่น เทรดเดียว) โดยทั่วไปแล้วสำหรับเครื่องมือแก้โจทย์ MIP โปรดดู iteration_limit ด้วย |
cutoff_limit |
เครื่องมือแก้โจทย์คณิตจะหยุดตั้งแต่เนิ่นๆ หากพิสูจน์ได้ว่าไม่มีวิธีแก้ปัญหาเบื้องต้นที่ดีเท่ากับการตัดคำ ในการหยุดก่อนกำหนด เครื่องมือแก้โจทย์คณิตจะแสดงเหตุผลการสิ้นสุด NO_SOLUTION_FOUND และมีขีดจำกัด CUTOFF และไม่จำเป็นต้องระบุข้อมูลเพิ่มเติมเกี่ยวกับโซลูชัน ไม่มีผลต่อมูลค่าผลตอบแทนหากไม่มีการหยุดก่อนกำหนด ขอแนะนําให้ใช้ความคลาดเคลื่อนหากต้องการส่งคืนโซลูชันที่มีวัตถุประสงค์เท่ากับค่าตัดออกทั้งหมด ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบ Best_bound_limit ได้ในคู่มือผู้ใช้ |
objective_limit |
เครื่องมือแก้โจทย์คณิตจะหยุดทันทีที่พบวิธีแก้ปัญหาซึ่งอย่างน้อยสิ่งนั้นดี มีเหตุผลการสิ้นสุดที่ทำได้ง่ายและจำกัดวัตถุประสงค์ |
best_bound_limit |
เครื่องมือแก้โจทย์คณิตจะหยุดทันทีที่พิสูจน์ขอบเขตได้ดีที่สุดว่าอย่างน้อยค่านี้ดี มีเหตุผลการสิ้นสุด FEASIBLE หรือ NO_SOLUTION_FOUND และจำกัด OBJECTIVE ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบกับ Cutoff_limit ในคู่มือผู้ใช้ |
solution_limit |
เครื่องมือแก้โจทย์คณจะหยุดชั่วคราวหลังจากพบวิธีแก้ปัญหาที่เป็นไปได้มากมายนี้ โดยมีเหตุผลที่สิ้นสุดการทำงานที่ง่ายและจำกัด SOLUTION ต้องมากกว่า 0 หากตั้งค่าไว้ ซึ่งมักจะใช้เพื่อให้เครื่องมือแก้โจทย์หยุดกับวิธีแก้ปัญหาที่ทำได้แรกที่พบ โปรดทราบว่าไม่มีการรับประกันค่าวัตถุประสงค์สำหรับโซลูชันที่แสดงผล โดยทั่วไปเครื่องมือแก้ปัญหาจะไม่แสดงโซลูชันเกินกว่าขีดจำกัดของโซลูชัน แต่ MathOpt ไม่ได้บังคับใช้นี้ โปรดดู b/214041169 ด้วย ปัจจุบันรองรับ Gurobi และ SCIP รวมถึงสำหรับ CP-SAT เท่านั้นที่มีค่า 1 |
threads |
หากตั้งค่าไว้ ค่าจะต้องเป็น >= 1 |
random_seed |
Seed สำหรับเครื่องมือสร้างตัวเลขสุ่มจำลองในตัวแก้โจทย์พื้นฐาน โปรดทราบว่าเครื่องมือแก้โจทย์คณทั้งหมดใช้ตัวเลขสุ่มเทียมเพื่อเลือกสิ่งต่างๆ เช่น การบิดเบือนในอัลกอริทึม LP สำหรับกฎการผูกขาด และสำหรับการคืนค่าการเรียนรู้ การเปลี่ยนแปลงการตั้งค่านี้อาจส่งผลกระทบที่เห็นได้ชัดต่อการทำงานของเครื่องมือแก้โจทย์ แม้ว่าเครื่องมือแก้โจทย์คณทั้งหมดจะมีแนวคิดเกี่ยวกับ Seed โปรดทราบว่าค่าที่ถูกต้องจะขึ้นอยู่กับเครื่องมือแก้โจทย์จริง - 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,andom_seed)) |
absolute_gap_tolerance |
ความอดทนต่อประสิทธิภาพสูงสุด (เป็นหลัก) สำหรับเครื่องมือแก้ MIP GAP สัมบูรณ์คือค่าสัมบูรณ์ของความแตกต่างระหว่าง * ค่าที่เป็นกลางของโซลูชันที่เป็นไปได้ที่ดีที่สุดที่พบ * ขอบเขตคู่ที่ได้จากการค้นหา เครื่องมือแก้โจทย์จะหยุดได้เมื่อ GAP สัมบูรณ์มีค่าสูงสุด absolute_gap_tolerance (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL ต้องเป็น >= 0 ถ้าตั้งค่าไว้ ดูเพิ่มเติม Rel_gap_tolerance |
relative_gap_tolerance |
การยอมรับความหลากหลายที่เหมาะสม (เป็นหลัก) สำหรับเครื่องมือแก้ MIP GAP แบบสัมพัทธ์คือ GAP สัมบูรณ์เวอร์ชันมาตรฐาน (กำหนดไว้ใน absolute_gap_tolerance) ซึ่งการปรับให้สอดคล้องตามมาตรฐานนั้นขึ้นอยู่กับเครื่องมือแก้โจทย์ เช่น GAP สัมบูรณ์หารด้วยค่าที่เป็นวัตถุประสงค์ของโซลูชันที่เป็นไปได้ที่ดีที่สุดที่พบ เครื่องมือแก้โจทย์คณจะหยุดเมื่อ GAP แบบสัมพัทธ์อยู่ที่สัมพัทธ์_gap_tolerance สูงสุด (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL ต้องเป็น >= 0 ถ้าตั้งค่าไว้ ดู absolute_gap_tolerance ด้วย |
solution_pool_size |
ดูแลรักษาโซลูชันได้สูงสุด |
SolveResultProto
สัญญาว่าเมื่อโซลูชัน/การแยกแสงพื้นฐาน/สีคู่มีความซับซ้อน โปรดดู cancel_reasons.md เพื่อดูคำอธิบายทั้งหมด
วิธีที่ดีที่สุดคือการตรวจสอบว่ามีโซลูชัน/แนวทางแก้ไขปัญหาหรือไม่ แทนที่จะใช้เหตุผลในการสิ้นสุดข้อตกลงที่แน่นอนที่สุดคือสัญญาที่แน่ชัด
ช่อง | |
---|---|
termination |
เหตุผลที่เครื่องมือแก้โจทย์หยุดลง |
solutions[] |
สัญญาทั่วไปสำหรับลำดับของโซลูชันที่นักแก้โจทย์ในอนาคตควรดำเนินการคือลำดับตาม 1. โซลูชันที่มีโซลูชันที่เป็นไปได้ขั้นต้น โดยเรียงตามวัตถุประสงค์เบื้องต้นที่ดีที่สุดก่อน 2. คำตอบที่มีโซลูชันที่เป็นไปได้แบบคู่ โดยเรียงลำดับตามจุดประสงค์คู่ที่ดีที่สุด (วัตถุประสงค์คู่ที่ไม่รู้จักนั้นแย่ที่สุด) 3. โซลูชันที่เหลือทั้งหมดจะส่งคืนตามลำดับใดก็ได้ |
primal_rays[] |
แนวทางการปรับปรุงเบื้องต้นที่ไม่มีขอบเขต หรือใบรับรองความสามารถในการดำเนินการไม่ได้แบบคู่ที่เทียบเท่ากัน โดยทั่วไปแล้วจะมีการระบุสำหรับ FinalReasonProtos UNBOUNDED และ DUAL_INFEASIBLE |
dual_rays[] |
คำแนะนำสำหรับการปรับปรุงแบบคู่ที่ไม่มีขอบเขตหรือใบรับรองความเป็นไปได้หลักที่ป้องกันไม่ได้ในระดับพื้นฐาน โดยทั่วไปแล้วจะให้บริการสำหรับ FinalREASONProto INFEASIBLE |
solve_stats |
สถิติเกี่ยวกับขั้นตอนการแก้โจทย์ เช่น ระยะเวลาทำงาน การทำซ้ำ |
SolveStatsProto
ช่อง | |
---|---|
solve_time |
เวลาจริงที่ผ่านไปซึ่งวัดโดย math_opt เป็นเวลาโดยประมาณภายใน Solver::Solve() หมายเหตุ: ไม่รวมถึงงานที่ได้สร้างโมเดลไปแล้ว |
problem_status |
สถานะความเป็นไปได้ของปัญหาขั้นต้นและปัญหาคู่ |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
เครื่องมือแก้โจทย์คณิตที่ MathOpt รองรับ
Enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
การแก้โจทย์ปัญหา Constraint Integer Program (SCIP) (บุคคลที่สาม) รองรับโจทย์กำลังสองของจำนวนเต็ม LP, MIP และจำนวนเต็มแบบ nonconvex แต่จะไม่ส่งคืนข้อมูลคู่ของ LP แนะนำให้ใช้ GLOP สำหรับ LP |
SOLVER_TYPE_GUROBI |
เครื่องมือแก้โจทย์ Gurobi (บุคคลที่สาม) รองรับโจทย์กำลังสองของจำนวนเต็ม LP, MIP และจำนวนเต็มแบบ nonconvex ตัวเลือกที่เร็วที่สุดโดยทั่วไป แต่มีการอนุญาตให้ใช้สิทธิแบบพิเศษ |
SOLVER_TYPE_GLOP |
เครื่องมือแก้โจทย์คณิตของ Google รองรับ LP โดยใช้วิธีพื้นฐานและแบบ Dual Simplex |
SOLVER_TYPE_CP_SAT |
เครื่องมือแก้โจทย์ CP-SAT ของ Google รองรับโจทย์ที่ตัวแปรทั้งหมดเป็นจำนวนเต็มและมีขอบเขต (หรือกล่าวเป็นนัยว่าอยู่หลังค่าที่กำหนดล่วงหน้า) การสนับสนุนแบบทดลองเพื่อปรับขนาดและจำแนกปัญหาด้วยการใช้ตัวแปรอย่างต่อเนื่อง |
SOLVER_TYPE_PDLP |
เครื่องมือแก้ปัญหา PDLP ของ Google รองรับวัตถุประสงค์กำลังสองด้านแนวทแยงและนูนนูน ใช้วิธีการจัดลำดับแรกมากกว่าจะใช้รูปแบบอย่างง่าย แก้ปัญหาที่ใหญ่มากๆ ได้ |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit (GLPK) (บุคคลที่สาม) รองรับ MIP และ LP ความปลอดภัยของเทรด: GLPK ใช้พื้นที่เก็บข้อมูลในเครื่องแบบเทรดสำหรับการจัดสรรหน่วยความจำ ดังนั้นอินสแตนซ์ตัวแก้ปัญหาผลลัพธ์ต้องถูกทำลายในเทรดเดียวกันกับที่สร้างขึ้น มิเช่นนั้น GLPK จะขัดข้อง ดูเหมือนว่าจะเรียก Solver::Solve() จากเทรดอื่นแทนเทรดที่ใช้สร้าง Solver ได้ แต่ GLPK ไม่ได้จัดทำเอกสารไว้ คุณจึงควรหลีกเลี่ยง เมื่อแก้ LP ด้วยตัวละลาย ระบบจะแสดงผลคำตอบ (และรังสีไร้ขอบเขต) ก็ต่อเมื่อพบคำตอบที่เหมาะสมที่สุดเท่านั้น ไม่เช่นนั้นจะไม่มีการส่งคืนสิ่งใด ดูรายละเอียดได้ที่ glpk-5.0/doc/glpk.pdf หน้า #40 ที่มีให้บริการใน glpk-5.0.tar.gz |
SOLVER_TYPE_OSQP |
Operator Splitting Quadratic Program (OSQP) (บุคคลที่สาม) รองรับโจทย์ต่อเนื่องที่มีจุดยึดเชิงเส้นและวัตถุประสงค์กำลังสองเชิงเส้นหรือนูน ใช้วิธีการแบบลำดับแรก |
SOLVER_TYPE_ECOS |
เครื่องมือแก้ปัญหา Conic แบบฝัง (ECOS) (บุคคลที่สาม) สนับสนุนปัญหา LP และ SOCP ใช้วิธีการระบุจุดภายใน (สิ่งกีดขวาง) |
SOLVER_TYPE_SCS |
The Splitting Conic Solver (SCS) (บุคคลที่สาม) สนับสนุนปัญหา LP และ SOCP ใช้วิธีการแบบลำดับแรก |
SOLVER_TYPE_HIGHS |
HiGHS Solver (บุคคลที่สาม) รองรับปัญหา LP และ MIP (ไม่ได้ติดตั้งใช้งาน QP ของ Conves) |
SOLVER_TYPE_SANTORINI |
การใช้งานข้อมูลอ้างอิงของ MathOpt ของเครื่องมือแก้โจทย์ MIP ช้า/ไม่แนะนำสำหรับเวอร์ชันที่ใช้งานจริง ไม่ใช่เครื่องมือแก้โจทย์ LP (ไม่แสดงข้อมูลคู่) |
SosConstraintProto
ข้อมูลสำหรับการแสดงข้อจำกัด SOS1 หรือ SOS2 เดียว
หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0
ช่อง | |
---|---|
expressions[] |
นิพจน์ที่จะนำไปใช้กับข้อจำกัด SOS: * SOS1: องค์ประกอบอย่างน้อยหนึ่งองค์ประกอบมีค่าที่ไม่ใช่ 0 * SOS2: องค์ประกอบอย่างน้อย 2 องค์ประกอบมีค่าที่ไม่ใช่ 0 และต้องอยู่ติดกันในลำดับซ้ำ |
weights[] |
ค่าว่างหรือมีความยาวเท่ากับนิพจน์ หากเว้นว่างไว้ น้ำหนักเริ่มต้นจะเป็น 1, 2, ... หากมี ข้อมูลจะต้องไม่ซ้ำกัน |
name |
ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.sos1_constraints และ SosConstraintUpdatesProto.new_constraints |
SparseBasisStatusVector
การแสดงเวกเตอร์ของสถานะพื้นฐานอย่างคร่าวๆ
ช่อง | |
---|---|
ids[] |
ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส |
SparseDoubleMatrixProto
การแสดงเมทริกซ์ของเลขคู่อย่างคร่าวๆ
เมทริกซ์จะได้รับการจัดเก็บเป็น 3 ส่วน ได้แก่ รหัสแถว รหัสคอลัมน์ และค่าสัมประสิทธิ์ เวกเตอร์ 3 เวกเตอร์นี้ต้องมีความยาวเท่ากัน ในกลุ่ม i ทั้งหมด ตูเปิล (row_ids[i],column_ids[i]) ควรแตกต่างกัน ข้อมูลต้องเรียงตามลำดับที่สำคัญ
ช่อง | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
อาจไม่มี NaN |
SparseDoubleVectorProto
การแสดงเวกเตอร์ของเลขคู่อย่างไม่ซับซ้อน
ช่อง | |
---|---|
ids[] |
ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส อาจไม่มี NaN |
SparseInt32VectorProto
การแสดงเวกเตอร์ของ Int ในจำนวนที่น้อย
ช่อง | |
---|---|
ids[] |
ควรจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยมีองค์ประกอบทั้งหมดแตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส |
SparseVectorFilterProto
ข้อความนี้ให้คุณค้นหา/ตั้งค่าส่วนต่างๆ ของ SparseXxxxVector ลักษณะการทำงานเริ่มต้นไม่ได้กรองข้อมูลออก การใช้งานทั่วไปคือการค้นหาเฉพาะบางส่วนของคำตอบ (เฉพาะค่าที่ไม่ใช่ 0 และ/หรือชุดค่าตัวแปรที่เลือกเอง)
ช่อง | |
---|---|
skip_zero_values |
สำหรับ "ศูนย์" ของ SparseBoolVectorProto มีค่าเป็น |
filter_by_ids |
เมื่อเป็นจริง ให้แสดงผลเฉพาะค่าที่ตรงกับรหัสที่แสดงในFilter_ids เท่านั้น |
filtered_ids[] |
รายการรหัสที่จะใช้เมื่อ filter_by_ids เป็นจริง ต้องว่างเปล่าเมื่อ filter_by_ids เป็นเท็จ หมายเหตุ: หากช่องนี้ว่างเปล่า และ filter_by_ids เป็นจริง แสดงว่าคุณไม่ต้องการข้อมูลใดๆ ในผลลัพธ์ |
TerminationProto
ข้อมูลทั้งหมดเกี่ยวกับสาเหตุที่การเรียก Solve() สิ้นสุดลง
ช่อง | |
---|---|
reason |
ข้อมูลเพิ่มเติมใน |
limit |
คือ LIMIT_UNSPECIFIED เว้นแต่เหตุผลคือ TERMINATION_REASON_FEASIBLE หรือ TERMINATION_REASON_NO_SOLUTION_FOUND เครื่องมือแก้โจทย์คณิตบางส่วนไม่สามารถกำหนดขีดจำกัดที่ทำให้เกิดการสิ้นสุดได้เสมอไป ระบบจะใช้ LIMIT_UNDETERMINED เมื่อไม่สามารถระบุสาเหตุได้ |
detail |
ข้อมูลเพิ่มเติมที่เจาะจงเกี่ยวกับการสิ้นสุดการใช้งาน |
problem_status |
สถานะความเป็นไปได้ของปัญหาขั้นต้นและปัญหาคู่ ตั้งแต่วันที่ 18 กรกฎาคม 2023 ข้อความนี้อาจหายไป หากขาดหายไป คุณสามารถดู problem_status ได้ใน Solve ResultsProto.solve_stats |
objective_bounds |
ผูกกับค่าวัตถุประสงค์ที่เหมาะสม ตั้งแต่วันที่ 18 กรกฎาคม 2023 ข้อความนี้อาจหายไป หากไม่ระบุ ระบบสามารถดู ONIX_bounds.primal_bound ได้ใน Solve ResultsProto.solve.stats.Best_primal_bound และ object_bounds.dual_bound อยู่ใน Solve ResultsProto.solve.stats.Best_dual_bound |
TerminationReasonProto
เหตุผลที่การเรียกใช้ Solve() สิ้นสุดลง
Enum | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
พบโซลูชันที่เหมาะสมที่สุด (ขึ้นอยู่กับความคลาดเคลื่อนตัวเลข) |
TERMINATION_REASON_INFEASIBLE |
ปัญหาพื้นฐานไม่มีวิธีแก้ไขที่เป็นไปได้ |
TERMINATION_REASON_UNBOUNDED |
ปัญหาพื้นฐานนั้นเกิดขึ้นได้และพบวิธีแก้ปัญหาที่เหมาะสมตามอำเภอใจ |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
ปัญหาพื้นฐานนั้นจัดการไม่ได้หรือไม่มีขอบเขต ดูรายละเอียดเพิ่มเติมเกี่ยวกับสถานะปัญหาได้ใน Sols_stats.problem_status โปรดทราบว่าสถานะที่ไม่มีขอบเขตของ Gurobi อาจมีการเชื่อมโยงที่นี่ |
TERMINATION_REASON_IMPRECISE |
ปัญหาได้รับการแก้ไขโดยใช้เกณฑ์ใดเกณฑ์หนึ่งข้างต้น (เพิ่มประสิทธิภาพ ดำเนินการไม่ได้ ไม่จำกัด หรือไม่มีขอบเขต) แต่ไม่เป็นไปตามความคลาดเคลื่อนอย่างน้อย 1 ข้อ โซลูชัน/แสงพื้นฐาน/โซลูชันแบบคู่อาจทำได้ แต่อาจทำไม่ได้เล็กน้อยหรือ (หากปัญหาเกือบเหมาะสมที่สุด) อาจเป็นช่องว่างระหว่างวัตถุประสงค์ของโซลูชันที่ดีที่สุดกับขอบเขตวัตถุประสงค์ที่ดีที่สุด ผู้ใช้ยังคงค้นหาโซลูชัน/โซลูชันพื้นฐาน/คู่และสถิติโซลูชันได้ แต่ต้องจัดการกับความคลาดเคลื่อนของตัวเลข |
TERMINATION_REASON_FEASIBLE |
เครื่องมือเพิ่มประสิทธิภาพถึงขีดจำกัดบางอย่างแล้ว และได้ส่งคืนโซลูชันที่เป็นไปได้เบื้องต้นให้แล้ว ดูที่ Solve ResultsProto.limit_detail สําหรับคำอธิบายโดยละเอียดของประเภทขีดจํากัดที่ถึงขีดจำกัด |
TERMINATION_REASON_NO_SOLUTION_FOUND |
เครื่องมือเพิ่มประสิทธิภาพถึงขีดจำกัดบางอย่างแล้ว และไม่พบวิธีแก้ปัญหาที่เป็นไปได้เบื้องต้น ดูที่ Solve ResultsProto.limit_detail สําหรับคำอธิบายโดยละเอียดของประเภทขีดจํากัดที่ถึงขีดจำกัด |
TERMINATION_REASON_NUMERICAL_ERROR |
อัลกอริทึมหยุดทำงานเนื่องจากพบข้อผิดพลาดที่เป็นตัวเลขซึ่งกู้คืนไม่ได้ ไม่มีข้อมูลโซลูชัน |
TERMINATION_REASON_OTHER_ERROR |
อัลกอริทึมหยุดทํางานเนื่องจากเกิดข้อผิดพลาดที่สถานะใดสถานะหนึ่งที่กําหนดไว้ข้างต้นไม่ครอบคลุม ไม่มีข้อมูลโซลูชัน |
VariablesProto
ตามที่ใช้ด้านล่างนี้ เราได้กำหนด "#variables" = size(VariantProto.ids)
ช่อง | |
---|---|
ids[] |
ต้องไม่เป็นค่าลบและต้องเพิ่มขึ้นอย่างเคร่งครัด ใช้ค่า max(int64) ไม่ได้ |
lower_bounds[] |
ควรมีความยาวเท่ากับ #variables, ค่าเป็น [-inf, inf) |
upper_bounds[] |
ควรมีความยาวเท่ากับ #variables, ค่าเป็น (-inf, inf] |
integers[] |
ควรมีความยาวเท่ากับ #variables ค่าเป็นเท็จสำหรับตัวแปรต่อเนื่องและเป็นจริงสำหรับตัวแปรจำนวนเต็ม |
names[] |
หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ไม่เช่นนั้น ควรมีความยาวเท่ากับ #variables ชื่อที่ไม่ว่างเปล่าทั้งหมดต้องไม่ซ้ำกัน |