แก้โมเดลอินพุตและแสดงผลลัพธ์พร้อมกัน ใช้ตัวเลือกนี้เมื่อคุณไม่ต้องการการเรียกกลับ ส่วนเพิ่ม และไม่จำเป็นต้องติดตามความคืบหน้าของการแก้ปัญหา
คำขอ HTTP
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
URL ใช้ไวยากรณ์การแปลง gRPC
เนื้อหาของคำขอ
เนื้อหาของคำขอมีข้อมูลที่มีโครงสร้างต่อไปนี้
การแสดง JSON |
---|
{ "solverType": enum ( |
ช่อง | |
---|---|
solverType |
ไม่บังคับ ประเภทเครื่องมือแก้โจทย์เพื่อแก้โจทย์เชิงตัวเลข โปรดทราบว่าหากตัวแก้โจทย์ไม่รองรับฟีเจอร์บางอย่างในโมเดล ขั้นตอนการเพิ่มประสิทธิภาพจะไม่สำเร็จ |
model |
ต้องระบุ การนำเสนอทางคณิตศาสตร์ของโจทย์การเพิ่มประสิทธิภาพที่จะแก้ |
parameters |
ไม่บังคับ พารามิเตอร์สำหรับควบคุมการแก้โจทย์เพียงครั้งเดียว พารามิเตอร์ enabledOutput จะได้รับการจัดการโดยเฉพาะ สําหรับเครื่องมือแก้โจทย์ที่รองรับ Callback ของข้อความ การตั้งค่าเป็นจริงจะทำให้เซิร์ฟเวอร์ลงทะเบียน Callback ของข้อความ ข้อความที่ได้จะถูกส่งคืนใน SolveMathOptModelResponse.messages สำหรับเครื่องมือแก้โจทย์อื่นๆ การตั้งค่า enabledOutput เป็น true จะทำให้เกิดข้อผิดพลาด |
modelParameters |
ไม่บังคับ พารามิเตอร์ที่จะควบคุมการแก้โจทย์เดี่ยวๆ ที่มีเฉพาะในโมเดลอินพุต (ดู SolveParametersProto สำหรับพารามิเตอร์อิสระของโมเดล) |
เนื้อหาการตอบกลับ
การตอบสนองสําหรับการแก้ปัญหาจากระยะไกลแบบเอกภาคใน MathOpt
หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้
การแสดง JSON |
---|
{
"result": {
object ( |
ช่อง | |
---|---|
result |
คำอธิบายเอาต์พุตของการแก้โจทย์โมเดลในคำขอ |
messages[] |
หากมีการใช้ SolveParametersProto.enable_output พารามิเตอร์นี้จะมีข้อความบันทึกสำหรับตัวแก้โจทย์ที่รองรับ Callback ของข้อความ |
SolverTypeProto
เครื่องมือแก้โจทย์ที่ MathOpt รองรับ
Enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
การแก้โปรแกรมแก้โจทย์โปรแกรมจำนวนเต็ม (SCIP) (บุคคลที่สาม) รองรับโจทย์กำลังสองจำนวนเต็ม LP, MIP และที่ไม่ใช่ Convvex อย่างไรก็ตาม จะไม่มีการส่งกลับข้อมูลแบบคู่สำหรับ LP ขอแนะนำให้ใช้ GLOP สำหรับ LP |
SOLVER_TYPE_GUROBI |
เครื่องมือแก้โจทย์ Gurobi (บุคคลที่สาม) รองรับโจทย์กำลังสองจำนวนเต็ม LP, MIP และที่ไม่ใช่ Convvex โดยทั่วไปคือตัวเลือกที่เร็วที่สุด แต่มีการอนุญาตให้ใช้สิทธิแบบพิเศษ |
SOLVER_TYPE_GLOP |
เครื่องมือแก้โจทย์ Glop ของ Google รองรับ LP ด้วยเมธอดไพรมัลและ Dual Simplex |
SOLVER_TYPE_CP_SAT |
เครื่องมือแก้โจทย์ CP-SAT ของ Google รองรับปัญหาที่ตัวแปรทั้งหมดเป็นจำนวนเต็มและล้อมรอบ (หรือบอกเป็นนัยว่าอยู่หลังการแก้) การสนับสนุนแบบทดลองเพื่อปรับขนาดและแยกแยะปัญหาที่มีตัวแปรต่อเนื่อง |
SOLVER_TYPE_PDLP |
เครื่องมือแก้โจทย์ PDLP ของ Google รองรับวัตถุประสงค์ด้านกำลังสอง LP และเส้นทแยงมุมนูน ใช้วิธีการจัดเรียงลำดับแรกแทนแบบง่าย แก้โจทย์ที่มีขนาดใหญ่มากได้ |
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 |
Embedded Conic Solver (ECOS) (บุคคลที่สาม) รองรับปัญหา LP และ SOCP ใช้วิธีการจุดภายใน (สิ่งกีดขวาง) |
SOLVER_TYPE_SCS |
Splitting Conic Solver (SCS) (บุคคลที่สาม) รองรับปัญหา LP และ SOCP ใช้วิธีสั่งซื้อก่อน |
SOLVER_TYPE_HIGHS |
เครื่องมือแก้ปัญหา HiGHS (บุคคลที่สาม) รองรับปัญหา LP และ MIP (ไม่ได้ใช้งาน Conv. QP) |
SOLVER_TYPE_SANTORINI |
การใช้ข้อมูลอ้างอิงของ MathOpt ในโปรแกรมแก้โจทย์ MIP ช้า/ไม่แนะนำสำหรับเวอร์ชันที่ใช้งานจริง ไม่ใช่เครื่องมือแก้โจทย์ LP (ไม่มีการส่งคืนข้อมูลแบบคู่) |
ModelProto
ปัญหาการเพิ่มประสิทธิภาพ MathOpt รองรับตัวแปรการตัดสินใจแบบต่อเนื่องและจำนวนเต็มที่มีขอบเขตจำกัดซึ่งไม่บังคับ - วัตถุประสงค์เชิงเส้นและกำลังสอง (วัตถุประสงค์เดียวหรือหลายวัตถุประสงค์) อาจเป็นต่ำสุดหรือสูงสุด - ข้อจำกัดจำนวนหนึ่ง ได้แก่ * ข้อจำกัดเชิงเส้น * ข้อจำกัดกำลังสอง * ข้อจำกัดแบบกรวยลำดับที่สอง * ข้อจำกัดเชิงตรรกะ > ข้อจำกัด SOS1 และ SOS2 > ข้อจำกัดตัวบ่งชี้
โดยค่าเริ่มต้น ข้อจำกัดจะแสดงใน "id-to-data" แผนที่ อย่างไรก็ตาม เราแสดงข้อจำกัดเชิงเส้นใน "โครงสร้างของอาร์เรย์" ที่มีประสิทธิภาพมากขึ้น
การแสดง JSON |
---|
{ "name": string, "variables": { object ( |
ช่อง | |
---|---|
name |
|
variables |
|
objective |
วัตถุประสงค์หลักในโมเดล |
auxiliaryObjectives |
วัตถุประสงค์เสริมสำหรับใช้ในโมเดลที่มีหลายวัตถุประสงค์ รหัสคีย์แมปต้องเป็น [0, max(int64)) ลำดับความสำคัญแต่ละรายการและชื่อที่ไม่ว่างเปล่าจะต้องไม่ซ้ำกัน และแตกต่างจาก ออบเจ็กต์ที่มีรายการคู่ |
linearConstraints |
|
linearConstraintMatrix |
ค่าสัมประสิทธิ์ตัวแปรสำหรับข้อจำกัดเชิงเส้น หากลบตัวแปรที่เกี่ยวข้องในข้อจำกัดนี้ จะถือว่าตัวแปรนั้นตั้งเป็น 0 ข้อกำหนด: * linearConstraintMatrix.row_ids เป็นองค์ประกอบของ LinearConstraints.ids * LinearConstraintMatrix.column_ids เป็นองค์ประกอบของรหัสตัวแปร (variables.id) * ไม่ได้ระบุรายการเมทริกซ์เป็น 0 * linearConstraintMatrix.values ทั้งหมดต้องเป็นแบบสิ้นสุดทั้งหมด |
quadraticConstraints |
ข้อจำกัดกำลังสองในโมเดล ออบเจ็กต์ที่มีรายการคู่ |
secondOrderConeConstraints |
ข้อจำกัดกรวยลำดับที่สองในโมเดล ออบเจ็กต์ที่มีรายการคู่ |
sos1Constraints |
ข้อจำกัด SOS1 ในโมเดล ซึ่งจำกัด ออบเจ็กต์ที่มีรายการคู่ |
sos2Constraints |
ข้อจำกัด SOS2 ในโมเดลซึ่งจำกัด ออบเจ็กต์ที่มีรายการคู่ |
indicatorConstraints |
ข้อจำกัดตัวบ่งชี้ในโมเดล ซึ่งบังคับใช้หากเป็น "ตัวแปรตัวบ่งชี้" แบบไบนารี มีค่าเป็น 1 แล้วตามด้วย "ข้อจำกัดโดยนัย" ต้องระงับไว้ ออบเจ็กต์ที่มีรายการคู่ |
VariablesProto
ตามที่ใช้ด้านล่าง เรานิยาม "#variables" = size(VariableProto.ids)
การแสดง JSON |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
ช่อง | |
---|---|
ids[] |
ต้องไม่ติดลบและต้องเพิ่มขึ้นเรื่อยๆ ใช้ค่า max(int64) ไม่ได้ |
lowerBounds[] |
ควรมีความยาวเท่ากับ #variables ค่าใน [-inf, inf) |
upperBounds[] |
ควรมีความยาวเท่ากับ #variables, ค่า in (-inf, inf] |
integers[] |
ควรมีความยาวเท่ากับ #variables ค่าเป็น false สำหรับตัวแปรต่อเนื่อง และเป็น true สำหรับตัวแปรจำนวนเต็ม |
names[] |
หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ไม่เช่นนั้น ควรมีความยาวเท่ากับ #variables ชื่อต้องไม่ว่างเปล่าทั้งหมด |
ObjectiveProto
การแสดง JSON |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
ช่อง | |
---|---|
maximize |
false คือย่อเล็กสุด ส่วน true คือขยายใหญ่สุด |
offset |
ต้องมีขอบเขต ไม่ใช่ NaN |
linearCoefficients |
คำของ ObjectiveProto ที่เป็นเชิงเส้นในตัวแปรการตัดสินใจ ข้อกำหนด: * LinearCoป๊อปอัปs.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปร Proto ไม่ได้ระบุสัมพันธ์กับ 0 * ค่าสัมประสิทธิ์เชิงเส้นทั้งหมดต้องมีค่าจำกัด * ค่าสัมประสิทธิ์เชิงเส้น ค่าเป็น 0 อาจเป็น 0 แต่จะทำให้สิ้นเปลืองพื้นที่ |
quadraticCoefficients |
คำที่เป็นกลางซึ่งเป็นรูปกำลังสองในตัวแปรการตัดสินใจ ข้อกำหนดนอกเหนือจากที่ระบุไว้ในข้อความ SparseDoubleMatrixProto: * แต่ละองค์ประกอบของ quadraticCoเส้นประสิทธิ์.row_ids และเอลิเมนต์ของ quadraticCoefficiencys.column_ids แต่ละเอลิเมนต์ต้องเป็นองค์ประกอบของ VariableProto.ids * เมทริกซ์จะต้องเป็นสามเหลี่ยมด้านบน โดยสำหรับ i แต่ละ i, quadraticCoจุดหมายs.row_ids[i] <= quadraticCoป๊อปอัปs.column_ids[i] หมายเหตุ: * คำศัพท์ที่ไม่ได้จัดเก็บอย่างชัดแจ้งจะมีสัมประสิทธิ์เป็นศูนย์ * องค์ประกอบของค่าสัมประสิทธิ์กำลังสองอาจเป็น 0 แต่ทำให้สิ้นเปลืองพื้นที่ |
name |
ข้อความหลักอาจมีข้อกำหนดด้านความไม่ซ้ำกันในช่องนี้ เช่น ดู ModelProto.objectives และ AuxiliaryObjectivesUpdatesProto.new_objectives |
priority |
สำหรับปัญหาที่มีหลายวัตถุประสงค์ ลำดับความสำคัญของวัตถุประสงค์นี้เมื่อเทียบกับปัญหาอื่นๆ (ต่ำกว่ามีความสำคัญกว่า) ค่านี้ต้องไม่ติดลบ นอกจากนี้ ลำดับความสำคัญของแต่ละวัตถุประสงค์ในโมเดลจะต้องแตกต่างกัน ณ เวลาที่แก้ปัญหา เงื่อนไขนี้ไม่ได้รับการตรวจสอบที่ระดับโปรโต ดังนั้นโมเดลอาจมีวัตถุประสงค์ที่มีลำดับความสำคัญเท่ากันเป็นการชั่วคราว |
SparseDoubleVectorProto
รูปแบบเวกเตอร์ของเลขคู่
การแสดง JSON |
---|
{ "ids": [ string ], "values": [ number ] } |
ช่อง | |
---|---|
ids[] |
ต้องจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยให้องค์ประกอบทั้งหมดแตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส อาจไม่มี NaN |
SparseDoubleMatrixProto
การนำเสนอแบบคร่าวๆ ของเมทริกซ์คู่
เมทริกซ์จะจัดเก็บเป็น 3 ส่วนของรหัสแถว รหัสคอลัมน์ และค่าสัมประสิทธิ์ เวกเตอร์ทั้ง 3 นี้ต้องมีความยาวเท่ากัน สำหรับ i ทั้งหมด tuple (rowIds[i],columnIds[i]) ควรแตกต่างกัน รายการต้องเรียงตามลำดับแถวสำคัญ
การแสดง JSON |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
ช่อง | |
---|---|
rowIds[] |
|
columnIds[] |
|
coefficients[] |
อาจไม่มี NaN |
LinearConstraintsProto
ดังที่ใช้ด้านล่าง เรานิยามคำว่า "#Linearข้อจํากัด" = size(LinearConstraintsProto.ids)
การแสดง JSON |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
ช่อง | |
---|---|
ids[] |
ต้องไม่ติดลบและต้องเพิ่มขึ้นเรื่อยๆ ใช้ค่า max(int64) ไม่ได้ |
lowerBounds[] |
ควรมีความยาวเท่ากับ #Linear ค่าจำกัด ค่าใน [-inf, inf) |
upperBounds[] |
ควรมีความยาวเท่ากับ #Linear ค่าจำกัด ค่าเป็น (-inf, inf] |
names[] |
หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ในกรณีอื่น ควรมีความยาวเท่ากับ #ข้อจำกัดเชิงเส้น ชื่อต้องไม่ว่างเปล่าทั้งหมด |
QuadraticConstraintProto
ข้อจำกัดกำลังสองเดี่ยวของรูปแบบ: lb <= sum{LinearTerms} + sum{quadraticTerms} <= ub
หากลบตัวแปรที่เกี่ยวข้องในข้อจำกัดนี้ จะถือว่าตัวแปรนั้นตั้งเป็น 0
การแสดง JSON |
---|
{ "linearTerms": { object ( |
ช่อง | |
---|---|
linearTerms |
คำศัพท์ที่เป็นเส้นตรงในตัวแปรการตัดสินใจ นอกจากข้อกำหนดสำหรับข้อความ SparseDoubleVectorProto แล้ว เรากำหนดให้ * Linearข้อตกลงงรหัส เป็นองค์ประกอบของ VariableProto.ids * Linearterms.values ต้องเป็นแบบจํากัดและไม่ใช่ไม่มี หมายเหตุ: * รหัสตัวแปรที่ละเว้นมีค่าสัมประสิทธิ์ที่สอดคล้องกันเป็น 0 * LinearTerms.values อาจเป็น 0 ได้ แต่จะทำให้สิ้นเปลืองพื้นที่ |
quadraticTerms |
คำศัพท์ที่เป็นกำลังสองในตัวแปรการตัดสินใจ นอกจากข้อกำหนดเกี่ยวกับข้อความ SparseDoubleMatrixProto แล้ว เรายังกำหนดให้: * แต่ละองค์ประกอบของ quadraticTerms.row_ids และองค์ประกอบแต่ละรายการของ quadraticTerms.column_ids จะต้องเป็นองค์ประกอบของ VariableProto.ids * เมทริกซ์จะต้องเป็นสามเหลี่ยมด้านบน โดยสำหรับ i แต่ละรายการ quadraticข้อตกลง.row_ids[i] <= quadratic Terms.column_ids[i] หมายเหตุ: * คำศัพท์ที่ไม่ได้จัดเก็บอย่างชัดแจ้งจะมีสัมประสิทธิ์เป็นศูนย์ * องค์ประกอบของ quadraticterms.coที่เป็นs อาจเป็น 0 ได้ แต่จะทำให้สิ้นเปลืองพื้นที่ |
lowerBound |
ต้องมีค่าเป็น [-inf, inf) และน้อยกว่าหรือเท่ากับ |
upperBound |
ต้องมีค่าเป็น (-inf, inf] และมากกว่าหรือเท่ากับ |
name |
ข้อความหลักอาจมีข้อกำหนดด้านความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.quadratic_constraints และ QuadraticConstraintUpdatesProto.new_constraints |
SecondOrderConeConstraintProto
ข้อจำกัดแบบกรวยลำดับที่สองของแบบฟอร์ม:
||argumentsToNorm
||_2 <= upperBound
,
โดยที่ upperBound
และองค์ประกอบของ argumentsToNorm
แต่ละองค์ประกอบเป็นนิพจน์เชิงเส้น
หากลบตัวแปรที่เกี่ยวข้องในข้อจำกัดนี้ จะถือว่าตัวแปรนั้นตั้งเป็น 0
การแสดง JSON |
---|
{ "upperBound": { object ( |
ช่อง | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
ข้อความหลักอาจมีข้อกำหนดด้านความไม่ซ้ำกันในช่องนี้ เช่น ดู |
LinearExpressionProto
การนำเสนอนิพจน์เชิงเส้นแบบคร่าวๆ (ผลรวมถ่วงน้ำหนักของตัวแปรและออฟเซ็ตคงที่)
การแสดง JSON |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
ช่อง | |
---|---|
ids[] |
รหัสของตัวแปร ต้องจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยให้องค์ประกอบทั้งหมดแตกต่างกัน |
coefficients[] |
ต้องมีความยาวเท่ากับรหัส ค่าต้องเป็นค่าจำกัดต้องไม่ใช่ค่า NaN |
offset |
ต้องมีระยะเวลาจำกัดและต้องไม่เป็นแบบ NaN |
SosConstraintProto
ข้อมูลสำหรับแสดงข้อจำกัด SOS1 หรือ SOS2 เดียว
หากลบตัวแปรที่เกี่ยวข้องในข้อจำกัดนี้ จะถือว่าตัวแปรนั้นตั้งเป็น 0
การแสดง JSON |
---|
{
"expressions": [
{
object ( |
ช่อง | |
---|---|
expressions[] |
นิพจน์ที่จะนำข้อจำกัด SOS: * SOS1: องค์ประกอบอย่างน้อย 1 รายการใช้ค่าที่ไม่ใช่ 0 * SOS2: องค์ประกอบอย่างน้อย 2 รายการจะใช้ค่าที่ไม่ใช่ 0 และจะต้องอยู่ติดกันในลำดับที่ซ้ำกัน |
weights[] |
นิพจน์ว่างเปล่าหรือมีความยาวเท่ากัน หากเว้นว่างไว้ น้ำหนักเริ่มต้นคือ 1, 2, ... หากมี รายการต้องไม่ซ้ำกัน |
name |
ข้อความหลักอาจมีข้อกำหนดด้านความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.sos1_constraints และ SosConstraintUpdatesProto.new_constraints |
IndicatorConstraintProto
ข้อมูลสำหรับแสดงข้อจำกัดเดียวของตัวบ่งชี้ในรูปแบบ: Variable(indicatorId) = (activateOnZero ? 0 : 1) ⇒ ขอบเขตล่าง <= นิพจน์ <= ขอบเขตบน
หากลบตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ (ตัวบ่งชี้หรือที่ปรากฏใน expression
) ออก ระบบจะถือว่าตัวแปรถูกตั้งค่าเป็น 0 โดยเฉพาะอย่างยิ่ง การลบตัวแปรตัวบ่งชี้หมายความว่าข้อจำกัดตัวบ่งชี้ไม่มีค่าหาก activateOnZero
เป็นเท็จ และเทียบเท่ากับข้อจำกัดเชิงเส้นหาก activateOnZero
เป็นจริง
การแสดง JSON |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
ช่อง | |
---|---|
activateOnZero |
หากเป็น "จริง" หากตัวแปรตัวบ่งชี้ใช้ค่า 0 ข้อจำกัดโดยนัยจะต้องคงค่าจำกัดไว้ มิฉะนั้น หากตัวแปรตัวบ่งชี้รับค่า 1 ก็จะต้องเก็บข้อจำกัดโดยนัยไว้ |
expression |
ต้องเป็นนิพจน์เชิงเส้นที่ถูกต้องตามโมเดลที่มี * เงื่อนไขทั้งหมดที่ระบุไว้ใน |
lowerBound |
ต้องมีค่าเป็น [-inf, inf); ไม่สามารถเป็น NaN |
upperBound |
ต้องมีค่าเป็น (-inf, inf] และไม่สามารถเป็น NaN ได้ |
name |
ข้อความหลักอาจมีข้อกำหนดด้านความไม่ซ้ำกันในช่องนี้ เช่น ดู |
indicatorId |
รหัสที่เกี่ยวข้องกับตัวแปรไบนารี หรือไม่ได้ตั้งค่า หากไม่ได้ตั้งค่า ระบบจะไม่สนใจข้อจำกัดของตัวบ่งชี้ หากมีการตั้งค่า เรากำหนดให้ต้องมีค่าดังนี้ * VariableProto.integers[indicatorId] = true, * VariableProto.lower_bounds[indicatorId] >= 0, * VariableProto.upper_bounds[indicatorId] <= 1. MathOpt ไม่ได้ตรวจสอบเงื่อนไขเหล่านี้ แต่หากไม่เป็นไปตามเงื่อนไข โปรแกรมแก้โจทย์จะส่งกลับข้อผิดพลาดเมื่อแก้ |
SolveParametersProto
พารามิเตอร์สำหรับควบคุมการแก้โจทย์เพียงครั้งเดียว
ประกอบด้วยพารามิเตอร์ทั้ง 2 แบบที่ใช้กับตัวแก้โจทย์ทั้งหมด เช่น ขีดจํากัดเวลา และพารามิเตอร์สําหรับเครื่องมือแก้โจทย์เฉพาะ เช่น gscip หากมีการตั้งค่าทั้งในช่องทั่วไปและช่องเฉพาะโปรแกรมแก้โจทย์ ระบบจะใช้การตั้งค่าเฉพาะโปรแกรมแก้โจทย์
พารามิเตอร์ทั่วไปที่เป็นตัวเลือกและไม่ได้ตั้งค่า หรือ enum ที่ไม่ได้ระบุค่าไว้บ่งชี้ว่ามีการใช้ค่าเริ่มต้นของโปรแกรมแก้โจทย์
ระบบจะไม่สนใจพารามิเตอร์เฉพาะของโปรแกรมแก้โจทย์สำหรับเครื่องมือแก้โจทย์อื่นที่ใช้อยู่
พารามิเตอร์ที่ขึ้นอยู่กับโมเดล (เช่น มีการกำหนดลำดับความสำคัญของการแตกแขนงสำหรับตัวแปรแต่ละตัว) จะส่งไปใน ModelSolveParametersProto
การแสดง JSON |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
ช่อง | |
---|---|
timeLimit |
ระยะเวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้กับโจทย์ (หรือไม่มีกำหนดสิ้นสุดหากไม่ได้ตั้งค่า) ค่านี้ไม่ใช่ค่าจำกัดถาวร เวลาในการแก้ไขอาจเกินค่านี้เล็กน้อย พารามิเตอร์นี้จะส่งไปยังโปรแกรมแก้โจทย์พื้นฐานเสมอ และจะไม่มีการใช้ค่าเริ่มต้นของโปรแกรมแก้โจทย์ ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
enableOutput |
เปิดใช้การพิมพ์การติดตามการใช้งานโปรแกรมแก้โจทย์ ตำแหน่งของการติดตามเหล่านั้นจะขึ้นอยู่กับตัวแก้โจทย์ สำหรับ SCIP และ Gurobi นี่คือสตรีมเอาต์พุตมาตรฐาน สำหรับ Glop และ CP-SAT การทำงานนี้จะ LOG(INFO) โปรดทราบว่าหากตัวแก้โจทย์รองรับ Callback ของข้อความและผู้ใช้บันทึก Callback สำหรับโปรแกรม ระบบจะไม่สนใจค่าพารามิเตอร์นี้และจะไม่พิมพ์การติดตาม |
lpAlgorithm |
อัลกอริทึมสำหรับการแก้โปรแกรมเชิงเส้น หากเป็น LP_ALGORITHM_UNSPECIFIED ให้ใช้อัลกอริทึมเริ่มต้นของเครื่องมือแก้โจทย์ สําหรับโจทย์ที่ไม่ใช่โปรแกรมเชิงเส้นแต่เป็นโปรแกรมเชิงเส้นเป็นกิจวัตรย่อย เครื่องมือแก้โจทย์อาจใช้ค่านี้ เช่น โดยทั่วไปแล้ว เครื่องมือแก้โจทย์ MIP จะใช้ตัวแปรนี้สำหรับการแก้ LP ระดับรูทเท่านั้น (หากไม่เป็นเช่นนั้นจะใช้ Dual Simplex) |
presolve |
ความพยายามในการลดความซับซ้อนของปัญหาก่อนเริ่มอัลกอริทึมหลัก หรือระดับความพยายามเริ่มต้นของเครื่องมือแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
cuts |
ความพยายามในการคลาย LP ที่ดีขึ้น (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นของเครื่องมือแก้โจทย์หาก EMPHASIS_UNSPECIFIED หมายเหตุ: การปิดใช้การตัดอาจป้องกันไม่ให้ Callback มีโอกาสเพิ่มการตัดที่ MIP_NODE เนื่องจากลักษณะการทำงานนี้ใช้ได้เฉพาะกับเครื่องมือแก้โจทย์ |
heuristics |
ความพยายามในการค้นหาวิธีแก้ปัญหาที่เป็นไปได้นอกเหนือจากที่พบในกระบวนการค้นหาที่สมบูรณ์ (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นของเครื่องมือแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
scaling |
ความพยายามในการปรับขนาดปัญหาเพื่อปรับปรุงความเสถียรของตัวเลข หรือระดับความพยายามเริ่มต้นของเครื่องมือแก้โจทย์หาก EMPHASIS_UNSPECIFIED |
iterationLimit |
ขีดจำกัดการทำซ้ำของอัลกอริทึมเบื้องหลัง (เช่น มุมปกติของการหมุน) ลักษณะการทำงานเฉพาะจะขึ้นอยู่กับเครื่องมือแก้โจทย์และอัลกอริทึมที่ใช้ แต่มักจะให้ขีดจํากัดการแก้ปัญหาเชิงกำหนดได้ (อาจต้องกําหนดค่าเพิ่มเติม เช่น เทรดเดียว) โดยทั่วไปรองรับโดยเครื่องมือแก้โจทย์ LP, QP และ MIP แต่สำหรับเครื่องมือแก้โจทย์ MIP จะเห็นค่า NodeLimit ด้วย |
nodeLimit |
ขีดจำกัดของจำนวนโจทย์ย่อยที่แก้ได้ในการค้นหาแบบแจกแจง (เช่น สาขาและขอบเขต) สําหรับเครื่องมือแก้โจทย์หลายตัว ตัวแปรนี้สามารถใช้เพื่อจำกัดการประมวลผลอย่างกําหนด (อาจมีการกําหนดค่าเพิ่มเติม เช่น เทรด 1 รายการ) โดยทั่วไปแล้วมีไว้สำหรับเครื่องมือแก้โจทย์ MIP โปรดดู iterationLimit ด้วย |
cutoffLimit |
เครื่องมือแก้โจทย์ควรหยุดตั้งแต่เนิ่นๆ หากพิสูจน์ได้ว่าไม่มีวิธีแก้ปัญหาเบื้องต้นใดดีไปกว่าการตัดออก ในช่วงแรก เครื่องมือแก้โจทย์จะแสดงสาเหตุการสิ้นสุด NO_SOLUTION_FOUND และมีขีดจำกัด CUTOFF และไม่จำเป็นต้องให้ข้อมูลเพิ่มเติมเกี่ยวกับโซลูชัน ไม่ส่งผลต่อมูลค่าการคืนสินค้าหากไม่มีการหยุดก่อนกำหนด เราขอแนะนำให้คุณใช้ความคลาดเคลื่อนนี้หากต้องการแสดงผลคำตอบที่มีวัตถุประสงค์ตรงกับจุดตัด ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบกับ BestBoundLimit ในคู่มือผู้ใช้ |
objectiveLimit |
เครื่องมือแก้โจทย์จะหยุดตั้งแต่เนิ่นๆ ทันทีที่พบวิธีที่เหมาะสม ซึ่งอย่างน้อยที่สุดมีเหตุผลในการสิ้นสุด "เป็นไปได้" และจำกัดวัตถุประสงค์ |
bestBoundLimit |
เครื่องมือแก้โจทย์จะหยุดก่อนทันทีที่พิสูจน์ได้ว่าขอบเขตที่ดีที่สุดคือค่าที่เหมาะสม โดยมีเหตุผลการสิ้นสุดเป็น FEASIBLE หรือ NO_SOLUTION_FOUND และจำกัด OBJECTIVE ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบกับCutoffLimit ได้ในคู่มือผู้ใช้ |
solutionLimit |
เครื่องมือแก้โจทย์ควรหยุดตั้งแต่เนิ่นๆ หลังจากพบวิธีแก้ปัญหาที่เป็นไปได้จำนวนมาก โดยมีเหตุผลในการสิ้นสุดการใช้งาน FEASIBLE และจำกัด SOLUTION ต้องมากกว่า 0 หากมีการตั้งค่า มักใช้เพื่อให้เครื่องมือแก้โจทย์หยุดเมื่อพบวิธีแก้ปัญหาแรกที่เป็นไปได้ โปรดทราบว่าไม่มีการรับประกันมูลค่าวัตถุประสงค์สําหรับโซลูชันที่แสดงขึ้นมา โดยทั่วไปเครื่องมือแก้โจทย์จะไม่แสดงโซลูชันเกินจำนวนคำตอบที่จำกัด แต่ไม่ได้บังคับใช้โดย MathOpt โปรดดู b/214041169 ด้วย ปัจจุบันรองรับ Gurobi และ SCIP และสำหรับ CP-SAT ที่มีค่า 1 เท่านั้น |
threads |
หากตั้งค่าไว้ ค่าต้องเป็น >= 1 |
randomSeed |
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, sampleSeed)) |
absoluteGapTolerance |
ความคลาดเคลื่อนสัมบูรณ์ของประสิทธิภาพสูงสุด (หลักๆ) สำหรับเครื่องมือแก้โจทย์ MIP GAP สัมบูรณ์ คือค่าสัมบูรณ์ของความแตกต่างระหว่าง: * ค่าที่เป็นกลางของวิธีแก้โจทย์ที่ดีที่สุดเท่าที่จะเป็นไปได้ * ขอบเขตคู่ที่เกิดจากการค้นหา เครื่องมือแก้โจทย์อาจหยุดทำงานเมื่อ GAP สัมบูรณ์มีค่าสัมบูรณ์ของ GapTolerance มากที่สุด (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL ต้อง >= 0 หากตั้งค่าไว้ โปรดดู RelativeGapTolerance |
relativeGapTolerance |
ความคลาดเคลื่อนสัมพัทธ์ (หลัก) สำหรับเครื่องมือแก้โจทย์ MIP GAP สัมพัทธ์คือ GAP สัมบูรณ์เวอร์ชันมาตรฐาน (กำหนดตาม AbsoluteGapTolerance) ซึ่งการปรับให้เป็นมาตรฐานจะขึ้นอยู่กับตัวแก้โจทย์ เช่น GAP สัมบูรณ์หารด้วยค่าวัตถุประสงค์ของวิธีการแก้ปัญหาที่ดีที่สุดที่พบ ตัวแปลงสามารถหยุดเมื่อ GAP สัมพัทธ์มีค่าสัมพัทธ์มากที่สุด (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL ต้อง >= 0 หากตั้งค่าไว้ ดู absoluteGapTolerance |
solutionPoolSize |
เก็บรักษาโซลูชันไว้สูงสุด |
LPAlgorithmProto
เลือกอัลกอริทึมสำหรับการแก้โจทย์ของโปรแกรมเชิงเส้น
Enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
เมธอดทางเดียว (เดิม) โดยทั่วไปสามารถให้ผลเฉลยขั้นต้นและคู่ รังสีปริมาล/คู่ สำหรับโจทย์ปัญหาแรกเริ่ม/คู่ไม่มีขอบเขต และเกณฑ์พื้นฐาน |
LP_ALGORITHM_DUAL_SIMPLEX |
เมธอด Dual Simplex โดยทั่วไปสามารถให้ผลเฉลยขั้นต้นและคู่ รังสีปริมาล/คู่ สำหรับโจทย์ปัญหาแรกเริ่ม/คู่ไม่มีขอบเขต และเกณฑ์พื้นฐาน |
LP_ALGORITHM_BARRIER |
วิธีกีดขวาง หรือที่เรียกกันโดยทั่วไปว่าวิธีจุดภายใน (IPM) โดยทั่วไปจะให้โซลูชันทั้งแบบพื้นฐานและแบบคู่ การนำไปใช้งานบางอย่างอาจส่งผลให้เกิดปัญหาที่ไม่มีขอบเขต/ทำไม่ได้ จะไม่มีการระบุพื้นฐานเว้นแต่โปรแกรมแก้โจทย์พื้นฐานจะทำ "ครอสโอเวอร์" และจบด้วย Simplex |
LP_ALGORITHM_FIRST_ORDER |
อัลกอริทึมที่อิงตามวิธีการเรียงลำดับครั้งแรก โซลูชันเหล่านี้มักสร้างทั้งโซลูชันพื้นฐานและโซลูชันแบบคู่ และยังอาจเป็นใบรับรองของความเป็นไปได้ขั้นพื้นฐานและ/หรือคู่ โดยทั่วไปวิธีการเรียงลำดับก่อนจะช่วยให้โซลูชันมีความถูกต้องแม่นยำต่ำ ดังนั้นผู้ใช้จึงควรระมัดระวังในการตั้งพารามิเตอร์คุณภาพของโซลูชัน (เช่น ความคลาดเคลื่อน) และตรวจสอบความถูกต้องของโซลูชัน |
EmphasisProto
ระดับความพยายามที่ใช้กับงานที่ไม่บังคับขณะแก้โจทย์ (ดู SolveParametersProto สำหรับการใช้งาน)
การเน้นใช้เพื่อกำหนดค่าฟีเจอร์โปรแกรมแก้โจทย์ดังนี้ * หากโปรแกรมแก้โจทย์ไม่รองรับฟีเจอร์นี้ จะมีเพียง "UNSPECIFIED" เท่านั้นที่จะใช้งานได้เสมอ ส่วนการตั้งค่าอื่นๆ มักจะเป็นข้อผิดพลาดของอาร์กิวเมนต์ที่ไม่ถูกต้อง (เครื่องมือแก้โจทย์บางรายการอาจยอมรับเป็น "ปิด") * หากโปรแกรมแก้โจทย์รองรับฟีเจอร์: - เมื่อตั้งค่าเป็น "UNSPECIFIED" ระบบจะใช้ค่าเริ่มต้นที่อยู่เบื้องหลัง - เมื่อปิดฟีเจอร์นี้ไม่ได้ ส่วน "ปิด" จะแสดงข้อผิดพลาด - หากเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น ค่าเริ่มต้นของโปรแกรมแก้โจทย์จะแมปกับ MEDIUM - หากระบบรองรับฟีเจอร์นี้ "ต่ำ" "ปานกลาง" "สูง" และ "สูงมากๆ" จะไม่แสดงข้อผิดพลาด และจะแมปกับรายการที่ตรงที่สุด
Enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
ModelSolveParametersProto
การแสดง JSON |
---|
{ "variableValuesFilter": { object ( |
ช่อง | |
---|---|
variableValuesFilter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกระจัดกระจายที่แสดงผลทั้งหมดซึ่งคีย์โดยตัวแปรใน PrimalSolutionProto และ PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) ข้อกำหนด: * filterIds คือองค์ประกอบของ VariableProto.ids |
dualValuesFilter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกระจัดกระจายที่แสดงผลทั้งหมดซึ่งคีย์ด้วยข้อจำกัดเชิงเส้นใน DualSolutionProto และ DualRay (DualSolutionProto.dual_values, DualRay.dual_values) ข้อกำหนด: * filterIds เป็นองค์ประกอบของ LinearConstraints.ids |
reducedCostsFilter |
ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกระจัดกระจายทั้งหมดที่แสดงผลซึ่งผูกกับตัวแปรใน DualSolutionProto และ DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) ข้อกำหนด: * filterIds คือองค์ประกอบของ VariableProto.ids |
initialBasis |
พื้นฐานเริ่มต้นที่ไม่บังคับสําหรับเครื่องมือแก้โจทย์ LP ของ Simplex แบบ Warm Start หากตั้งค่าไว้ ก็ควรจะถูกต้องตาม |
solutionHints[] |
คำแนะนำโซลูชันที่ไม่บังคับ หากเครื่องมือแก้โจทย์พื้นฐานยอมรับคำแนะนำรายการเดียว ระบบจะใช้คำแนะนำแรก |
branchingPriorities |
ลำดับความสำคัญของการโยงหัวข้อ (ไม่บังคับ) ตัวแปรที่มีค่าสูงกว่าจะถูกแยกย่อยก่อน ตัวแปรที่ไม่ได้กำหนดลำดับความสำคัญจะได้รับลำดับความสำคัญเริ่มต้นของเครื่องมือแก้โจทย์ (โดยปกติจะเป็น 0) ข้อกำหนด: * BranchingPriorities.values ต้องมีขอบเขต * BranchingPriorities.ids ต้องเป็นองค์ประกอบของ VariableProto.ids |
SparseVectorFilterProto
ข้อความนี้อนุญาตให้ค้นหา/ตั้งค่าส่วนที่เฉพาะเจาะจงของ SparseXxxxVector การทำงานเริ่มต้นคือการกรองข้อมูลใดๆ ออก การใช้งานทั่วไปคือการค้นหาเฉพาะบางส่วนของโซลูชัน (เฉพาะค่าที่ไม่ใช่ 0 และ/หรือเฉพาะชุดค่าตัวแปรที่เลือกเอง)
การแสดง JSON |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
ช่อง | |
---|---|
skipZeroValues |
สำหรับ SparseBoolVectorProto "ศูนย์" มีค่า |
filterByIds |
เมื่อเป็น "จริง" แสดงผลเฉพาะค่าที่สอดคล้องกับรหัสที่แสดงใน filterIds |
filteredIds[] |
รายการรหัสที่จะใช้เมื่อ filterByIds เป็นจริง ต้องว่างเปล่าเมื่อ filterByIds มีค่าเป็น false หมายเหตุ: หากค่านี้ว่างเปล่าและ filterByIds เป็นจริง แสดงว่าคุณระบุว่าไม่ต้องการข้อมูลใดๆ ในผลการค้นหา |
BasisProto
การจำแนกลักษณะแบบผสมผสานสำหรับโซลูชันของโปรแกรมเชิงเส้น
วิธีทางด้านเดียวในการแก้ปัญหาโปรแกรมเชิงเส้นจะแสดง "วิธีแก้โจทย์พื้นฐานที่เป็นไปได้" เสมอ ซึ่งสามารถอธิบายด้วยหลักพื้นฐานได้ พื้นฐานจะกำหนด BasisStatusProto สำหรับทุกตัวแปรและข้อจำกัดเชิงเส้น
เช่น พิจารณา LP รูปแบบมาตรฐาน: min c * x s.t A * x = b x >= 0 ที่มีตัวแปรมากกว่าข้อจำกัดและมีอันดับเต็มแถว A
กำหนดให้ n คือจำนวนตัวแปรและ m จำนวนข้อจำกัดเชิงเส้น ค่าพื้นฐานที่ถูกต้องสำหรับโจทย์นี้สามารถสร้างได้ดังนี้ * ข้อจำกัดทั้งหมดจะมีสถานะพื้นฐาน "FIXED" * เลือกตัวแปร m เพื่อให้คอลัมน์ของ A เป็นอิสระเชิงเส้นและกำหนดสถานะ "BASIC" * กำหนดสถานะ AT_LOWER สำหรับตัวแปร n - m ที่เหลือ
วิธีแก้ปัญหาพื้นฐานสำหรับเกณฑ์นี้คือคำตอบที่ไม่ซ้ำของ A * x = b ซึ่งมีตัวแปรทั้งหมดที่มีสถานะ AT_LOWER คงที่กับขอบเขตล่าง (0 ทั้งหมด) ผลลัพธ์ที่จะได้เรียกว่าโซลูชันพื้นฐานที่เป็นไปได้ หากเป็นไปตาม x >= 0 ด้วย
การแสดง JSON |
---|
{ "constraintStatus": { object ( |
ช่อง | |
---|---|
constraintStatus |
สถานะพื้นฐานข้อจำกัด ข้อกำหนด: * restrictStatus.ids เท่ากับ LinearConstraints.ids |
variableStatus |
สถานะพื้นฐานที่เปลี่ยนแปลงได้ ข้อกำหนด: * restrictStatus.ids เท่ากับ VariableProto.ids |
basicDualFeasibility |
ฟีเจอร์นี้เป็นฟีเจอร์ขั้นสูงที่ MathOpt ใช้เพื่อระบุลักษณะความเป็นไปได้ของโซลูชัน LP ที่ต่ำกว่ามาตรฐาน (โซลูชันที่ดีที่สุดจะมีสถานะ SOLUTION_STATUS_FEASIBLE เสมอ) สำหรับ LP แบบด้านเดียว ค่าดังกล่าวควรเท่ากับสถานะความเป็นไปได้ของโซลูชันแบบคู่ที่เกี่ยวข้อง สำหรับ LP แบบ 2 ด้าน อาจแตกต่างกันได้ในบางกรณี (เช่น การแก้ไม่สำเร็จด้วย Prial Simplex) หากคุณระบุพื้นฐานเริ่มต้นผ่าน ModelSolveParametersProto.initial_basis ระบบจะไม่สนใจค่านี้ รายการนี้เกี่ยวข้องกับพื้นฐานที่ SolutionProto.basis แสดงผลเท่านั้น |
SparseBasisStatusVector
การแสดงเวกเตอร์ของสถานะพื้นฐานแบบคร่าวๆ
การแสดง JSON |
---|
{
"ids": [
string
],
"values": [
enum ( |
ช่อง | |
---|---|
ids[] |
ต้องจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยให้องค์ประกอบทั้งหมดแตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส |
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 |
ตัวแปร/ข้อจำกัดเป็นค่าพื้นฐาน |
SolutionStatusProto
ความเป็นไปได้ของโซลูชันพื้นฐานหรือแบบคู่ตามที่ตัวแก้โจทย์อ้างไว้
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
ค่าของ Guard ที่แสดงถึงไม่มีสถานะ |
SOLUTION_STATUS_UNDETERMINED |
เครื่องมือแก้โจทย์ไม่ได้อ้างสถานะความเป็นไปได้ |
SOLUTION_STATUS_FEASIBLE |
เครื่องมือแก้โจทย์กล่าวอ้างว่าโซลูชันนี้ทำได้ |
SOLUTION_STATUS_INFEASIBLE |
เครื่องมือแก้โจทย์กล่าวอ้างว่าโซลูชันนี้ทำไม่ได้ |
SolutionHintProto
โซลูชันเริ่มต้นที่แนะนำสำหรับเครื่องมือแก้โจทย์
โดยทั่วไปโปรแกรมแก้โจทย์ MIP ต้องการเฉพาะข้อมูลขั้นต้น (variableValues
) ขณะที่เครื่องมือแก้โจทย์ LP ต้องการข้อมูลทั้งแบบเริ่มต้นและแบบคู่ (dualValues
)
เครื่องมือแก้โจทย์ MIP จํานวนมากสามารถทํางานร่วมกับ (1) โซลูชันบางส่วนที่ไม่ได้ระบุตัวแปรทั้งหมด หรือ (2) วิธีแก้ปัญหาที่เป็นไปไม่ได้ ในกรณีเหล่านี้ เครื่องมือแก้โจทย์มักจะแก้ MIP ย่อยเพื่อเติม/แก้ไขคำแนะนำให้สมบูรณ์
วิธีที่จะใช้คำแนะนำโดยเครื่องมือแก้โจทย์จะขึ้นอยู่กับเครื่องมือแก้โจทย์ ประเภทโจทย์ และอัลกอริทึมที่ใช้เป็นสำคัญ วิธีที่เชื่อถือได้มากที่สุดในการตรวจสอบว่าคำแนะนำของคุณมีผลคือการอ่านบันทึกของตัวแก้โจทย์พื้นฐานที่มีและไม่มีคำแนะนำ
โดยทั่วไปแล้ว เครื่องมือแก้ปัญหา LP ที่ใช้พื้นฐาน มักจะแนะนำให้ใช้พื้นฐานเบื้องต้นกับคำแนะนำเกี่ยวกับโซลูชัน (พวกเขาต้องครอสโอเวอร์เพื่อเปลี่ยนคำแนะนำเป็นโซลูชันพื้นฐานที่เป็นไปได้)
การแสดง JSON |
---|
{ "variableValues": { object ( |
ช่อง | |
---|---|
variableValues |
การกำหนดค่าเพียงบางส่วนให้กับตัวแปรหลักของปัญหา ข้อกำหนดที่ไม่เกี่ยวข้องกับเครื่องมือแก้โจทย์สำหรับข้อความย่อยนี้คือ *ตัวแปรValues.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปรValues.values ต้องเป็นแบบจํากัดทั้งหมด |
dualValues |
การกำหนดค่า (อาจเป็นบางส่วน) ให้กับข้อจำกัดเชิงเส้นของโจทย์ ข้อกำหนด: * dualValues.ids เป็นองค์ประกอบของ LinearConstraintsProto.ids * dualValues.values ต้องเป็นค่าจำกัดทั้งหมด |
SparseInt32VectorProto
การแสดงเวกเตอร์ของ int แบบคร่าวๆ
การแสดง JSON |
---|
{ "ids": [ string ], "values": [ integer ] } |
ช่อง | |
---|---|
ids[] |
ควรจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยให้องค์ประกอบทั้งหมดแตกต่างกัน |
values[] |
ต้องมีความยาวเท่ากับรหัส |
SolveResultProto
สัญญาเมื่อโซลูชันพื้นฐาน/แบบคู่/รังสีมีความซับซ้อน โปรดดูคำอธิบายโดยละเอียดจากการยกเลิกเหตุผล
การตรวจสอบว่ายังมีโซลูชัน/รังสีวิทยาหรือไม่นั้น จะปลอดภัยที่สุดจนกว่าจะมีข้อสรุปที่แน่ชัด แทนการยึดถือเหตุผลว่าด้วยการบอกเลิกสัญญา
การแสดง JSON |
---|
{ "termination": { object ( |
ช่อง | |
---|---|
termination |
เหตุผลที่โปรแกรมแก้โจทย์หยุดทำงาน |
solutions[] |
สัญญาทั่วไปสำหรับลำดับของโซลูชันที่นักแก้ปัญหาในอนาคตควรดำเนินการให้มีลำดับดังนี้ 1. คำตอบที่มีวิธีแก้ปัญหาเบื้องต้นที่เป็นไปได้ โดยเรียงลำดับตามวัตถุประสงค์หลักที่ดีที่สุดก่อน 2. ผลเฉลยที่มีวิธีแก้โจทย์แบบคู่ที่สามารถทำได้ 1 ลำดับจากวัตถุประสงค์คู่ที่เหมาะสมที่สุด (วัตถุประสงค์คู่ที่ไม่ทราบประสิทธิภาพแย่ที่สุด) 3. ส่วนโซลูชันที่เหลือทั้งหมดจะส่งคืนในลำดับใดก็ได้ |
primalRays[] |
คำแนะนำของการปรับปรุงขั้นพื้นฐานที่ไม่มีขีดจำกัดหรือใบรับรองความเป็นไปได้แบบคู่ โดยปกติจะมีให้สำหรับ PricingReasonProtos UNBOUNDED และ DUAL_INFEASIBLE |
dualRays[] |
คำแนะนำเกี่ยวกับการปรับปรุงแบบคู่ที่ไม่มีขอบเขตหรือเทียบเท่ากันของใบรับรองความเป็นไปได้ขั้นพื้นฐาน โดยปกติจะมีการระบุสำหรับ ApprovalReasonProto INFEASIBLE |
solveStats |
สถิติเกี่ยวกับขั้นตอนการแก้โจทย์ เช่น จากการทำงานซ้ำ และการทำซ้ำ |
TerminationProto
ข้อมูลทั้งหมดเกี่ยวกับสาเหตุที่การเรียกใช้ Solve() สิ้นสุดลง
การแสดง JSON |
---|
{ "reason": enum ( |
ช่อง | |
---|---|
reason |
ข้อมูลเพิ่มเติมใน |
limit |
LIMIT_UNSPECIFIED ยกเว้นกรณีที่เหตุผลคือ TERMINATION_REASON_FEASIBLE หรือ TERMINATION_REASON_NO_SOLUTION_FOUND โปรแกรมแก้โจทย์บางอย่างอาจกำหนดขีดจำกัดที่ทำให้เกิดการสิ้นสุดไม่ได้เสมอไป โดยระบบจะใช้ LIMIT_UNDETERMINED เมื่อไม่สามารถระบุสาเหตุได้ |
detail |
ข้อมูลเฉพาะวิธีแก้ปัญหาโดยทั่วไปเกี่ยวกับการสิ้นสุด |
problemStatus |
สถานะความเป็นไปได้สำหรับปัญหาแรกเริ่มและปัญหาคู่ ตั้งแต่วันที่ 18 กรกฎาคม 2023 เป็นต้นไป ข้อความนี้อาจหายไป หากไม่พบ คุณสามารถพบ issueStatus ได้ใน SolveResultProto.solve_stats |
objectiveBounds |
ขอบเขตของค่าวัตถุประสงค์ที่เหมาะสมที่สุด ตั้งแต่วันที่ 18 กรกฎาคม 2023 เป็นต้นไป ข้อความนี้อาจหายไป หากขาดหายไป สามารถดู reasonBounds.primal_bound ได้ใน SolveResultProto.solve.stats.best_primal_bound และจุดประสงค์Bounds.dual_bound สามารถดูได้ใน SolveResultProto.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 |
ปัญหาพื้นฐานนั้นเกิดขึ้นไม่ได้หรือไม่มีขอบเขต ดูรายละเอียดเพิ่มเติมเกี่ยวกับสถานะของปัญหาได้ใน SolveStats.problem_status โปรดทราบว่าสถานะไม่มีขอบเขตของ Gurobi อาจแสดงไว้ที่นี่ |
TERMINATION_REASON_IMPRECISE |
ปัญหาได้รับการแก้ไขด้วยเกณฑ์ข้อใดข้อหนึ่งข้างต้น (ประสิทธิภาพสูงสุด เป็นไปได้ ไม่ถูกจำกัด หรือไม่ได้จำกัด) แต่ความคลาดเคลื่อนอย่างน้อย 1 รายการไม่เป็นไปตามข้อกำหนด โซลูชัน/รังสีขั้นต้น/คู่บางเงื่อนไขแต่จะเป็นไปไม่ได้เล็กน้อย หรือ (หากปัญหานั้นแทบจะเหมาะสมที่สุด) โซลูชัน/รังสีอาจเป็นช่องว่างระหว่างวัตถุประสงค์แนวทางแก้ปัญหาที่ดีที่สุดกับขอบเขตวัตถุประสงค์ที่ดีที่สุด ผู้ใช้ยังคงค้นหาโซลูชันดั้งเดิม/คู่/รังสีและสถิติโซลูชันได้ แต่ต้องจัดการกับความไม่ชัดเจนของตัวเลข |
TERMINATION_REASON_FEASIBLE |
เครื่องมือเพิ่มประสิทธิภาพถึงขีดจำกัดบางอย่างและจะแสดงวิธีแก้ปัญหาเบื้องต้นที่เป็นไปได้ สำหรับคำอธิบายโดยละเอียดของประเภทขีดจำกัดที่มีขีดจำกัด โปรดดูที่ Solveผลลัพธ์Proto.limit_detail |
TERMINATION_REASON_NO_SOLUTION_FOUND |
เครื่องมือเพิ่มประสิทธิภาพถึงขีดจำกัดบางอย่างแล้วและไม่พบวิธีแก้ปัญหาเบื้องต้นที่เป็นไปได้ สำหรับคำอธิบายโดยละเอียดของประเภทขีดจำกัดที่มีขีดจำกัด โปรดดูที่ Solveผลลัพธ์Proto.limit_detail |
TERMINATION_REASON_NUMERICAL_ERROR |
อัลกอริทึมหยุดทำงานเนื่องจากพบข้อผิดพลาดด้านตัวเลขที่กู้คืนไม่ได้ ไม่มีข้อมูลโซลูชัน |
TERMINATION_REASON_OTHER_ERROR |
อัลกอริทึมหยุดทำงานเนื่องจากเกิดข้อผิดพลาดที่ไม่ครอบคลุมในสถานะใดสถานะหนึ่งข้างต้น ไม่มีข้อมูลโซลูชัน |
LimitProto
เมื่อ Solve() หยุดก่อนกำหนดด้วย PricingReasonProto FEASIBLE หรือ NO_SOLUTION_FOUND ระบบจะถึงขีดจำกัดเฉพาะ
Enum | |
---|---|
LIMIT_UNSPECIFIED |
ใช้เป็นค่าว่างเมื่อเรายุติการใช้งานจากขีดจำกัด (เช่น TERMINATION_REASON_OPTIMAL) |
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 เมื่อทราบเหตุผล แต่ไม่ตรงกับทางเลือกใดๆ ข้างต้น EndProto.detail อาจมีข้อมูลเพิ่มเติมเกี่ยวกับขีดจํากัด |
ProblemStatusProto
สถานะความเป็นไปได้ของปัญหาขั้นต้นและคู่ปัญหา (หรือการผ่อนปรนชั่วคราวอย่างต่อเนื่อง) ตามที่อ้างโดยวิธีแก้ปัญหา เครื่องมือแก้โจทย์ไม่จำเป็นต้องส่งคืนใบรับรองสำหรับการอ้างสิทธิ์ (เช่น เครื่องมือแก้โจทย์อาจอ้างสิทธิ์ความเป็นไปได้เบื้องต้นโดยไม่ต้องส่งคืนโซลูชันเบื้องต้นที่เป็นไปได้) สถานะแบบรวมนี้จะให้คำอธิบายที่ครอบคลุมของคำกล่าวอ้างของผู้แก้โจทย์เกี่ยวกับความเป็นไปได้และไร้ขอบเขตของปัญหาที่แก้ไขได้ ตัวอย่างเช่น
- สถานะที่เป็นไปได้สําหรับโจทย์ตั้งต้นและโจทย์คู่จะบ่งชี้ว่าขั้นต้นเป็นไปได้และมีขอบเขต และน่าจะมีวิธีแก้ไขที่เหมาะสมที่สุด (รับประกันสําหรับปัญหาที่ไม่มีข้อจํากัดที่ไม่ใช่เชิงเส้น)
- สถานะเริ่มต้นที่เป็นไปได้และสถานะที่ทําไม่ได้แบบคู่จะบ่งชี้ว่าปัญหาเบื้องต้นนั้นไม่มีขอบเขต (เช่น มีวิธีแก้ปัญหาที่ดีโดยไม่มีกฎเกณฑ์ตายตัว)
โปรดทราบว่าสถานะ "ทำได้ไม่ได้" ในตัวเอง (เช่น มาพร้อมกับสถานะเริ่มต้นที่ยังไม่กำหนดชัดเจน) ไม่ได้หมายความว่าปัญหาเบื้องต้นนั้นไม่มีขอบเขต เนื่องจากเราอาจมีปัญหาทั้ง 2 อย่างที่เป็นไปไม่ได้ นอกจากนี้ แม้ว่าสถานะแรกเริ่มและสถานะที่เป็นไปได้แบบคู่อาจบอกเป็นนัยถึงการมีอยู่ของโซลูชันที่ดีที่สุด แต่ก็ไม่ได้รับประกันว่าเครื่องมือแก้โจทย์จะต้องพบโซลูชันที่ดีที่สุดเช่นนั้น
การแสดง JSON |
---|
{ "primalStatus": enum ( |
ช่อง | |
---|---|
primalStatus |
สถานะของปัญหาขั้นต้น |
dualStatus |
สถานะสำหรับปัญหาคู่ (หรือสำหรับการผ่อนปรนคู่อย่างต่อเนื่อง) |
primalOrDualInfeasible |
หากเป็น "จริง" เครื่องมือแก้โจทย์อ้างว่าปัญหาแรกเริ่มหรือปัญหาคู่นั้นทำไม่ได้ แต่จะไม่ทราบว่าปัญหาใด (หรือทั้ง 2 อย่างทำไม่ได้) เป็นจริงได้เฉพาะเมื่อ Prime_problem_status = dual_problem_status = kUnAssigned บ่อยครั้งที่จำเป็นต้องใช้ข้อมูลเพิ่มเติมนี้เมื่อการประมวลผลล่วงหน้าพิจารณาว่าไม่มีวิธีแก้ปัญหาที่เหมาะสมที่สุด (แต่ระบุไม่ได้ว่าเกิดจากสิ่งที่ทำไม่ได้ การไม่มีการควบคุม หรือทั้ง 2 อย่าง) |
FeasibilityStatusProto
สถานะความเป็นไปได้ของปัญหาตามที่เครื่องมือแก้โจทย์อ้างสิทธิ์ไว้ (ไม่จำเป็นต้องส่งคืนใบรับรองสำหรับการอ้างสิทธิ์)
Enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
ค่าของ Guard ที่แสดงถึงไม่มีสถานะ |
FEASIBILITY_STATUS_UNDETERMINED |
เครื่องมือแก้โจทย์ไม่อ้างสิทธิ์สถานะ |
FEASIBILITY_STATUS_FEASIBLE |
นักแก้ปัญหาอ้างว่าปัญหาเป็นไปได้ |
FEASIBILITY_STATUS_INFEASIBLE |
เครื่องมือแก้โจทย์กล่าวอ้างว่าปัญหานี้เป็นสิ่งที่ทำไม่ได้ |
ObjectiveBoundsProto
ขอบเขตของค่าวัตถุประสงค์ที่เหมาะสมที่สุด
การแสดง JSON |
---|
{ "primalBound": number, "dualBound": number } |
ช่อง | |
---|---|
primalBound |
เครื่องมือแก้โจทย์อ้างว่าค่าที่ดีที่สุดนั้นเท่ากับหรือดีกว่า (น้อยลงสำหรับการลดขอบเขต และใหญ่กว่าเพื่อการขยายสูงสุด) กว่าค่าความทนต่อความเป็นไปได้เริ่มต้นของตัวแก้โจทย์ (ดูคำเตือนด้านล่าง): * ขอบเขตพื้นฐานเป็นค่าที่ไม่สำคัญ (+inf สำหรับการลดเล็กสุด และ -inf สูงสุด) เมื่อตัวแก้โจทย์ไม่อ้างว่ามีขอบเขตดังกล่าว * PrimeBound อาจเข้าใกล้ค่าที่เหมาะสมที่สุดมากกว่าวัตถุประสงค์ของวิธีพื้นฐานที่ดีที่สุดที่เป็นไปได้ โดย PrealBound อาจไม่สำคัญ แม้ว่าจะไม่มีการส่งคืนโซลูชันเบื้องต้นที่เป็นไปได้ก็ตาม คำเตือน: คำกล่าวอ้างที่ชัดเจนคือมีคำตอบเบื้องต้นที่ * เป็นตัวเลขที่เป็นไปได้ (เช่น สามารถทำได้ตามความอดทนของเครื่องมือแก้โจทย์) และ * มีค่า PrimeBound ของค่าที่เป็นกลาง การหาวิธีแก้ปัญหาเชิงตัวเลขนี้อาจเป็นสิ่งที่ทำไม่ได้เล็กน้อย ซึ่งในกรณีนี้ PrimeBound อาจดีกว่าค่าที่ดีที่สุดอย่างเคร่งครัด การแปลค่าความคลาดเคลื่อนความเป็นไปได้ของสภาพพื้นฐานต่อความคลาดเคลื่อนที่ยอมรับได้ใน PrimeBound เป็นแบบไม่สำคัญ โดยเฉพาะอย่างยิ่งเมื่อความคลาดเคลื่อนยินยอมค่อนข้างสูง (เช่น เมื่อแก้ปัญหาด้วย PDLP) |
dualBound |
เครื่องมือแก้โจทย์อ้างว่าค่าที่ดีที่สุดนั้นเท่ากับหรือแย่ลง (มากสำหรับการย่อและยิ่งน้อยกว่าสำหรับการเพิ่มสูงสุด) มากกว่าค่า dualBound ตามค่ายอมรับความเป็นไปได้คู่ของเครื่องมือแก้โจทย์ (ดูคำเตือนด้านล่าง): * ค่า dualBound น้อย (-inf สำหรับการลดเล็กสุด และ +inf maximization) เมื่อเครื่องมือแก้โจทย์ไม่ได้อ้างว่ามีขอบเขตดังกล่าว ในทำนองเดียวกันกับ PrimeBound กรณีนี้อาจเกิดขึ้นในเครื่องมือแก้โจทย์บางอย่างแม้ว่าจะมีประสิทธิภาพสูงสุดก็ตาม โดยทั่วไปแล้ว โปรแกรมแก้โจทย์ MIP จะรายงานขอบเขตแม้ว่าจะมีความไม่ถูกต้องก็ตาม * สำหรับโจทย์ที่ต่อเนื่องแบบ dualBound อาจใกล้กับค่าที่เหมาะที่สุดมากกว่าวัตถุประสงค์ของการใช้ dualBound แก้ปัญหาได้ดีที่สุด สำหรับ MIP ค่าใดค่าหนึ่งที่ไม่ใช่ข้อเท็จจริงสำหรับ dualBound มักจะเป็นค่าที่เหมาะสมของการผ่อนปรน LP ของ MIP * dualBound จะดีกว่า (เล็กลงสําหรับการย่อเล็กสุด และมีขนาดใหญ่กว่าสําหรับการเพิ่มประสิทธิภาพ) มากกว่า CPC สูงสุดจนถึงความคลาดเคลื่อนของตัวแก้โจทย์ (ดูคําเตือนด้านล่าง) คำเตือน: * สำหรับปัญหาที่ต่อเนื่อง การกล่าวอ้างที่แน่นอนคือมีคำตอบแบบคู่ที่ * เป็นตัวเลขที่เป็นไปได้ (เช่น สามารถทำได้ตามค่าความคลาดเคลื่อนของเครื่องมือแก้โจทย์) และ * มีค่าที่เป็นกลางแบบ DualBound วิธีแก้ปัญหาเชิงตัวเลขนี้อาจเป็นสิ่งที่ทำไม่ได้เล็กน้อย ซึ่งในกรณีนี้ dualBound อาจแย่กว่าค่าที่ดีที่สุดและ PrimeBound มาก เช่นเดียวกับกรณีเบื้องต้น การเปลี่ยนการยอมรับความเป็นไปได้ของทั้ง 2 ความเป็นไปได้จะเป็นความคลาดเคลื่อนของการยอมรับใน dualBound อย่างไม่สำคัญ โดยเฉพาะอย่างยิ่งเมื่อความอดทนความเป็นไปได้ของความเป็นไปได้ค่อนข้างมาก อย่างไรก็ตาม เครื่องมือแก้โจทย์บางอย่างจะมี DualBound เวอร์ชันที่แก้ไขแล้ว ซึ่งมีความปลอดภัยยิ่งขึ้นในเชิงตัวเลข คุณเข้าถึงเวอร์ชันที่แก้ไขแล้วนี้ได้ผ่านเอาต์พุตเฉพาะของโปรแกรมแก้โจทย์ (เช่น สำหรับ PDLP, pdlp_output.convergence_information.corrected_dual_objective) * สําหรับเครื่องมือแก้โจทย์ MIP นั้น DualBound อาจเชื่อมโยงกับโซลูชันแบบคู่เพื่อการผ่อนปรนต่อเนื่องบางอย่าง (เช่น การผ่อนคลาย LP) แต่มักเป็นผลที่ซับซ้อนจากการดำเนินการแก้โจทย์และมักจะไม่ถูกต้องมากกว่าขอบเขตที่รายงานโดยเครื่องมือแก้โจทย์ LP |
SolutionProto
สิ่งที่รวมอยู่ในวิธีแก้โจทย์จะขึ้นอยู่กับชนิดของโจทย์และของผู้แก้โจทย์ รูปแบบทั่วไปในปัจจุบันคือ 1. ตัวแก้โจทย์ MIP จะแสดงโซลูชันพื้นฐานเท่านั้น 2. ตัวแปลงค่า LP ของ Simplex มักแสดงผลพื้นฐานและโซลูชันพื้นฐานและโซลูชันคู่ที่เกี่ยวข้องกับพื้นฐานนี้ 3. เครื่องมือแก้โจทย์คณิตแบบต่อเนื่องอื่นๆ มักแสดงผลโซลูชันพื้นฐานและโซลูชันแบบคู่ซึ่งเชื่อมต่อกันในรูปแบบที่พึ่งพาเครื่องมือแก้โจทย์
ข้อกำหนด: * ต้องตั้งค่าอย่างน้อย 1 ช่อง โซลูชันต้องไม่เว้นว่าง
การแสดง JSON |
---|
{ "primalSolution": { object ( |
ช่อง | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
PrimalSolutionProto
วิธีแก้ปัญหาด้านการเพิ่มประสิทธิภาพ
เช่น ให้ลองพิจารณาโปรแกรมเชิงเส้นแบบง่าย: min c * x s.t A * x >= b x >= 0 วิธีแก้ปัญหาเบื้องต้นคือการระบุค่าเป็น x เป็นไปได้หากเป็นไปตาม A * x >= b และ x >= 0 จากด้านบน ในข้อความ PrimalSolutionProto ด้านล่างตัวแปรคือ x และจุดประสงค์Value คือ c * x
การแสดง JSON |
---|
{ "variableValues": { object ( |
ช่อง | |
---|---|
variableValues |
ข้อกำหนด: * VariableValues.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปรValues.values ต้องเป็นแบบจํากัดทั้งหมด |
objectiveValue |
มูลค่าทางวัตถุที่คํานวณโดยเครื่องมือแก้โจทย์พื้นฐาน ไม่สามารถเป็นอนันต์หรือ NaN ได้ |
auxiliaryObjectiveValues |
ค่าวัตถุประสงค์เสริมที่คํานวณโดยเครื่องมือแก้โจทย์ที่สําคัญ คีย์ต้องเป็นรหัสวัตถุประสงค์เสริมที่ถูกต้อง ค่าจะเป็นอนันต์หรือ NaN ไม่ได้ ออบเจ็กต์ที่มีรายการคู่ |
feasibilityStatus |
สถานะความเป็นไปได้ของโซลูชันตามวิธีแก้ปัญหาที่สำคัญ |
DualSolutionProto
วิธีแก้ปัญหาการเพิ่มประสิทธิภาพทั้ง 2 กรณี
เช่น ให้พิจารณาคู่โปรแกรมเชิงเส้นแบบคู่แรกเริ่ม: (Primal) (คู่) min c * x max b * y s.t A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0 วิธีคู่คือคู่ (y, r) หากเป็นไปตามข้อจำกัดจาก (คู่) ด้านบน
ในข้อความด้านล่าง y คือค่าคู่ r คือต้นทุนที่ลดลง และ b * y คือมูลค่าที่เป็นกลาง
การแสดง JSON |
---|
{ "dualValues": { object ( |
ช่อง | |
---|---|
dualValues |
ข้อกำหนด: * dualValues.ids เป็นองค์ประกอบของ LinearConstraints.ids * dualValues.values ต้องเป็นค่าจำกัดทั้งหมด |
reducedCosts |
ข้อกำหนด: * ReduceCosts.ids เป็นองค์ประกอบของ VariableProto.ids * Costs.values ทั้งหมดต้องมีข้อจำกัดทั้งหมด |
feasibilityStatus |
สถานะความเป็นไปได้ของโซลูชันตามวิธีแก้ปัญหาที่สำคัญ |
objectiveValue |
|
PrimalRayProto
ทิศทางของการปรับปรุงที่ไม่มีขอบเขตตายตัวสำหรับปัญหาการเพิ่มประสิทธิภาพ เทียบเท่า ใบรับรองความเป็นไปได้สำหรับปัญหาการเพิ่มประสิทธิภาพทั้ง 2 ปัญหา
เช่น ให้ลองพิจารณาโปรแกรมเชิงเส้นแบบง่าย: min c * x s.t A * x >= b x >= 0 รังสีขั้นต้นคือ x ที่ตรงตามเกณฑ์: c * x < 0 A * x >= 0 x >= 0 สังเกตการณ์ว่าหากให้วิธีแก้โจทย์ที่เป็นไปได้ ค่าผลบวกของรังสีแรกบวกบวกกับคำตอบนั้นยังคงเป็นไปได้ และให้ค่าวัตถุประสงค์ที่ดีกว่า แสงแรกยังพิสูจน์ให้เห็นถึงปัญหาการเพิ่มประสิทธิภาพแบบคู่ที่สามารถทำได้ด้วย
ในข้อความ PrimalRay ด้านล่างตัวแปรคือ x
การแสดง JSON |
---|
{
"variableValues": {
object ( |
ช่อง | |
---|---|
variableValues |
ข้อกำหนด: * VariableValues.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปรValues.values ต้องเป็นแบบจํากัดทั้งหมด |
DualRayProto
ทิศทางของการปรับปรุงที่ไม่มีขอบเขตเป็นคู่ของการเพิ่มประสิทธิภาพ คือปัญหา เท่ากับใบรับรองของความเป็นไปไม่ได้ขั้นพื้นฐาน
เช่น ให้พิจารณาคู่โปรแกรมเชิงเส้นแบบคู่แรกเริ่ม: (Primal) (คู่) min c * x max 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) ลงในผลคูณแบบคู่จะคงความเป็นไปได้แบบคู่ และปรับปรุงวัตถุประสงค์ (พิสูจน์ว่าการใช้ 2 บวกไม่มีขอบเขต) รังสีคู่ยังเป็นการพิสูจน์ให้เห็นว่าปัญหาแรกเริ่มนั้นไม่สามารถเป็นไปได้
ใน DualRay ข้อความด้านล่าง y คือ dualValues และ r คือค่าใช้จ่ายที่ลดลง
การแสดง JSON |
---|
{ "dualValues": { object ( |
ช่อง | |
---|---|
dualValues |
ข้อกำหนด: * dualValues.ids เป็นองค์ประกอบของ LinearConstraints.ids * dualValues.values ต้องเป็นค่าจำกัดทั้งหมด |
reducedCosts |
ข้อกำหนด: * ReduceCosts.ids เป็นองค์ประกอบของ VariableProto.ids * Costs.values ทั้งหมดต้องมีข้อจำกัดทั้งหมด |
SolveStatsProto
การแสดง JSON |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
ช่อง | |
---|---|
solveTime |
เวลาจริงของนาฬิกาที่ผ่านไปตามที่วัดด้วย math_opt ซึ่งก็คือเวลาโดยประมาณภายใน Solver::Solve() หมายเหตุ: ไม่รวมงานที่ทำจากการสร้างโมเดล ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
problemStatus |
สถานะความเป็นไปได้สำหรับปัญหาแรกเริ่มและปัญหาคู่ |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|