Method: mathopt.solveMathOptModel

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

คำขอ HTTP

POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel

URL ใช้ไวยากรณ์การแปลง gRPC

เนื้อหาของคำขอ

เนื้อหาของคำขอมีข้อมูลที่มีโครงสร้างต่อไปนี้

การแสดง JSON
{
  "solverType": enum (SolverTypeProto),
  "model": {
    object (ModelProto)
  },
  "parameters": {
    object (SolveParametersProto)
  },
  "modelParameters": {
    object (ModelSolveParametersProto)
  }
}
ช่อง
solverType

enum (SolverTypeProto)

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

model

object (ModelProto)

ต้องระบุ การนำเสนอทางคณิตศาสตร์ของโจทย์การเพิ่มประสิทธิภาพที่จะแก้

parameters

object (SolveParametersProto)

ไม่บังคับ พารามิเตอร์สำหรับควบคุมการแก้โจทย์เพียงครั้งเดียว พารามิเตอร์ enabledOutput จะได้รับการจัดการโดยเฉพาะ สําหรับเครื่องมือแก้โจทย์ที่รองรับ Callback ของข้อความ การตั้งค่าเป็นจริงจะทำให้เซิร์ฟเวอร์ลงทะเบียน Callback ของข้อความ ข้อความที่ได้จะถูกส่งคืนใน SolveMathOptModelResponse.messages สำหรับเครื่องมือแก้โจทย์อื่นๆ การตั้งค่า enabledOutput เป็น true จะทำให้เกิดข้อผิดพลาด

modelParameters

object (ModelSolveParametersProto)

ไม่บังคับ พารามิเตอร์ที่จะควบคุมการแก้โจทย์เดี่ยวๆ ที่มีเฉพาะในโมเดลอินพุต (ดู SolveParametersProto สำหรับพารามิเตอร์อิสระของโมเดล)

เนื้อหาการตอบกลับ

การตอบสนองสําหรับการแก้ปัญหาจากระยะไกลแบบเอกภาคใน MathOpt

หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้

การแสดง JSON
{
  "result": {
    object (SolveResultProto)
  },
  "messages": [
    string
  ]
}
ช่อง
result

object (SolveResultProto)

คำอธิบายเอาต์พุตของการแก้โจทย์โมเดลในคำขอ

messages[]

string

หากมีการใช้ 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 (VariablesProto)
  },
  "objective": {
    object (ObjectiveProto)
  },
  "auxiliaryObjectives": {
    string: {
      object (ObjectiveProto)
    },
    ...
  },
  "linearConstraints": {
    object (LinearConstraintsProto)
  },
  "linearConstraintMatrix": {
    object (SparseDoubleMatrixProto)
  },
  "quadraticConstraints": {
    string: {
      object (QuadraticConstraintProto)
    },
    ...
  },
  "secondOrderConeConstraints": {
    string: {
      object (SecondOrderConeConstraintProto)
    },
    ...
  },
  "sos1Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "sos2Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "indicatorConstraints": {
    string: {
      object (IndicatorConstraintProto)
    },
    ...
  }
}
ช่อง
name

string

variables

object (VariablesProto)

objective

object (ObjectiveProto)

วัตถุประสงค์หลักในโมเดล

auxiliaryObjectives

map (key: string (int64 format), value: object (ObjectiveProto))

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

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

linearConstraints

object (LinearConstraintsProto)

linearConstraintMatrix

object (SparseDoubleMatrixProto)

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

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

ข้อกำหนด: * linearConstraintMatrix.row_ids เป็นองค์ประกอบของ LinearConstraints.ids * LinearConstraintMatrix.column_ids เป็นองค์ประกอบของรหัสตัวแปร (variables.id) * ไม่ได้ระบุรายการเมทริกซ์เป็น 0 * linearConstraintMatrix.values ทั้งหมดต้องเป็นแบบสิ้นสุดทั้งหมด

quadraticConstraints

map (key: string (int64 format), value: object (QuadraticConstraintProto))

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

secondOrderConeConstraints

map (key: string (int64 format), value: object (SecondOrderConeConstraintProto))

ข้อจำกัดกรวยลำดับที่สองในโมเดล

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos1Constraints

map (key: string (int64 format), value: object (SosConstraintProto))

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos2Constraints

map (key: string (int64 format), value: object (SosConstraintProto))

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

indicatorConstraints

map (key: string (int64 format), value: object (IndicatorConstraintProto))

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

VariablesProto

ตามที่ใช้ด้านล่าง เรานิยาม "#variables" = size(VariableProto.ids)

การแสดง JSON
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "integers": [
    boolean
  ],
  "names": [
    string
  ]
}
ช่อง
ids[]

string (int64 format)

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

lowerBounds[]

number

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

upperBounds[]

number

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

integers[]

boolean

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

names[]

string

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

ชื่อต้องไม่ว่างเปล่าทั้งหมด

ObjectiveProto

การแสดง JSON
{
  "maximize": boolean,
  "offset": number,
  "linearCoefficients": {
    object (SparseDoubleVectorProto)
  },
  "quadraticCoefficients": {
    object (SparseDoubleMatrixProto)
  },
  "name": string,
  "priority": string
}
ช่อง
maximize

boolean

false คือย่อเล็กสุด ส่วน true คือขยายใหญ่สุด

offset

number

ต้องมีขอบเขต ไม่ใช่ NaN

linearCoefficients

object (SparseDoubleVectorProto)

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

ข้อกำหนด: * LinearCoป๊อปอัปs.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปร Proto ไม่ได้ระบุสัมพันธ์กับ 0 * ค่าสัมประสิทธิ์เชิงเส้นทั้งหมดต้องมีค่าจำกัด * ค่าสัมประสิทธิ์เชิงเส้น ค่าเป็น 0 อาจเป็น 0 แต่จะทำให้สิ้นเปลืองพื้นที่

quadraticCoefficients

object (SparseDoubleMatrixProto)

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

ข้อกำหนดนอกเหนือจากที่ระบุไว้ในข้อความ SparseDoubleMatrixProto: * แต่ละองค์ประกอบของ quadraticCoเส้นประสิทธิ์.row_ids และเอลิเมนต์ของ quadraticCoefficiencys.column_ids แต่ละเอลิเมนต์ต้องเป็นองค์ประกอบของ VariableProto.ids * เมทริกซ์จะต้องเป็นสามเหลี่ยมด้านบน โดยสำหรับ i แต่ละ i, quadraticCoจุดหมายs.row_ids[i] <= quadraticCoป๊อปอัปs.column_ids[i]

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

name

string

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

priority

string (int64 format)

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

SparseDoubleVectorProto

รูปแบบเวกเตอร์ของเลขคู่

การแสดง JSON
{
  "ids": [
    string
  ],
  "values": [
    number
  ]
}
ช่อง
ids[]

string (int64 format)

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

values[]

number

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

SparseDoubleMatrixProto

การนำเสนอแบบคร่าวๆ ของเมทริกซ์คู่

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

การแสดง JSON
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
ช่อง
rowIds[]

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

อาจไม่มี NaN

LinearConstraintsProto

ดังที่ใช้ด้านล่าง เรานิยามคำว่า "#Linearข้อจํากัด" = size(LinearConstraintsProto.ids)

การแสดง JSON
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "names": [
    string
  ]
}
ช่อง
ids[]

string (int64 format)

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

lowerBounds[]

number

ควรมีความยาวเท่ากับ #Linear ค่าจำกัด ค่าใน [-inf, inf)

upperBounds[]

number

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

names[]

string

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

ชื่อต้องไม่ว่างเปล่าทั้งหมด

QuadraticConstraintProto

ข้อจำกัดกำลังสองเดี่ยวของรูปแบบ: lb <= sum{LinearTerms} + sum{quadraticTerms} <= ub

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

การแสดง JSON
{
  "linearTerms": {
    object (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
ช่อง
linearTerms

object (SparseDoubleVectorProto)

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

นอกจากข้อกำหนดสำหรับข้อความ SparseDoubleVectorProto แล้ว เรากำหนดให้ * Linearข้อตกลงงรหัส เป็นองค์ประกอบของ VariableProto.ids * Linearterms.values ต้องเป็นแบบจํากัดและไม่ใช่ไม่มี

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

quadraticTerms

object (SparseDoubleMatrixProto)

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

นอกจากข้อกำหนดเกี่ยวกับข้อความ SparseDoubleMatrixProto แล้ว เรายังกำหนดให้: * แต่ละองค์ประกอบของ quadraticTerms.row_ids และองค์ประกอบแต่ละรายการของ quadraticTerms.column_ids จะต้องเป็นองค์ประกอบของ VariableProto.ids * เมทริกซ์จะต้องเป็นสามเหลี่ยมด้านบน โดยสำหรับ i แต่ละรายการ quadraticข้อตกลง.row_ids[i] <= quadratic Terms.column_ids[i]

หมายเหตุ: * คำศัพท์ที่ไม่ได้จัดเก็บอย่างชัดแจ้งจะมีสัมประสิทธิ์เป็นศูนย์ * องค์ประกอบของ quadraticterms.coที่เป็นs อาจเป็น 0 ได้ แต่จะทำให้สิ้นเปลืองพื้นที่

lowerBound

number

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

upperBound

number

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

name

string

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

SecondOrderConeConstraintProto

ข้อจำกัดแบบกรวยลำดับที่สองของแบบฟอร์ม:

||argumentsToNorm||_2 <= upperBound,

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

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

การแสดง JSON
{
  "upperBound": {
    object (LinearExpressionProto)
  },
  "argumentsToNorm": [
    {
      object (LinearExpressionProto)
    }
  ],
  "name": string
}
ช่อง
upperBound

object (LinearExpressionProto)

argumentsToNorm[]

object (LinearExpressionProto)

name

string

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

LinearExpressionProto

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

การแสดง JSON
{
  "ids": [
    string
  ],
  "coefficients": [
    number
  ],
  "offset": number
}
ช่อง
ids[]

string (int64 format)

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

coefficients[]

number

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

offset

number

ต้องมีระยะเวลาจำกัดและต้องไม่เป็นแบบ NaN

SosConstraintProto

ข้อมูลสำหรับแสดงข้อจำกัด SOS1 หรือ SOS2 เดียว

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

การแสดง JSON
{
  "expressions": [
    {
      object (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
ช่อง
expressions[]

object (LinearExpressionProto)

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

weights[]

number

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

name

string

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

IndicatorConstraintProto

ข้อมูลสำหรับแสดงข้อจำกัดเดียวของตัวบ่งชี้ในรูปแบบ: Variable(indicatorId) = (activateOnZero ? 0 : 1) ⇒ ขอบเขตล่าง <= นิพจน์ <= ขอบเขตบน

หากลบตัวแปรที่เกี่ยวข้องกับข้อจำกัดนี้ (ตัวบ่งชี้หรือที่ปรากฏใน expression) ออก ระบบจะถือว่าตัวแปรถูกตั้งค่าเป็น 0 โดยเฉพาะอย่างยิ่ง การลบตัวแปรตัวบ่งชี้หมายความว่าข้อจำกัดตัวบ่งชี้ไม่มีค่าหาก activateOnZero เป็นเท็จ และเทียบเท่ากับข้อจำกัดเชิงเส้นหาก activateOnZero เป็นจริง

การแสดง JSON
{
  "activateOnZero": boolean,
  "expression": {
    object (SparseDoubleVectorProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string,
  "indicatorId": string
}
ช่อง
activateOnZero

boolean

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

expression

object (SparseDoubleVectorProto)

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

lowerBound

number

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

upperBound

number

ต้องมีค่าเป็น (-inf, inf] และไม่สามารถเป็น NaN ได้

name

string

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

indicatorId

string (int64 format)

รหัสที่เกี่ยวข้องกับตัวแปรไบนารี หรือไม่ได้ตั้งค่า หากไม่ได้ตั้งค่า ระบบจะไม่สนใจข้อจำกัดของตัวบ่งชี้ หากมีการตั้งค่า เรากำหนดให้ต้องมีค่าดังนี้ * 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 (LPAlgorithmProto),
  "presolve": enum (EmphasisProto),
  "cuts": enum (EmphasisProto),
  "heuristics": enum (EmphasisProto),
  "scaling": enum (EmphasisProto),
  "iterationLimit": string,
  "nodeLimit": string,
  "cutoffLimit": number,
  "objectiveLimit": number,
  "bestBoundLimit": number,
  "solutionLimit": integer,
  "threads": integer,
  "randomSeed": integer,
  "absoluteGapTolerance": number,
  "relativeGapTolerance": number,
  "solutionPoolSize": integer
}
ช่อง
timeLimit

string (Duration format)

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

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

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

enableOutput

boolean

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

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

lpAlgorithm

enum (LPAlgorithmProto)

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

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

presolve

enum (EmphasisProto)

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

cuts

enum (EmphasisProto)

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

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

heuristics

enum (EmphasisProto)

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

scaling

enum (EmphasisProto)

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

iterationLimit

string (int64 format)

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

โดยทั่วไปรองรับโดยเครื่องมือแก้โจทย์ LP, QP และ MIP แต่สำหรับเครื่องมือแก้โจทย์ MIP จะเห็นค่า NodeLimit ด้วย

nodeLimit

string (int64 format)

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

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

cutoffLimit

number

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

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

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

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

objectiveLimit

number

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

bestBoundLimit

number

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

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

solutionLimit

integer

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

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

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

threads

integer

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

randomSeed

integer

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

number

ความคลาดเคลื่อนสัมบูรณ์ของประสิทธิภาพสูงสุด (หลักๆ) สำหรับเครื่องมือแก้โจทย์ MIP

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

ต้อง >= 0 หากตั้งค่าไว้

โปรดดู RelativeGapTolerance

relativeGapTolerance

number

ความคลาดเคลื่อนสัมพัทธ์ (หลัก) สำหรับเครื่องมือแก้โจทย์ MIP

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

ตัวแปลงสามารถหยุดเมื่อ GAP สัมพัทธ์มีค่าสัมพัทธ์มากที่สุด (เมื่อตั้งค่า) และแสดงผล TERMINATION_REASON_OPTIMAL

ต้อง >= 0 หากตั้งค่าไว้

ดู absoluteGapTolerance

solutionPoolSize

integer

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

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 (SparseVectorFilterProto)
  },
  "dualValuesFilter": {
    object (SparseVectorFilterProto)
  },
  "reducedCostsFilter": {
    object (SparseVectorFilterProto)
  },
  "initialBasis": {
    object (BasisProto)
  },
  "solutionHints": [
    {
      object (SolutionHintProto)
    }
  ],
  "branchingPriorities": {
    object (SparseInt32VectorProto)
  }
}
ช่อง
variableValuesFilter

object (SparseVectorFilterProto)

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

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

dualValuesFilter

object (SparseVectorFilterProto)

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

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

reducedCostsFilter

object (SparseVectorFilterProto)

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

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

initialBasis

object (BasisProto)

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

solutionHints[]

object (SolutionHintProto)

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

branchingPriorities

object (SparseInt32VectorProto)

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

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

SparseVectorFilterProto

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

การแสดง JSON
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
ช่อง
skipZeroValues

boolean

สำหรับ SparseBoolVectorProto "ศูนย์" มีค่า false

filterByIds

boolean

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

filteredIds[]

string (int64 format)

รายการรหัสที่จะใช้เมื่อ 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 (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
ช่อง
constraintStatus

object (SparseBasisStatusVector)

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

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

variableStatus

object (SparseBasisStatusVector)

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

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

basicDualFeasibility

enum (SolutionStatusProto)

ฟีเจอร์นี้เป็นฟีเจอร์ขั้นสูงที่ MathOpt ใช้เพื่อระบุลักษณะความเป็นไปได้ของโซลูชัน LP ที่ต่ำกว่ามาตรฐาน (โซลูชันที่ดีที่สุดจะมีสถานะ SOLUTION_STATUS_FEASIBLE เสมอ)

สำหรับ LP แบบด้านเดียว ค่าดังกล่าวควรเท่ากับสถานะความเป็นไปได้ของโซลูชันแบบคู่ที่เกี่ยวข้อง สำหรับ LP แบบ 2 ด้าน อาจแตกต่างกันได้ในบางกรณี (เช่น การแก้ไม่สำเร็จด้วย Prial Simplex)

หากคุณระบุพื้นฐานเริ่มต้นผ่าน ModelSolveParametersProto.initial_basis ระบบจะไม่สนใจค่านี้ รายการนี้เกี่ยวข้องกับพื้นฐานที่ SolutionProto.basis แสดงผลเท่านั้น

SparseBasisStatusVector

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

การแสดง JSON
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
ช่อง
ids[]

string (int64 format)

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

values[]

enum (BasisStatusProto)

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

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 (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
ช่อง
variableValues

object (SparseDoubleVectorProto)

การกำหนดค่าเพียงบางส่วนให้กับตัวแปรหลักของปัญหา ข้อกำหนดที่ไม่เกี่ยวข้องกับเครื่องมือแก้โจทย์สำหรับข้อความย่อยนี้คือ *ตัวแปรValues.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปรValues.values ต้องเป็นแบบจํากัดทั้งหมด

dualValues

object (SparseDoubleVectorProto)

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

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

SparseInt32VectorProto

การแสดงเวกเตอร์ของ int แบบคร่าวๆ

การแสดง JSON
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
ช่อง
ids[]

string (int64 format)

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

values[]

integer

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

SolveResultProto

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

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

การแสดง JSON
{
  "termination": {
    object (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
ช่อง
termination

object (TerminationProto)

เหตุผลที่โปรแกรมแก้โจทย์หยุดทำงาน

solutions[]

object (SolutionProto)

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

primalRays[]

object (PrimalRayProto)

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

dualRays[]

object (DualRayProto)

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

solveStats

object (SolveStatsProto)

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

TerminationProto

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

การแสดง JSON
{
  "reason": enum (TerminationReasonProto),
  "limit": enum (LimitProto),
  "detail": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "objectiveBounds": {
    object (ObjectiveBoundsProto)
  }
}
ช่อง
reason

enum (TerminationReasonProto)

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

limit

enum (LimitProto)

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

detail

string

ข้อมูลเฉพาะวิธีแก้ปัญหาโดยทั่วไปเกี่ยวกับการสิ้นสุด

problemStatus

object (ProblemStatusProto)

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

objectiveBounds

object (ObjectiveBoundsProto)

ขอบเขตของค่าวัตถุประสงค์ที่เหมาะสมที่สุด ตั้งแต่วันที่ 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 (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
ช่อง
primalStatus

enum (FeasibilityStatusProto)

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

dualStatus

enum (FeasibilityStatusProto)

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

primalOrDualInfeasible

boolean

หากเป็น "จริง" เครื่องมือแก้โจทย์อ้างว่าปัญหาแรกเริ่มหรือปัญหาคู่นั้นทำไม่ได้ แต่จะไม่ทราบว่าปัญหาใด (หรือทั้ง 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

number

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

dualBound

number

เครื่องมือแก้โจทย์อ้างว่าค่าที่ดีที่สุดนั้นเท่ากับหรือแย่ลง (มากสำหรับการย่อและยิ่งน้อยกว่าสำหรับการเพิ่มสูงสุด) มากกว่าค่า 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 (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
ช่อง
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

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 (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
ช่อง
variableValues

object (SparseDoubleVectorProto)

ข้อกำหนด: * VariableValues.ids เป็นองค์ประกอบของ VariableProto.ids * ตัวแปรValues.values ต้องเป็นแบบจํากัดทั้งหมด

objectiveValue

number

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

auxiliaryObjectiveValues

map (key: string (int64 format), value: number)

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

feasibilityStatus

enum (SolutionStatusProto)

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

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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
ช่อง
dualValues

object (SparseDoubleVectorProto)

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

reducedCosts

object (SparseDoubleVectorProto)

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

feasibilityStatus

enum (SolutionStatusProto)

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

objectiveValue

number

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 (SparseDoubleVectorProto)
  }
}
ช่อง
variableValues

object (SparseDoubleVectorProto)

ข้อกำหนด: * 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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
ช่อง
dualValues

object (SparseDoubleVectorProto)

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

reducedCosts

object (SparseDoubleVectorProto)

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

SolveStatsProto

การแสดง JSON
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
ช่อง
solveTime

string (Duration format)

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

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

problemStatus

object (ProblemStatusProto)

สถานะความเป็นไปได้สำหรับปัญหาแรกเริ่มและปัญหาคู่

simplexIterations

string (int64 format)

barrierIterations

string (int64 format)

firstOrderIterations

string (int64 format)

nodeCount

string (int64 format)