Package google.research.optimization.v1.mathopt

ดัชนี

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

SparseBasisStatusVector

สถานะพื้นฐานของข้อจำกัด

ข้อกำหนด: * restriction_status.ids เท่ากับ LinearConstraints.ids

variable_status

SparseBasisStatusVector

สถานะพื้นฐานที่เปลี่ยนแปลงได้

ข้อกำหนด: * restriction_status.ids เท่ากับ VariantProto.ids

basic_dual_feasibility

SolutionStatusProto

นี่เป็นฟีเจอร์ขั้นสูงที่ 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

SparseDoubleVectorProto

ข้อกำหนด: * dual_values.id เป็นองค์ประกอบของ LinearConstraints.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด

reduced_costs

SparseDoubleVectorProto

ข้อกำหนด: * 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

SparseDoubleVectorProto

ข้อกำหนด: * dual_values.id เป็นองค์ประกอบของ LinearConstraints.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด

reduced_costs

SparseDoubleVectorProto

ข้อกำหนด: * Reduce_costs.ids เป็นองค์ประกอบของ VariantProto.ids * discount_costs.values ต้องเป็นค่าจำกัดทั้งหมด

feasibility_status

SolutionStatusProto

สถานะความเป็นไปได้ของโซลูชันตามเครื่องมือแก้โจทย์คณิตที่สำคัญ

objective_value

double

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

bool

หากเป็น "จริง" หากตัวแปรตัวบ่งชี้มีค่า 0 จุดยึดโดยนัยจะต้องเก็บเอาไว้ หรือไม่เช่นนั้น หากตัวแปรตัวบ่งชี้มีค่า 1 ข้อจำกัดโดยนัยจะต้องเก็บเอาไว้

expression

SparseDoubleVectorProto

ต้องเป็นนิพจน์เชิงเส้นที่ถูกต้องซึ่งเกี่ยวข้องกับโมเดลที่มี: * เงื่อนไขที่ระบุไว้ทั้งหมดใน SparseDoubleVectorProto * องค์ประกอบทั้งหมดของ expression.values ต้องมีจำกัด * expression.ids เป็นส่วนหนึ่งของ VariablesProto.ids

lower_bound

double

ต้องมีค่าเป็น [-inf, inf) เป็น NaN ไม่ได้

upper_bound

double

ต้องมีค่าเป็น (-inf, inf] ต้องไม่ใช่ NaN

name

string

ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดูModelProto.indicator_constraintsและIndicatorConstraintUpdatesProto.new_constraints

indicator_id

int64

รหัสที่สอดคล้องกับตัวแปรไบนารี หรือไม่ได้ตั้งค่า หากไม่ได้ตั้งค่า ระบบจะไม่พิจารณาข้อจำกัดตัวบ่งชี้ หากตั้งค่า เราจะกำหนดให้เป็น * 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[]

int64

ต้องไม่เป็นค่าลบและต้องเพิ่มขึ้นอย่างเคร่งครัด ใช้ค่า max(int64) ไม่ได้

lower_bounds[]

double

ควรมีความยาวเท่ากับ #เชิงเส้น ข้อจำกัด ค่าเป็น [-inf, inf)

upper_bounds[]

double

ควรมีความยาวเท่ากับ #เชิงเส้น ข้อจำกัด ค่าในหน่วย (-inf, inf]

names[]

string

หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ไม่เช่นนั้น ควรมีความยาวเท่ากับข้อจํากัดแบบ #เชิงเส้น

ชื่อที่ไม่ว่างเปล่าทั้งหมดต้องไม่ซ้ำกัน

LinearExpressionProto

การนำเสนอแบบน้อยของนิพจน์เชิงเส้น (ผลรวมแบบถ่วงน้ำหนักของตัวแปร บวกค่าคงที่)

ช่อง
ids[]

int64

รหัสของตัวแปร ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน

coefficients[]

double

ต้องมีความยาวเท่ากับรหัส ค่าต้องเป็นค่าจำกัดต้องไม่ใช่ NaN

offset

double

ต้องมีระยะเวลาจำกัดและต้องไม่ใช่ NaN

ModelProto

ปัญหาการเพิ่มประสิทธิภาพ MathOpt - ตัวแปรการตัดสินใจแบบต่อเนื่องและจำนวนเต็มที่มีขอบเขตจำกัดที่ไม่บังคับ - วัตถุประสงค์เชิงเส้นและวัตถุประสงค์กำลังสอง (วัตถุประสงค์ข้อเดียวหรือหลายข้อ) อาจเป็นแบบย่อหรือขยายใหญ่สุด - ประเภทข้อจำกัดจำนวนหนึ่ง ได้แก่ * ข้อจำกัดเชิงเส้น * ข้อจำกัดกำลังสอง * ข้อจำกัดแบบกรวยลำดับที่ 2 * ข้อจำกัดเชิงตรรกะ > ข้อจำกัด SOS1 และ SOS2 > ข้อจำกัดตัวบ่งชี้

โดยค่าเริ่มต้น ข้อจำกัดจะแสดงในแมป "id-to-data" อย่างไรก็ตาม เราแสดงข้อจำกัดเชิงเส้นในรูปแบบ "struct-of-arrays" ที่มีประสิทธิภาพมากกว่า

ช่อง
name

string

variables

VariablesProto

objective

ObjectiveProto

วัตถุประสงค์หลักในรูปแบบ

auxiliary_objectives

map<int64, ObjectiveProto>

วัตถุประสงค์เสริมสำหรับใช้ในโมเดลหลายวัตถุประสงค์

รหัสคีย์แมปต้องเป็น [0, max(int64)) ลำดับความสำคัญแต่ละรายการและชื่อที่ไม่ว่างแต่ละรายการต้องไม่ซ้ำกันและต่างจาก objective หลักด้วย

linear_constraints

LinearConstraintsProto

linear_constraint_matrix

SparseDoubleMatrixProto

ค่าสัมประสิทธิ์ตัวแปรสำหรับข้อจำกัดเชิงเส้น

หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0

ข้อกำหนด: * linear_constraint_matrix.row_ids เป็นองค์ประกอบของ linear_constraints.ids * linear_constraint_matrix.column_id เป็นองค์ประกอบของตัวแปร * รายการเมทริกซ์ที่ไม่ได้ระบุเป็น 0 * linear_constraint_matrix.values ต้องเป็นค่าจำกัดทั้งหมด

quadratic_constraints

map<int64, QuadraticConstraintProto>

ข้อจำกัดกำลังสองในโมเดล

second_order_cone_constraints

map<int64, SecondOrderConeConstraintProto>

ข้อจำกัดกรวยอันดับ 2 ในโมเดล

sos1_constraints

map<int64, SosConstraintProto>

ข้อจำกัด SOS1 ในโมเดล ซึ่งกำหนดให้ expression ไม่เกิน 0 รายการ รายการ weights ที่ไม่บังคับคือรายละเอียดการใช้งานที่เครื่องมือแก้โจทย์คณิตใช้ (หวังว่า) จะผสานรวมให้เร็วขึ้น ในรายละเอียดเพิ่มเติม เครื่องมือแก้โจทย์คณิตอาจใช้ (หรืออาจไม่) ใช้น้ำหนักเหล่านี้เพื่อเลือกการตัดสินใจแตกแขนงที่ทำให้เกิดโหนดย่อยที่ "สมดุล"

sos2_constraints

map<int64, SosConstraintProto>

ข้อจำกัด SOS2 ในโมเดล ซึ่งกำหนดให้รายการ expression ไม่เกิน 2 รายการต้องไม่เป็น 0 และต้องอยู่ติดกันในลำดับ หากไม่ได้ระบุ weights จะเป็นการเรียงลำดับแบบเชิงเส้นในรายการ expressions หากมีการแสดง weights ระบบจะใช้ลำดับตามค่าเหล่านี้ตามลำดับที่เพิ่มขึ้น

indicator_constraints

map<int64, IndicatorConstraintProto>

ข้อจำกัดตัวบ่งชี้ในโมเดล ซึ่งบังคับใช้นั้น หากตั้งค่าไบนารีของ "ตัวแปรตัวบ่งชี้" เป็น 1 จะต้องมี "ข้อจำกัดโดยนัย"

ModelSolveParametersProto

ช่อง
variable_values_filter

SparseVectorFilterProto

ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยตัวแปรใน PrimalSolutionProto และ PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values)

ข้อกำหนด: * filter_id คือองค์ประกอบของ VariantProto.ids

dual_values_filter

SparseVectorFilterProto

ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยข้อจำกัดเชิงเส้นใน DualSolutionProto และ DualRay (DualSolutionProto.dual_values, DualRay.dual_values)

ข้อกำหนด: * filter_ids คือองค์ประกอบของ LinearConstraints.ids

reduced_costs_filter

SparseVectorFilterProto

ตัวกรองที่ใช้กับคอนเทนเนอร์แบบกะทัดรัดทั้งหมดที่ส่งคืนซึ่งคีย์โดยตัวแปรใน DualSolutionProto และ DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs)

ข้อกำหนด: * filter_id คือองค์ประกอบของ VariantProto.ids

initial_basis

BasisProto

พื้นฐานเริ่มต้นที่ไม่บังคับสำหรับเครื่องมือแก้โจทย์ LP แบบง่ายของ Warm Start หากตั้งค่าไว้ คาดว่าจะถูกต้องตามValidateBasisในvalidators/solution_validator.hสำหรับModelSummaryปัจจุบัน

solution_hints[]

SolutionHintProto

คำแนะนำโซลูชันที่ไม่บังคับ หากเครื่องมือแก้โจทย์คณิตพื้นฐานยอมรับคําแนะนําเพียงครั้งเดียว ระบบจะใช้คําแนะนําแรก

branching_priorities

SparseInt32VectorProto

ลำดับความสำคัญของการโยงหัวข้อ (ไม่บังคับ) ตัวแปรที่มีค่าสูงกว่าจะได้รับการแยกสาขาแรก ตัวแปรที่ไม่ได้ตั้งค่าลำดับความสำคัญจะได้รับลำดับความสำคัญเริ่มต้นของเครื่องมือแก้โจทย์ (โดยปกติจะเป็น 0)

ข้อกำหนด: * ranching_priorities.values ต้องมีขีดจำกัด * ranching_priorities.ids ต้องเป็นองค์ประกอบของ VariantProto.ids

ObjectiveBoundsProto

ผูกกับค่าวัตถุประสงค์ที่เหมาะสม

ช่อง
primal_bound

double

เครื่องมือแก้โจทย์อ้างว่าค่าที่เหมาะสมมีค่าเท่ากับหรือดีกว่า (น้อยกว่าสำหรับการปรับให้เล็กสุดและมากกว่าสำหรับการกำหนดขีดจำกัดสูงสุด) ถึงค่าที่เป็นไปได้เบื้องต้นสำหรับเครื่องมือแก้โจทย์คณิต (ดูคำเตือนด้านล่าง): * Primeal_bound เป็นค่าที่ไม่สำคัญ (+inf สำหรับการปรับให้น้อยที่สุดและ -inf maximization) เมื่อตัวแก้โจทย์ไม่ได้กล่าวอ้างว่าจะมีขอบเขตดังกล่าว * Primeal_bound อาจมีค่าใกล้เคียงกับค่าที่เหมาะสมมากกว่าวัตถุประสงค์ของวิธีแก้ปัญหาเบื้องต้นที่ดีที่สุด โดยเฉพาะอย่างยิ่ง Primeal_bound จึงอาจไม่ใช่ตัวแปรเล็กๆ แม้จะไม่มีผลลัพธ์ที่เป็นไปได้แบบพื้นฐานก็ตาม คำเตือน: การกล่าวอ้างที่แม่นยําคือมีวิธีแก้ปัญหาเบื้องต้นที่ * เป็นตัวเลขที่เป็นไปได้ (เช่น เป็นไปได้โดยขึ้นอยู่กับความคลาดเคลื่อนของค่าแก้ความแก้โจทย์) และ * มีค่าที่เป็นปศุสัตว์ Primeal_bound วิธีแก้ปัญหาที่เป็นไปได้เชิงตัวเลขนี้อาจเป็นไปไม่ได้เล็กน้อย ในกรณีของ Primeal_bound อาจดีกว่าค่าที่เหมาะสมที่สุดอย่างสิ้นเชิง การแปลความยอมรับความเป็นไปได้เบื้องต้นเป็นความคลาดเคลื่อนเบื้องต้นตาม Primeal_bound นั้นไม่ใช่เรื่องเล็กน้อย โดยเฉพาะเมื่อความคลาดเคลื่อนของความเป็นไปได้อยู่ในระดับที่ค่อนข้างสูง (เช่น เมื่อแก้ปัญหาด้วย PDLP)

dual_bound

double

เครื่องมือแก้โจทย์อ้างว่าค่าที่เหมาะสมมีค่าเท่ากับหรือแย่กว่า (ใหญ่กว่าสำหรับการปรับให้เล็กสุดและเล็กกว่าสำหรับการเพิ่มประสิทธิภาพสูงสุด) มากกว่าค่า 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

bool

เท็จ คือ ย่อเล็กสุด จริง คือขยายใหญ่สุด

offset

double

ต้องมีจำกัด ไม่ใช่ NaN

linear_coefficients

SparseDoubleVectorProto

คำวัตถุประสงค์ของโปรโตที่อยู่ในตัวแปรการตัดสินใจ

ข้อกำหนด: * linear_coefficiencys.id เป็นองค์ประกอบของ VariantProto.ids * ที่ไม่ได้ระบุ VariantProto ตรงกับค่า 0 * ne_coefficiencys.values ค่าทั้งหมดต้องมีค่าจำกัด * linear_coefficiencys.values ค่าอาจเป็น 0 ได้ แต่ก็ทำให้สิ้นเปลืองพื้นที่เท่านั้น

quadratic_coefficients

SparseDoubleMatrixProto

คำศัพท์ที่เป็นกลางในตัวแปรการตัดสินใจ

ข้อกำหนดนอกเหนือจากข้อกำหนดในข้อความ 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

string

ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.objectives และ AuxiliaryObjectivesUpdatesProto.new_objectives.

priority

int64

สำหรับปัญหาแบบหลายวัตถุประสงค์ ลำดับความสำคัญของวัตถุประสงค์นี้เมื่อเทียบกับข้ออื่นๆ (ต่ำกว่าถือว่าสำคัญกว่า) ค่านี้ต้องไม่ติดลบ นอกจากนี้ ลําดับความสําคัญของวัตถุประสงค์แต่ละข้อในโมเดลต้องแตกต่างกันในขณะที่แก้โจทย์ เงื่อนไขนี้ไม่ได้รับการตรวจสอบที่ระดับโปรโตคอล ดังนั้นโมเดลอาจมีวัตถุประสงค์ที่มีลำดับความสำคัญเท่ากันเป็นการชั่วคราว

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

SparseDoubleVectorProto

ข้อกำหนด: * 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

SparseDoubleVectorProto

ข้อกำหนด: * variable_values.id เป็นองค์ประกอบของ VariantProto.ids * ค่าตัวแปร_ค่า.ค่าต้องเป็นค่าจำกัดทั้งหมด

objective_value

double

ค่าวัตถุประสงค์ที่คํานวณโดยเครื่องมือแก้โจทย์คณิตพื้นฐาน ต้องไม่เป็นอนันต์หรือ NaN

auxiliary_objective_values

map<int64, double>

ค่าวัตถุประสงค์เสริมที่คํานวณโดยเครื่องมือแก้โจทย์คณิตพื้นฐาน คีย์ต้องเป็นรหัสวัตถุประสงค์เสริมที่ถูกต้อง ค่าต้องไม่สิ้นสุดหรือ NaN

feasibility_status

SolutionStatusProto

สถานะความเป็นไปได้ของโซลูชันตามเครื่องมือแก้โจทย์คณิตที่สำคัญ

ProblemStatusProto

สถานะความเป็นไปได้ของปัญหาขั้นต้นและคู่ของปัญหานั้น (หรือคู่ของการผ่อนปรนอย่างต่อเนื่อง) ตามที่ผู้แก้โจทย์กล่าวอ้าง ผู้แก้โจทย์ไม่จำเป็นต้องส่งคืนใบรับรองสำหรับการอ้างสิทธ์ (เช่น เครื่องมือแก้โจทย์อาจอ้างความเป็นไปได้เบื้องต้นโดยไม่ต้องส่งคืนวิธีการแก้ปัญหาที่เป็นไปได้เบื้องต้น) สถานะแบบรวมนี้ให้คำอธิบายที่ครอบคลุมเกี่ยวกับคำกล่าวอ้างของผู้แก้โจทย์เกี่ยวกับความเป็นไปได้และความไร้ขอบเขตของโจทย์ที่แก้โจทย์ ตัวอย่างเช่น

  • สถานะที่เป็นไปได้ของโจทย์ปัญหาขั้นต้นและปัญหาคู่บ่งบอกว่าวิธีเบื้องต้นเป็นไปได้และมีขอบเขต และมีแนวโน้มที่จะมีวิธีแก้ปัญหาที่ดีที่สุด (รับประกันสำหรับปัญหาที่ไม่มีข้อจำกัดที่ไม่ใช่เชิงเส้น)
  • ความเป็นไปได้เบื้องต้นและสถานะความเป็นไปไม่ได้คู่กัน แสดงว่าปัญหาหลักนั้นไม่มีขอบเขต (นั่นคือ มีทางออกที่ดีเสมอ)

โปรดทราบว่าสถานะที่ไม่สามารถดำเนินการได้ควบคู่กันนั้น (กล่าวคือ สถานะเริ่มต้นควบคู่ไปด้วย) ไม่ได้บอกเป็นนัยว่าปัญหาหลักไม่มีขอบเขต เนื่องจากเราอาจมีทั้ง 2 ปัญหาที่ไม่สามารถทำได้ นอกจากนี้ แม้ว่าสถานะที่เป็นไปได้พื้นฐานและแบบคู่อาจบอกเป็นนัยถึงการมีอยู่ของโซลูชันที่ดีที่สุด แต่ก็ไม่ได้รับประกันว่าเครื่องมือแก้โจทย์จะได้พบวิธีแก้ปัญหาที่เหมาะสมที่สุดจริงๆ

ช่อง
primal_status

FeasibilityStatusProto

สถานะของปัญหาเบื้องต้น

dual_status

FeasibilityStatusProto

สถานะของโจทย์คู่ (หรือสำหรับการผ่อนปรนอย่างต่อเนื่อง)

primal_or_dual_infeasible

bool

หากเป็นจริง ผู้แก้โจทย์อ้างว่าปัญหาหลักหรือปัญหา 2 อย่างนั้นไม่อาจเป็นไปได้ แต่ไม่รู้ว่าปัญหาใด (หรือทั้ง 2 อย่างเป็นสิ่งที่ทำไม่ได้) เป็นจริงได้เฉพาะเมื่อ Primeal_problem_status = dual_problem_status = kUndetermined จำเป็นต้องใช้ข้อมูลเพิ่มเติมนี้เมื่อการประมวลผลล่วงหน้าตัดสินว่าไม่มีวิธีแก้ปัญหาที่ดีที่สุด (แต่ระบุไม่ได้ว่าเกิดจากความไม่สามารถเป็นไปได้ การไม่มีขอบเขต หรือทั้ง 2 อย่าง)

QuadraticConstraintProto

ข้อจำกัดกำลังสองเดี่ยวของรูป: lb <= sum{linear_terms} + ผลรวม{quadratic_terms} <= ub

หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0

ช่อง
linear_terms

SparseDoubleVectorProto

คำศัพท์ที่อยู่ในตัวแปรการตัดสินใจ

นอกจากข้อกำหนดเกี่ยวกับข้อความ SparseDoubleVectorProto แล้ว เรายังกำหนดให้ * linear_terms.id เป็นองค์ประกอบของ VariantProto.ids * ne_terms.values ต้องเป็นค่าที่มีจำกัดและไม่ใช่ NaN

หมายเหตุ: * รหัสตัวแปรที่ละไว้มีค่าสัมประสิทธิ์ที่สอดคล้องกันเป็น 0 * linear_terms.values อาจเป็น 0 ได้ แต่ก็ทำให้เปลืองพื้นที่

quadratic_terms

SparseDoubleMatrixProto

คำที่เป็นกำลังสองในตัวแปรการตัดสินใจ

นอกจากข้อกำหนดเกี่ยวกับข้อความ 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

double

ต้องมีค่าเป็น [-inf, inf) และน้อยกว่าหรือเท่ากับ upper_bound

upper_bound

double

ต้องมีค่าเป็น (-inf, inf] และมากกว่าหรือเท่ากับ lower_bound

name

string

ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.quadratic_constraints และ QuadraticConstraintUpdatesProto.new_constraints

SecondOrderConeConstraintProto

ข้อจำกัดรูปกรวยลำดับที่ 2 ของรูปแบบ

||arguments_to_norm||_2 <= upper_bound

โดยที่ upper_bound และองค์ประกอบแต่ละรายการของ arguments_to_norm เป็นนิพจน์เชิงเส้น

หากตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ถูกลบ ระบบจะถือว่าตัวแปรนั้นเป็น 0

ช่อง
upper_bound

LinearExpressionProto

arguments_to_norm[]

LinearExpressionProto

name

string

ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดูModelProto.second_order_cone_constraintsและSecondOrderConeConstraintUpdatesProto.new_constraints

SolutionHintProto

โซลูชันเริ่มต้นที่แนะนำสำหรับเครื่องมือแก้โจทย์

โดยทั่วไปแล้ว เครื่องมือแก้โจทย์ MIP ต้องการเฉพาะข้อมูลเบื้องต้น (variable_values) ขณะที่เครื่องมือแก้ LP ต้องการทั้งข้อมูลขั้นต้นและข้อมูลคู่ (dual_values)

เครื่องมือแก้โจทย์คณิตหลายชนิด (1) โซลูชันบางส่วนที่ไม่ได้ระบุตัวแปรทั้งหมด หรือ (2) วิธีแก้ปัญหาที่ทำไม่ได้ ในกรณีเหล่านี้ เครื่องมือแก้โจทย์คณิตมักจะแก้ปริศนา MIP เพื่อเติม/แก้ไขคำใบ้

หลักในการแก้โจทย์จะขึ้นอยู่กับผู้แก้โจทย์ ประเภทของโจทย์ และอัลกอริทึมที่ใช้ วิธีที่เชื่อถือได้มากที่สุดที่จะทำให้คำแนะนำของคุณได้ผลคือการอ่านบันทึกเครื่องมือแก้โจทย์คณิตที่มีอยู่ที่มีและไม่มีคำแนะนำ

โดยทั่วไปแล้ว เครื่องมือแก้โจทย์คณิตที่ใช้ LP จะใช้หลักการพื้นฐานมากกว่าในการบอกใบ้โซลูชัน (พวกเขาจะต้องครอสโอเวอร์เพื่อแปลงคำแนะนำให้เป็นวิธีแก้ปัญหาเบื้องต้นที่เป็นไปได้)

ช่อง
variable_values

SparseDoubleVectorProto

การอาจกำหนดค่าเพียงบางส่วนของตัวแปรเบื้องต้นของโจทย์ ข้อกำหนดที่ไม่เกี่ยวข้องกับเครื่องมือแก้โจทย์คณิตสำหรับข้อความย่อยนี้คือ *variable_values.id เป็นองค์ประกอบของ VariableProto.ids * ค่าตัวแปร_ค่า.ค่าต้องเป็นค่าจำกัดทั้งหมด

dual_values

SparseDoubleVectorProto

การกำหนด (อาจบางส่วน) ค่าไปยังข้อจำกัดเชิงเส้นของโจทย์

ข้อกำหนด: * dual_values.ids เป็นองค์ประกอบของ LinearConstraintsProto.ids * dual_values.values ต้องเป็นค่าจำกัดทั้งหมด

SolutionProto

สิ่งที่รวมอยู่ในคำตอบจะขึ้นอยู่กับประเภทของปัญหาและเครื่องมือแก้โจทย์ รูปแบบที่พบบ่อยในปัจจุบันคือ 1 เครื่องมือแก้โจทย์คณิต MIP จะแสดงผลเฉพาะโซลูชันหลักเท่านั้น 2. เครื่องมือแก้โจทย์ LP มักจะแสดงผลแบบพื้นฐานและวิธีแก้ปัญหาเบื้องต้นและคู่ที่เกี่ยวข้องกับพื้นฐานนี้ 3. เครื่องมือแก้โจทย์อย่างต่อเนื่องอื่นๆ มักจะส่งคืนโซลูชันพื้นฐานและโซลูชันคู่ที่เชื่อมต่อในรูปแบบที่ขึ้นอยู่กับเครื่องมือแก้โจทย์

ข้อกำหนด: * ต้องตั้งค่าอย่างน้อย 1 ฟิลด์ โซลูชันต้องไม่เว้นว่าง

ช่อง
primal_solution

PrimalSolutionProto

dual_solution

DualSolutionProto

basis

BasisProto

SolutionStatusProto

ความเป็นไปได้ของวิธีแก้ปัญหาเบื้องต้นหรือทั้ง 2 โซลูชันตามที่เครื่องมือแก้โจทย์อ้างสิทธิ์

Enum
SOLUTION_STATUS_UNSPECIFIED ค่า Guard ที่แสดงถึงสถานะ
SOLUTION_STATUS_UNDETERMINED เครื่องมือแก้ปัญหาไม่ได้อ้างสถานะความเป็นไปได้
SOLUTION_STATUS_FEASIBLE นักแก้ไขอ้างว่าโซลูชันนี้เป็นไปได้
SOLUTION_STATUS_INFEASIBLE นักแก้ไขอ้างว่าโซลูชันเป็นไปไม่ได้

SolveParametersProto

พารามิเตอร์สำหรับควบคุมโซลูชันเดียว

มีทั้งพารามิเตอร์ที่ใช้บ่อยสำหรับเครื่องมือแก้โจทย์ทั้งหมด เช่น time_limit และพารามิเตอร์สำหรับเครื่องมือแก้โจทย์ที่เฉพาะเจาะจง เช่น gscip หากตั้งค่าทั้งในช่องทั่วไปและของช่องสำหรับแก้โจทย์ที่เจาะจง ระบบจะใช้การตั้งค่าเฉพาะเครื่องมือแก้โจทย์คณ

พารามิเตอร์ทั่วไปที่ไม่บังคับและไม่ได้ตั้งค่า หรือ enum ที่มีค่าไม่ได้ระบุจะระบุว่ามีการใช้ค่าเริ่มต้นของเครื่องมือแก้โจทย์

ระบบจะไม่สนใจพารามิเตอร์ที่เจาะจงสำหรับตัวแก้โจทย์นอกเหนือจากพารามิเตอร์ที่ใช้อยู่

ระบบจะส่งพารามิเตอร์ที่ขึ้นอยู่กับโมเดล (เช่น กำหนดลำดับความสำคัญของการโยงหัวข้อให้กับตัวแปรแต่ละรายการ) ใน ModelSolveParametersProto

ช่อง
time_limit

Duration

เวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้ในการแก้โจทย์ (หรือไม่จำกัดหากไม่ได้ตั้งค่าไว้)

ค่านี้ไม่ใช่ค่าจำกัด เวลาที่แก้โจทย์อาจเกินค่านี้เล็กน้อย ระบบจะส่งพารามิเตอร์นี้ไปยังเครื่องมือแก้โจทย์คณิตที่เกี่ยวข้องเสมอ โดยจะไม่ใช้ค่าเริ่มต้นของเครื่องมือแก้โจทย์

enable_output

bool

เปิดใช้การพิมพ์การติดตามการใช้งานเครื่องมือแก้โจทย์คณ ตำแหน่งของการติดตามเหล่านั้นจะขึ้นอยู่กับเครื่องมือแก้โจทย์ สำหรับ SCIP และ Gurobi จะเป็นสตรีมเอาต์พุตมาตรฐาน สำหรับ Glop และ CP-SAT ระบบจะ LOG(INFO)

โปรดทราบว่าหากเครื่องมือแก้โจทย์รองรับการเรียกกลับข้อความและผู้ใช้บันทึกการติดต่อกลับ ระบบจะไม่สนใจค่าพารามิเตอร์นี้ และจะไม่พิมพ์การติดตาม

lp_algorithm

LPAlgorithmProto

อัลกอริทึมสำหรับการแก้ปัญหาโปรแกรมเชิงเส้น หาก LP_ALGORITHM_UNSPECIFIED ให้ใช้อัลกอริทึมเริ่มต้นของเครื่องมือแก้โจทย์คณ

สำหรับปัญหาที่ไม่ใช่โปรแกรมเชิงเส้น แต่การเขียนโปรแกรมเชิงเส้นเป็นกิจวัตรย่อย เครื่องมือแก้โจทย์อาจใช้ค่านี้ เช่น โดยทั่วไปเครื่องมือแก้โจทย์ MIP จะใช้ค่านี้สำหรับการแก้โจทย์ LP ระดับรูทเท่านั้น (ในกรณีอื่น ให้ใช้คู่ทางเดียว)

presolve

EmphasisProto

พยายามทำให้ปัญหาง่ายขึ้นก่อนเริ่มอัลกอริทึมหลัก หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED

cuts

EmphasisProto

พยายามทำให้หน้า Landing Page ผ่อนคลายมากขึ้น (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED

หมายเหตุ: การปิดใช้การตัดอาจทำให้โค้ดเรียกกลับไม่มีโอกาสในการเพิ่มการตัดที่ MIP_NODE เนื่องจากลักษณะการทำงานนี้มีไว้สำหรับเครื่องมือแก้โจทย์โดยเฉพาะ

heuristics

EmphasisProto

พยายามค้นหาวิธีแก้ปัญหาที่เป็นไปได้นอกเหนือจากที่พบในกระบวนการค้นหาที่สมบูรณ์ (MIP เท่านั้น) หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED

scaling

EmphasisProto

ความพยายามในการปรับขนาดปัญหาเพื่อปรับปรุงความเสถียรของตัวเลข หรือระดับความพยายามเริ่มต้นในการแก้โจทย์หาก EMPHASIS_UNSPECIFIED

iteration_limit

int64

ข้อจำกัดการทำซ้ำของอัลกอริทึมพื้นฐาน (เช่น การหมุนแกนเดียว) ลักษณะการทำงานที่เจาะจงจะขึ้นอยู่กับเครื่องมือแก้โจทย์และอัลกอริทึมที่ใช้ แต่มักจะให้ขีดจำกัดการแก้โจทย์เชิงกำหนด (อาจต้องกำหนดค่าเพิ่มเติม เช่น ชุดข้อความเดียว)

โดยปกติจะรองรับโดยเครื่องมือแก้โจทย์คณิต LP, QP และ MIP แต่สำหรับเครื่องมือแก้โจทย์ MIP โปรดดู Node_limit ด้วย

node_limit

int64

ขีดจำกัดของจำนวนปัญหาย่อยที่แก้ไขในการค้นหาแบบแจกแจง (เช่น สาขาและขอบเขต) สำหรับเครื่องมือแก้โจทย์คณิตจำนวนมาก คุณสามารถใช้คำสั่งนี้เพื่อจำกัดการคํานวณเชิงกําหนดได้ (อาจต้องกําหนดค่าเพิ่มเติม เช่น เทรดเดียว)

โดยทั่วไปแล้วสำหรับเครื่องมือแก้โจทย์ MIP โปรดดู iteration_limit ด้วย

cutoff_limit

double

เครื่องมือแก้โจทย์คณิตจะหยุดตั้งแต่เนิ่นๆ หากพิสูจน์ได้ว่าไม่มีวิธีแก้ปัญหาเบื้องต้นที่ดีเท่ากับการตัดคำ

ในการหยุดก่อนกำหนด เครื่องมือแก้โจทย์คณิตจะแสดงเหตุผลการสิ้นสุด NO_SOLUTION_FOUND และมีขีดจำกัด CUTOFF และไม่จำเป็นต้องระบุข้อมูลเพิ่มเติมเกี่ยวกับโซลูชัน ไม่มีผลต่อมูลค่าผลตอบแทนหากไม่มีการหยุดก่อนกำหนด

ขอแนะนําให้ใช้ความคลาดเคลื่อนหากต้องการส่งคืนโซลูชันที่มีวัตถุประสงค์เท่ากับค่าตัดออกทั้งหมด

ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบ Best_bound_limit ได้ในคู่มือผู้ใช้

objective_limit

double

เครื่องมือแก้โจทย์คณิตจะหยุดทันทีที่พบวิธีแก้ปัญหาซึ่งอย่างน้อยสิ่งนั้นดี มีเหตุผลการสิ้นสุดที่ทำได้ง่ายและจำกัดวัตถุประสงค์

best_bound_limit

double

เครื่องมือแก้โจทย์คณิตจะหยุดทันทีที่พิสูจน์ขอบเขตได้ดีที่สุดว่าอย่างน้อยค่านี้ดี มีเหตุผลการสิ้นสุด FEASIBLE หรือ NO_SOLUTION_FOUND และจำกัด OBJECTIVE

ดูรายละเอียดเพิ่มเติมและการเปรียบเทียบกับ Cutoff_limit ในคู่มือผู้ใช้

solution_limit

int32

เครื่องมือแก้โจทย์คณจะหยุดชั่วคราวหลังจากพบวิธีแก้ปัญหาที่เป็นไปได้มากมายนี้ โดยมีเหตุผลที่สิ้นสุดการทำงานที่ง่ายและจำกัด SOLUTION ต้องมากกว่า 0 หากตั้งค่าไว้ ซึ่งมักจะใช้เพื่อให้เครื่องมือแก้โจทย์หยุดกับวิธีแก้ปัญหาที่ทำได้แรกที่พบ โปรดทราบว่าไม่มีการรับประกันค่าวัตถุประสงค์สำหรับโซลูชันที่แสดงผล

โดยทั่วไปเครื่องมือแก้ปัญหาจะไม่แสดงโซลูชันเกินกว่าขีดจำกัดของโซลูชัน แต่ MathOpt ไม่ได้บังคับใช้นี้ โปรดดู b/214041169 ด้วย

ปัจจุบันรองรับ Gurobi และ SCIP รวมถึงสำหรับ CP-SAT เท่านั้นที่มีค่า 1

threads

int32

หากตั้งค่าไว้ ค่าจะต้องเป็น >= 1

random_seed

int32

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

double

ความอดทนต่อประสิทธิภาพสูงสุด (เป็นหลัก) สำหรับเครื่องมือแก้ MIP

GAP สัมบูรณ์คือค่าสัมบูรณ์ของความแตกต่างระหว่าง * ค่าที่เป็นกลางของโซลูชันที่เป็นไปได้ที่ดีที่สุดที่พบ * ขอบเขตคู่ที่ได้จากการค้นหา เครื่องมือแก้โจทย์จะหยุดได้เมื่อ GAP สัมบูรณ์มีค่าสูงสุด absolute_gap_tolerance (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL

ต้องเป็น >= 0 ถ้าตั้งค่าไว้

ดูเพิ่มเติม Rel_gap_tolerance

relative_gap_tolerance

double

การยอมรับความหลากหลายที่เหมาะสม (เป็นหลัก) สำหรับเครื่องมือแก้ MIP

GAP แบบสัมพัทธ์คือ GAP สัมบูรณ์เวอร์ชันมาตรฐาน (กำหนดไว้ใน absolute_gap_tolerance) ซึ่งการปรับให้สอดคล้องตามมาตรฐานนั้นขึ้นอยู่กับเครื่องมือแก้โจทย์ เช่น GAP สัมบูรณ์หารด้วยค่าที่เป็นวัตถุประสงค์ของโซลูชันที่เป็นไปได้ที่ดีที่สุดที่พบ

เครื่องมือแก้โจทย์คณจะหยุดเมื่อ GAP แบบสัมพัทธ์อยู่ที่สัมพัทธ์_gap_tolerance สูงสุด (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL

ต้องเป็น >= 0 ถ้าตั้งค่าไว้

ดู absolute_gap_tolerance ด้วย

solution_pool_size

int32

ดูแลรักษาโซลูชันได้สูงสุด solution_pool_size รายการขณะค้นหา โดยทั่วไปแล้ว กลุ่มโซลูชันจะมีฟังก์ชัน 2 ประการ ได้แก่ (1) สำหรับเครื่องมือแก้โจทย์ที่ส่งคืนคำตอบได้มากกว่า 1 รายการ วิธีนี้จะจำกัดจำนวนคำตอบที่จะแสดงผล (2) ตัวแก้โจทย์บางคนอาจเรียกใช้การเรียนรู้โดยใช้โซลูชันจากกลุ่มโซลูชัน ดังนั้น การเปลี่ยนแปลงค่านี้อาจส่งผลต่อเส้นทางของอัลกอริทึม หากต้องการบังคับให้เครื่องมือแก้โจทย์เติมผลลัพธ์ในกลุ่มโซลูชัน เช่น ด้วยโซลูชันที่ดีที่สุด จำเป็นต้องมีการกำหนดค่าเฉพาะเครื่องมือแก้โจทย์เพิ่มเติม

SolveResultProto

สัญญาว่าเมื่อโซลูชัน/การแยกแสงพื้นฐาน/สีคู่มีความซับซ้อน โปรดดู cancel_reasons.md เพื่อดูคำอธิบายทั้งหมด

วิธีที่ดีที่สุดคือการตรวจสอบว่ามีโซลูชัน/แนวทางแก้ไขปัญหาหรือไม่ แทนที่จะใช้เหตุผลในการสิ้นสุดข้อตกลงที่แน่นอนที่สุดคือสัญญาที่แน่ชัด

ช่อง
termination

TerminationProto

เหตุผลที่เครื่องมือแก้โจทย์หยุดลง

solutions[]

SolutionProto

สัญญาทั่วไปสำหรับลำดับของโซลูชันที่นักแก้โจทย์ในอนาคตควรดำเนินการคือลำดับตาม 1. โซลูชันที่มีโซลูชันที่เป็นไปได้ขั้นต้น โดยเรียงตามวัตถุประสงค์เบื้องต้นที่ดีที่สุดก่อน 2. คำตอบที่มีโซลูชันที่เป็นไปได้แบบคู่ โดยเรียงลำดับตามจุดประสงค์คู่ที่ดีที่สุด (วัตถุประสงค์คู่ที่ไม่รู้จักนั้นแย่ที่สุด) 3. โซลูชันที่เหลือทั้งหมดจะส่งคืนตามลำดับใดก็ได้

primal_rays[]

PrimalRayProto

แนวทางการปรับปรุงเบื้องต้นที่ไม่มีขอบเขต หรือใบรับรองความสามารถในการดำเนินการไม่ได้แบบคู่ที่เทียบเท่ากัน โดยทั่วไปแล้วจะมีการระบุสำหรับ FinalReasonProtos UNBOUNDED และ DUAL_INFEASIBLE

dual_rays[]

DualRayProto

คำแนะนำสำหรับการปรับปรุงแบบคู่ที่ไม่มีขอบเขตหรือใบรับรองความเป็นไปได้หลักที่ป้องกันไม่ได้ในระดับพื้นฐาน โดยทั่วไปแล้วจะให้บริการสำหรับ FinalREASONProto INFEASIBLE

solve_stats

SolveStatsProto

สถิติเกี่ยวกับขั้นตอนการแก้โจทย์ เช่น ระยะเวลาทำงาน การทำซ้ำ

SolveStatsProto

ช่อง
solve_time

Duration

เวลาจริงที่ผ่านไปซึ่งวัดโดย math_opt เป็นเวลาโดยประมาณภายใน Solver::Solve() หมายเหตุ: ไม่รวมถึงงานที่ได้สร้างโมเดลไปแล้ว

problem_status

ProblemStatusProto

สถานะความเป็นไปได้ของปัญหาขั้นต้นและปัญหาคู่

simplex_iterations

int64

barrier_iterations

int64

first_order_iterations

int64

node_count

int64

SolverTypeProto

เครื่องมือแก้โจทย์คณิตที่ MathOpt รองรับ

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[]

LinearExpressionProto

นิพจน์ที่จะนำไปใช้กับข้อจำกัด SOS: * SOS1: องค์ประกอบอย่างน้อยหนึ่งองค์ประกอบมีค่าที่ไม่ใช่ 0 * SOS2: องค์ประกอบอย่างน้อย 2 องค์ประกอบมีค่าที่ไม่ใช่ 0 และต้องอยู่ติดกันในลำดับซ้ำ

weights[]

double

ค่าว่างหรือมีความยาวเท่ากับนิพจน์ หากเว้นว่างไว้ น้ำหนักเริ่มต้นจะเป็น 1, 2, ... หากมี ข้อมูลจะต้องไม่ซ้ำกัน

name

string

ข้อความหลักอาจมีข้อกำหนดความไม่ซ้ำกันในช่องนี้ เช่น โปรดดู ModelProto.sos1_constraints และ SosConstraintUpdatesProto.new_constraints

SparseBasisStatusVector

การแสดงเวกเตอร์ของสถานะพื้นฐานอย่างคร่าวๆ

ช่อง
ids[]

int64

ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน

values[]

BasisStatusProto

ต้องมีความยาวเท่ากับรหัส

SparseDoubleMatrixProto

การแสดงเมทริกซ์ของเลขคู่อย่างคร่าวๆ

เมทริกซ์จะได้รับการจัดเก็บเป็น 3 ส่วน ได้แก่ รหัสแถว รหัสคอลัมน์ และค่าสัมประสิทธิ์ เวกเตอร์ 3 เวกเตอร์นี้ต้องมีความยาวเท่ากัน ในกลุ่ม i ทั้งหมด ตูเปิล (row_ids[i],column_ids[i]) ควรแตกต่างกัน ข้อมูลต้องเรียงตามลำดับที่สำคัญ

ช่อง
row_ids[]

int64

column_ids[]

int64

coefficients[]

double

อาจไม่มี NaN

SparseDoubleVectorProto

การแสดงเวกเตอร์ของเลขคู่อย่างไม่ซับซ้อน

ช่อง
ids[]

int64

ต้องจัดเรียง (เรียงลำดับมากขึ้น) โดยมีองค์ประกอบทั้งหมดที่แตกต่างกัน

values[]

double

ต้องมีความยาวเท่ากับรหัส อาจไม่มี NaN

SparseInt32VectorProto

การแสดงเวกเตอร์ของ Int ในจำนวนที่น้อย

ช่อง
ids[]

int64

ควรจัดเรียง (ตามลำดับที่เพิ่มขึ้น) โดยมีองค์ประกอบทั้งหมดแตกต่างกัน

values[]

int32

ต้องมีความยาวเท่ากับรหัส

SparseVectorFilterProto

ข้อความนี้ให้คุณค้นหา/ตั้งค่าส่วนต่างๆ ของ SparseXxxxVector ลักษณะการทำงานเริ่มต้นไม่ได้กรองข้อมูลออก การใช้งานทั่วไปคือการค้นหาเฉพาะบางส่วนของคำตอบ (เฉพาะค่าที่ไม่ใช่ 0 และ/หรือชุดค่าตัวแปรที่เลือกเอง)

ช่อง
skip_zero_values

bool

สำหรับ "ศูนย์" ของ SparseBoolVectorProto มีค่าเป็น false

filter_by_ids

bool

เมื่อเป็นจริง ให้แสดงผลเฉพาะค่าที่ตรงกับรหัสที่แสดงในFilter_ids เท่านั้น

filtered_ids[]

int64

รายการรหัสที่จะใช้เมื่อ filter_by_ids เป็นจริง ต้องว่างเปล่าเมื่อ filter_by_ids เป็นเท็จ หมายเหตุ: หากช่องนี้ว่างเปล่า และ filter_by_ids เป็นจริง แสดงว่าคุณไม่ต้องการข้อมูลใดๆ ในผลลัพธ์

TerminationProto

ข้อมูลทั้งหมดเกี่ยวกับสาเหตุที่การเรียก Solve() สิ้นสุดลง

ช่อง
reason

TerminationReasonProto

ข้อมูลเพิ่มเติมใน limit เมื่อค่าเป็น TERMINATION_REASON_FEASIBLE หรือ TERMINATION_REASON_NO_SOLUTION_FOUND โปรดดูรายละเอียดที่ limit

limit

LimitProto

คือ LIMIT_UNSPECIFIED เว้นแต่เหตุผลคือ TERMINATION_REASON_FEASIBLE หรือ TERMINATION_REASON_NO_SOLUTION_FOUND เครื่องมือแก้โจทย์คณิตบางส่วนไม่สามารถกำหนดขีดจำกัดที่ทำให้เกิดการสิ้นสุดได้เสมอไป ระบบจะใช้ LIMIT_UNDETERMINED เมื่อไม่สามารถระบุสาเหตุได้

detail

string

ข้อมูลเพิ่มเติมที่เจาะจงเกี่ยวกับการสิ้นสุดการใช้งาน

problem_status

ProblemStatusProto

สถานะความเป็นไปได้ของปัญหาขั้นต้นและปัญหาคู่ ตั้งแต่วันที่ 18 กรกฎาคม 2023 ข้อความนี้อาจหายไป หากขาดหายไป คุณสามารถดู problem_status ได้ใน Solve ResultsProto.solve_stats

objective_bounds

ObjectiveBoundsProto

ผูกกับค่าวัตถุประสงค์ที่เหมาะสม ตั้งแต่วันที่ 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[]

int64

ต้องไม่เป็นค่าลบและต้องเพิ่มขึ้นอย่างเคร่งครัด ใช้ค่า max(int64) ไม่ได้

lower_bounds[]

double

ควรมีความยาวเท่ากับ #variables, ค่าเป็น [-inf, inf)

upper_bounds[]

double

ควรมีความยาวเท่ากับ #variables, ค่าเป็น (-inf, inf]

integers[]

bool

ควรมีความยาวเท่ากับ #variables ค่าเป็นเท็จสำหรับตัวแปรต่อเนื่องและเป็นจริงสำหรับตัวแปรจำนวนเต็ม

names[]

string

หากไม่ได้ตั้งค่า ระบบจะถือว่าเป็นสตริงว่างเปล่าทั้งหมด ไม่เช่นนั้น ควรมีความยาวเท่ากับ #variables

ชื่อที่ไม่ว่างเปล่าทั้งหมดต้องไม่ซ้ำกัน