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)

اختياريّ. معلَمات للتحكّم في حل واحد. ويتم التعامل مع معلَمة واجهة (enable واحرص) على وجه التحديد. بالنسبة إلى برامج الحل التي تتيح عمليات استدعاء الرسائل، سيؤدي ضبطها على "صحيح" إلى تسجيل الخادم لرد استدعاء الرسالة. سيتم عرض الرسائل الناتجة في SolveMathOptModelResponse.messages. بالنسبة إلى أدوات الحلّ الأخرى، سيؤدي ضبط ميزة "تفعيل الإخراج" على "صحيح" إلى حدوث خطأ.

modelParameters

object (ModelSolveParametersProto)

اختياريّ. المعلَمات التي يمكنها التحكّم في حل واحد والخاص بنموذج الإدخال (يُرجى الاطّلاع على SolveParametersProto لمعرفة المعلمات المستقلة في النموذج).

نص الاستجابة

ردّ على حل أحادي عن بُعد في MathOpt.

إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

تمثيل JSON
{
  "result": {
    object (SolveResultProto)
  },
  "messages": [
    string
  ]
}
الحقول
result

object (SolveResultProto)

وصف ناتج حل النموذج في الطلب.

messages[]

string

في حال استخدام SolveParametersProto.enable_output، سيحتوي ذلك على رسائل سجلّ أدوات الحلّ التي تتيح عمليات استدعاء الرسائل.

SolverTypeProto

أدوات الحلّ المتوافقة مع MathOpt.

عمليات التعداد
SOLVER_TYPE_UNSPECIFIED
SOLVER_TYPE_GSCIP

أداة حلّ برامج العدد الصحيح للقيود (SCIP) (تابعة لجهة خارجية)

يتيح هذا الخيار المسائل التربيعية للأعداد الصحيحة غير المحدَّبة بتنسيق LP وMIP وMIP. ومع ذلك، لا يتم عرض بيانات مزدوجة عن LPs. أفضل GLOP لـ LPs.

SOLVER_TYPE_GUROBI

أداة حلّ Gurobi (جهة خارجية)

يتيح هذا الخيار المسائل التربيعية للأعداد الصحيحة غير المحدَّبة بتنسيق LP وMIP وMIP. بشكل عام، الخيار الأسرع، ولكن لديه ترخيص خاص.

SOLVER_TYPE_GLOP

أداة حلّ Glop من Google.

يدعم LP بالطرق الأولية والثنائية البسيطة.

SOLVER_TYPE_CP_SAT

أداة حلّ CP-SAT من Google

يدعم المشكلات التي تكون فيها جميع المتغيرات عددًا صحيحًا ومحددة (أو تشير ضمنًا إلى أن تكون بعد presolve). الدعم التجريبي لإعادة قياس وتصنيف المشكلات باستخدام المتغيرات المستمرة.

SOLVER_TYPE_PDLP

أداة حل PDLP من Google

لدعم الأهداف التربيعية القطرية المحدبة والشكل المحدب للأسفل. يستخدم طرق الطلب الأول بدلاً من البسيط. يمكنها حل مشاكل كبيرة جدًا.

SOLVER_TYPE_GLPK

مجموعة أدوات البرمجة الخطية GNU (GLPK) (طرف ثالث).

يدعم MIP وLP.

Thread-safety (أمان سلسلة التعليمات): يستخدم GLPK مساحة تخزين محلية على سلسلة محادثات لتخصيص الذاكرة. ونتيجةً لذلك، يجب إتلاف مثيلات أداة Solver في سلسلة التعليمات نفسها التي تم إنشاؤها بها وإلا سيتوقف GLPK. يبدو أنه من المقبول استدعاء Solver::Solve() من سلسلة رسائل أخرى غير تلك المستخدمة لإنشاء أداة Solver ولكن لم يتم توثيقها باستخدام GLPK ويجب تجنبها.

عند حل LP باستخدام أداة الحل، لا يتم عرض الحل (والأشعة غير المرتبطة) إلا إذا تم العثور على الحل الأمثل. وإلا لن يتم إرجاع أي شيء. راجع glpk-5.0/doc/glpk.pdf الصفحة رقم 40 المتاحة من glpk-5.0.tar.gz للحصول على التفاصيل.

SOLVER_TYPE_OSQP

أداة حلّ البرنامج التربيعي لتقسيم عوامل التشغيل (OSQP) (جهة خارجية)

إتاحة المسائل المستمرة ذات القيود الخطية والأهداف التربيعية الخطية أو المحدبة يستخدم طريقة الترتيب الأول.

SOLVER_TYPE_ECOS

أداة الحلّ المخروطي المضمّنة (ECOS) التابعة لجهة خارجية

إمكانية دعم مشاكل LP وSOCP. يستخدم طرق النقاط الداخلية (الحاجز).

SOLVER_TYPE_SCS

أداة حلّ التقسيم المخروطي (SCS) التابعة لجهة خارجية

إمكانية دعم مشاكل LP وSOCP. يستخدم طريقة الترتيب الأول.

SOLVER_TYPE_HIGHS

أداة حلّ HiGHS (تابعة لجهة خارجية)

أن يدعم مشاكل LP وMIP (لم يتم تنفيذ QPs المحدب).

SOLVER_TYPE_SANTORINI

تنفيذ مرجع MathOpt لأداة حل MIP.

بطيئة/لا يُنصح بها للإصدار العلني. ليست أداة حل LP (لم يتم عرض معلومات مزدوجة).

ModelProto

مشكلة في التحسين. يتيح Mathopt: - متغيّرات القرار المستمرة والأعداد الصحيحة مع حدود محدودة اختيارية. - الأهداف الخطية والتربيعية (أهداف واحدة أو متعددة)، سواء كانت مصغرة أو مكبرة. - عدد من أنواع القيود، بما في ذلك: * القيود الخطية * القيود التربيعية * قيود المستوى الثاني * القيود المنطقية > قيود SOS1 وSOS2 > قيود المؤشر

يتم تمثيل القيود افتراضيًا في خرائط "المعرف إلى البيانات". ومع ذلك، نمثل القيود الخطية بتنسيق "هيكلة مصفوفة" أكثر فاعلية.

تمثيل 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)

يشير ذلك المصطلح إلى المعاملات المتغيّرة للقيود الخطية.

إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.

المتطلبات: * inlineConstraintMatrix.row_ids هي عناصر LineConstraints.ids. * LineConstraintMatrix.column_ids هي عناصر sort.ids. * قيمة إدخالات المصفوفة غير المحددة صفر. * يجب أن تكون جميع قيم LineConstraintMatrix.value محدودة.

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 واحد على الأكثر يمكن أن تكون قيمة غير صفرية. تُعد إدخالات weights الاختيارية تفاصيل تنفيذ تستخدمها أداة الحلّ (ونأمل) في التواصل بسرعة أكبر. وبمزيد من التفاصيل، يمكن للأدوات استخدام هذه القيم التقديرية (أو عدم استخدامها) لاختيار قرارات التشعّب التي تنتج عُقد فرعية "متوازنة".

عنصر يحتوي على قائمة من أزواج "key": value. مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos2Constraints

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

قيود SOS2 في النموذج، والتي تفرض قيودًا على أنّ إدخالين من expression على الأكثر يمكن أن تكونا بقيمة غير صفرية، ويجب أن تكونا متجاورتين بترتيبهما. في حال عدم توفير السمة weights، يكون هذا الترتيب هو الترتيب الخطّي في قائمة expressions، وفي حال تقديم السمة weights، سيتم استخدام الترتيب وفقًا لهذه القيم بترتيب متزايد.

عنصر يحتوي على قائمة من أزواج "key": value. مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" }

indicatorConstraints

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

قيود المؤشر في النموذج، والتي تفرض ذلك في حال ضبط "متغيّر المؤشر" الثنائي على واحد، يجب أن يخضع "القيد الضمني" لقيود.

عنصر يحتوي على قائمة من أزواج "key": value. مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" }

VariablesProto

كما هو مستخدم أدناه، نعرّف "#variables" = size(VariablesProto.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، القيم بـ (-inf, inf].

integers[]

boolean

يجب أن يساوي طول #variables. تكون القيمة خاطئة للمتغيرات المستمرة، وتكون 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 الخطية في متغيرات القرار.

المتطلبات: * inlineCo transactions.ids عبارة عن عناصر من VariablesProto.ids. * VariablesProto غير محددة تتوافق مع الصفر. * يجب أن تكون جميع قيم LineCoشملs.values عددًا محدودًا. * يمكن أن تساوي قيم lineCoشملs.values صفرًا، ولكن هذا يؤدي إلى إهدار مساحة.

quadraticCoefficients

object (SparseDoubleMatrixProto)

يشير ذلك المصطلح إلى المصطلحات الموضوعية التربيعية في متغيرات القرار.

المتطلبات بالإضافة إلى تلك المذكورة في رسائل SparseDoubleMatrixProto: * يجب أن يكون كل عنصر من عناصر quadraticCoTransactions.row_ids وكل عنصر من عناصر quadraticCo خصوصيةs.column_ids، عنصرًا من VariablesProto.ids. * يجب أن تكون المصفوفة مثلثة علوية الشكل: لكل i, quadraticCoTransactions.row_ids[i] <= quadraticCofactors.column_ids[i].

ملاحظات: * المصطلحات التي لم يتم تخزينها بشكل صريح تتضمّن مُعاملاً صفريًا. * يمكن أن تكون عناصر quadraticCo مربعs.cotransactions صفرًا، ولكن هذا يؤدي إلى إهدار مساحة.

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

تمثيل متفرق لمصفوفة من الأزواج.

يتم تخزين المصفوفة كثلاث ثلاثيات من معرف الصف ومعرف العمود ومعامل. يجب أن تكون هذه المتجهات الثلاثة متساوية الطول. بالنسبة إلى كل i، يجب أن يكون الصف (rowIds[i] وcolumnIds[i]) مختلفًا. يجب أن تكون الإدخالات بترتيب رئيسي في الصف.

تمثيل JSON
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
الحقول
rowIds[]

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

قد لا تحتوي على القيم غير الرقمية (NaN).

LinearConstraintsProto

كما هو موضح أدناه، نحدد "#Lineالقيود" = الحجم(LinearConstraintsProto.ids).

تمثيل JSON
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "names": [
    string
  ]
}
الحقول
ids[]

string (int64 format)

يجب أن تكون القيمة غير سالبة وأن تكون متزايدة تمامًا. لا يمكن استخدام قيمة max(int64).

lowerBounds[]

number

يجب أن يكون طولها #line خطي، والقيم بـ [-inf, inf).

upperBounds[]

number

يجب أن يكون طولها #قابلاً للقيود الخطية، والقيم بـ (-inf, inf].

names[]

string

في حال ترك هذه السياسة بدون ضبط، يُفترض أن تكون جميع السلاسل فارغة. بخلاف ذلك، يجب أن يكون طولاً يساوي #Line القيود.

يجب أن تكون جميع الأسماء غير الفارغة مختلفة.

QuadraticConstraintProto

قيد تربيعي واحد بالصيغة: lb <= sum{ LineTerms} + sum{quadraticTerms} <= ub.

إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.

تمثيل JSON
{
  "linearTerms": {
    object (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
الحقول
linearTerms

object (SparseDoubleVectorProto)

العبارات الخطية في متغيرات القرار.

بالإضافة إلى المتطلبات الخاصة برسائل SparseDoubleVectorProto، نطلب منك تنفيذ ما يلي: * LineTerms.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم LineTerms.values محدودة وليست NaN.

ملاحظات: * المعرّفات المتغيّرة التي تم حذفها لها معامل مقابل صفر. * يمكن أن تساوي قيم lineTerms.values صفرًا، ولكن هذا يؤدي إلى إهدار مساحة.

quadraticTerms

object (SparseDoubleMatrixProto)

المصطلحات التربيعية في متغيرات القرار.

بالإضافة إلى المتطلبات الخاصة برسائل SparseDoubleMatrixProto، نحن بحاجة إلى ما يلي: * يجب أن يكون كل عنصر من عناصر quadraticTerms.row_ids وكل عنصر فيها quadraticTerms.column_ids، عنصرًا من VariablesProto.ids. * يجب أن تكون المصفوفة مثلثة علوية: لكل i, quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i].

ملاحظات: * المصطلحات التي لم يتم تخزينها بشكل صريح تتضمّن مُعاملاً صفريًا. * يمكن أن تكون عناصر quadraticTerms.cotransactions صفرًا، ولكن هذا يؤدي إلى إهدار مساحة.

lowerBound

number

يجب أن تكون القيمة بـ [-inf وinf) وأن تكون أقل من أو تساوي upperBound.

upperBound

number

يجب أن تكون القيمة في (-inf, inf]، وأن تكون أكبر من أو تساوي lowerBound.

name

string

قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل، على سبيل المثال، يمكنك الاطّلاع على ModelProto.quadratic_Restrictts وQuadraticConstraintUpdatesProto.new_Restrictts.

SecondOrderConeConstraintProto

قيد مخروطي واحد من الدرجة الثانية للشكل:

||argumentsToNorm||_2 <= upperBound،

حيث يكون upperBound وكل عنصر من عناصر argumentsToNorm تعبيرات خطية.

إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.

تمثيل 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.

إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.

تمثيل JSON
{
  "expressions": [
    {
      object (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
الحقول
expressions[]

object (LinearExpressionProto)

التعبيرات التي سيتم تطبيق قيد SOS عليها: * SOS1: يأخذ عنصر واحد قيمة غير صفرية على الأكثر. * SOS2: يتخذ عنصران كحد أقصى قيمًا غير صفرية، ويجب أن يكونا متجاورين بالترتيب المكرر.

weights[]

number

إما أن تكون فارغة أو متساوية في الطول من التعبيرات. إذا كانت القيم فارغة، تكون قيم الترجيح الافتراضية هي 1، 2، ... إذا كانت موجودة، يجب أن تكون الإدخالات فريدة.

name

string

قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل؛ على سبيل المثال، راجع ModelProto.sos1_Restrictts وSosConstraintUpdatesProto.new_Restrictts.

IndicatorConstraintProto

بيانات تمثل قيد مؤشر واحد على النحو التالي: Variable(indicatorId) = (activateOnZero ? 0 : 1) الكاملة أقلBound <= التعبير <= upperBound.

في حال حذف متغيّر متضمن في هذا القيد (سواء المؤشر أو الذي يظهر في expression)، سيتم التعامل معه كما لو تم ضبطه على صفر. على وجه الخصوص، يعني حذف متغير المؤشر أن قيد المؤشر يكون خاليًا إذا كان activateOnZero خطأ، وأنه يعادل قيدًا خطيًا إذا كانت activateOnZero true.

تمثيل JSON
{
  "activateOnZero": boolean,
  "expression": {
    object (SparseDoubleVectorProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string,
  "indicatorId": string
}
الحقول
activateOnZero

boolean

إذا كان true، فعندئذ إذا أخذ متغير المؤشر القيمة 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)

معرّف يقابل متغيّر ثنائي، أو تم تركه بدون ضبط. في حال ترك هذه السياسة بدون ضبط، يتم تجاهل قيد المؤشر. في حال التعيين، نحن نطلب ما يلي: * VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. لا يتم التحقّق من هذه الشروط باستخدام MathOpt، ولكن في حال عدم استيفائه، سيؤدي ذلك إلى عرض أداة الحلّ لخطأ عند الحلّ.

SolveParametersProto

معلَمات للتحكّم في حل واحد.

يحتوي على كلتا المَعلمتَين المشتركتَين في جميع أدوات الحلّ، مثل timelimit، والمَعلمات الخاصة بأداة حل محدَّدة، مثل gcip. في حال ضبط قيمة في كل من الحقل الشائع والحقل الخاص بأداة الحلّ، يتم استخدام الإعداد الخاص بأداة الحلّ.

تشير المَعلمات الشائعة الاختيارية وغير المحدَّدة أو التعداد بدون تحديد قيمة إلى أنّه يتم استخدام الإعداد التلقائي لأداة الحلّ.

ويتم تجاهل المعلَمات الخاصة بأدوات الحلّ غير تلك المستخدَمة.

يتم تمرير المعلّمات التي تعتمد على النموذج (مثلاً، ضبط أولوية التشعّب لكل متغير) في 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)

يشير ذلك إلى الحدّ الأقصى للوقت الذي يجب أن يقضيه الحلّ في حلّ المشكلة (أو غير محدود إذا لم يتم ضبط هذه الميزة).

هذه القيمة ليست حدًا صارمًا، قد يتجاوز وقت الحل هذه القيمة قليلاً. يتم دائمًا تمرير هذه المَعلمة إلى أداة الحلّ الأساسية، ولا يتم استخدام الأداة التلقائية للحلّ.

مدة بالثواني يصل عددها إلى تسعة أرقام كسرية وتنتهي بـ "s". مثال: "3.5s".

enableOutput

boolean

يؤدي هذا الخيار إلى تفعيل طباعة آثار تنفيذ أداة الحلّ. ويعتمد موقع عمليات التتبُّع هذه على أداة الحلّ. بالنسبة إلى SCIP وGurobi، سيكون هذا هو مجموعات الإخراج العادية. بالنسبة إلى Glop وCP-SAT، سيؤدي ذلك إلى LOG(INFO).

يُرجى العِلم أنّه إذا كانت أداة الحلّ توفّر إمكانية معاودة الاتصال بالرسالة وسجَّل المستخدم معاودة الاتصال بها، سيتم تجاهل قيمة المَعلمة هذه ولن تتم طباعة أي عمليات تتبُّع.

lpAlgorithm

enum (LPAlgorithmProto)

يشير ذلك المصطلح إلى خوارزمية حل برنامج خطي. إذا كان LP_ALGORITHM_UNSPECIFIED، استخدِم الخوارزمية التلقائية لأداة الحلّ.

بالنسبة إلى المسائل التي ليست برامج خطية ولكنها تكون فيها البرمجة الخطية روتينًا فرعيًا، يمكن أن تستخدم أدوات الحلّ هذه القيمة. على سبيل المثال، تستخدم أدوات حل MIP عادةً هذا لأسلوب LP الجذري (وتستخدم طريقة العرض المزدوج البسيط في الحالات الأخرى).

presolve

enum (EmphasisProto)

جهد لتبسيط المسألة قبل بدء الخوارزمية الرئيسية، أو مستوى الجهد الافتراضي لأداة الحلّ إذا وجدوا أن EVAL_UNSPECIFIED.

cuts

enum (EmphasisProto)

هناك الجهد المبذول في الحصول على مستوى أقوى للتخفيف من آثار LP (MIP فقط)، أو مستوى الجهد الافتراضي لأداة الحلّ في حالة LINK_UNSPECIFIED.

ملاحظة: قد يؤدي إيقاف ميزة القطع إلى منع عمليات معاودة الاتصال من إضافة إمكانية إضافة اختصار في MIP_NODE، ولكن هذا السلوك مرتبط بأداة الحلّ.

heuristics

enum (EmphasisProto)

هناك جهد لإيجاد حلول مجدية تتجاوز تلك التي تتم مواجهتها في إجراء البحث الكامل (MIP فقط)، أو مستوى الجهد الافتراضي لأداة الحلّ في حالة ATTRIBUTE_UNSPECIFIED.

scaling

enum (EmphasisProto)

يبذل الجهد في تغيير نطاق المشكلة لتحسين الثبات العددي، أو مستوى الجهد الافتراضي لأداة الحلّ إذا لم تكن هذه القيمة LINK_UNSPECIFIED.

iterationLimit

string (int64 format)

تقييد التكرارات للخوارزمية الأساسية (على سبيل المثال، محورية بسيطة). يعتمد هذا السلوك المحدّد على أداة الحلّ والخوارزمية المستخدَمة، ولكن غالبًا ما يمكن أن يوفّر حدًا للحل (قد تكون هناك حاجة إلى ضبط إضافي، مثل سلسلة واحدة).

تكون هذه الأدوات متوافقة عادةً مع أدوات حلّ مشاكل LP وQP وMIP، ولكن بالنسبة إلى أدوات حلّ MIP، يمكنك أيضًا الانتقال إلىNodelimit.

nodeLimit

string (int64 format)

يشير ذلك إلى الحد الأقصى لعدد المسائل الفرعية التي يتم حلها في البحث التعدادي (مثل الفرع والحدود). بالنسبة إلى العديد من أدوات الحلّ، يمكن استخدام هذه الطريقة لتحديد العمليات الحسابية بشكل حاسم (قد تكون هناك حاجة إلى ضبط إضافي، مثل سلسلة واحدة).

بالنسبة إلى أدوات حلّ MIP، يمكنك أيضًا الاطّلاع على حدّ التكرار.

cutoffLimit

number

تتوقّف أداة الحلّ مبكرًا إذا تمكّنت من إثبات عدم توفّر حلول أولية، على الأقل هذه الحدود.

في مرحلة مبكرة، تعرض أداة الحلّ سبب الإنهاء NO_SOLUTION_FOUND مع تحديد CUTOFF، وليس مطلوبًا منها تقديم أي معلومات إضافية عن الحلّ. ولن يكون لذلك أي تأثير في القيمة المعروضة في حال عدم التوقّف المبكر.

يوصى باستخدام مقدار تفاوت إذا كنت تريد حلولاً بهدف تساوي تمامًا عرض القطع.

يمكنك الاطّلاع على دليل المستخدم للحصول على مزيد من التفاصيل والمقارنة مع bestBoundlimited.

objectiveLimit

number

تتوقف أداة الحلّ في أقرب وقت عند العثور على حلّ بهذا الشكل على الأقل، مع إدراج سبب الإغلاق "مقبول" و"الحدّ من الهدف".

bestBoundLimit

number

تتوقف أداة الحلّ في أقرب وقت بعد أن تتأكّد من أنّ الحدّ الأفضل هو على الأقل هذا الحدّ، وذلك مع سبب الإغلاق FEASIBLE أو NO_SOLUTION_FOUND والحدّ الأقصى المسموح به.

راجِع دليل المستخدم للاطّلاع على مزيد من التفاصيل والمقارنة مع حد أقصى نهائي.

solutionLimit

integer

تتوقف أداة الحلّ في وقت مبكر بعد العثور على هذه الحلول العديدة الممكنة، ويكون سبب الإنهاء سهل وحلّ محدود. يجب أن تكون القيمة أكبر من صفر في حال ضبطها. وغالبًا ما يتم استخدامها لجعل أداة الحلّ تتوقّف عند أول حلّ ممكن يتم العثور عليه. تجدر الإشارة إلى أنّه ما مِن ضمان على قيمة الهدف لأي من الحلول التي تم إرجاعها.

لا تعرض أدوات الحلّ عادةً حلولاً أكثر من حدّ الحلّ، ولكن لا يتم فرض ذلك باستخدام MathOpt، راجع أيضًا b/214041169.

تتوفّر هذه الميزة حاليًا في Gurobi وSCIP، وبالنسبة إلى CP-SAT فقط بالقيمة 1.

threads

integer

وفي حال ضبطها، يجب أن تكون القيمة >= 1.

randomSeed

integer

المصدر الأساسي لإنشاء الأرقام العشوائية الزائفة في أداة الحلّ الأساسية. يُرجى العِلم أنّ جميع أدوات الحلّ تستخدم أرقامًا عشوائية عشوائية لاختيار عناصر، مثل اضطراب في خوارزمية LP، وقواعد انفصال الحواجز، والإصلاحات الإرشادية. وقد يكون لهذا التغيير تأثير ملحوظ في سلوك أداة الحلّ.

مع أنّ جميع أدوات الحلّ لديها مفهوم البذور، ولكن يُرجى العِلم أنّ القيم الصالحة تعتمد على أداة الحلّ الفعلية. - 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_صح_VALUE_FOR_SOLVER, إعلان عشوائي)).

absoluteGapTolerance

number

مقياس تفاوت مثالي مطلق (في المقام الأول) لأدوات حل MIP.

GAP المطلق هي القيمة المطلقة للفرق بين: * القيمة الموضوعية لأفضل حل عملي تم العثور عليه، * الحد المزدوج الناتج عن البحث. يمكن أن تتوقف أداة الحلّ عند بلوغ قيمة GAP المطلقة على الأكثر قيمة absoluteGapTolerance (عند ضبطها)، وتعرض القيمة TERMINATION_REASON_optIMAL.

يجب أن تكون القيمة >= 0 في حال ضبطها.

يمكنك أيضًا الاطّلاع على المقدار الذي يتناسب مع gapTolerance.

relativeGapTolerance

number

التباين النسبي الأمثل (بشكل أساسي) لأدوات حل MIP.

GAP النسبي هي نسخة تمت تسويتها من GAP المطلق (مع تحديد قيمة absoluteGapTolerance)، حيث تعتمد التسوية على الحل، على سبيل المثال، قيمة GAP المطلقة مقسومة على القيمة الموضوعية لأفضل حل عملي تم العثور عليه.

يمكن أن تتوقف أداة الحلّ بمجرد وصول GAP النسبي إلى أقصى حد من نوع GapTolerance (عند الضبط)، وعرض TERMINATION_REASON_optIMAL.

يجب أن تكون القيمة >= 0 في حال ضبطها.

راجع أيضًا absoluteGapTolerance.

solutionPoolSize

integer

استفِد من solutionPoolSize حلول كحد أقصى أثناء البحث. بشكل عام، هناك دالتان لمجموعة الحلول: (1) بالنسبة للحلول التي يمكنها عرض أكثر من حل واحد، يحد هذا من عدد الحلول التي سيتم عرضها. (2) قد تقوم بعض أدوات الحلّ بأساليب إرشادية باستخدام حلول من مجموعة الحلول، لذلك قد يؤثر تغيير هذه القيمة على مسار الخوارزمية. لفرض ملء مجموعة الحلول، على سبيل المثال بأفضل عدد من الحلول، يتطلب ذلك إعدادًا إضافيًا خاصًا بالحلّ.

LPAlgorithmProto

تحدد هذه السمة خوارزمية لحل البرامج الخطية.

عمليات التعداد
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX الطريقة البسيطة (الأولية). يمكن أن تقدم عادةً الحلول الأولية والمزدوجة، والأشعة الأولية/الثنائية لحل المسائل الأولية/الثنائية غير المحدودة، والأساس.
LP_ALGORITHM_DUAL_SIMPLEX الطريقة المزدوجة البسيطة. يمكن أن تقدم عادةً الحلول الأولية والمزدوجة، والأشعة الأولية/الثنائية لحل المسائل الأولية/الثنائية غير المحدودة، والأساس.
LP_ALGORITHM_BARRIER طريقة الحاجز، والمعروفة أيضًا باسم طريقة النقطة الداخلية (IPM). يمكن أن يقدم عادة حلولاً أساسية وثنائية. يمكن لبعض عمليات التنفيذ أن تنتج أيضًا أشعة على مسائل غير محدودة/غير قابلة للتنفيذ. لا يتم تقديم أساس ما لم يتم إجراء "التقاطع" على أداة الحلّ الأساسية وتنتهي هذه العملية باستخدام رسالة بسيطة.
LP_ALGORITHM_FIRST_ORDER يشير ذلك المصطلح إلى خوارزمية تستند إلى طريقة من الدرجة الأولى. ستنتج عادةً هذه الحلول حلولاً بدائية وثنائية، وربما أيضًا شهادات عدم الجدوى الأولية و/أو المزدوجة. ستوفّر طرق الطلب الأول عادةً حلولاً ذات دقة أقل، لذلك يجب أن يحرص المستخدمون على ضبط مَعلَمات جودة الحلول (على سبيل المثال، السماحات) والتحقق من صحة الحلول.

EmphasisProto

مستوى الجهد الذي يتم تطبيقه على مهمة اختيارية أثناء الحل (انظر SolveParametersProto للاستخدام).

يتم استخدام التوكيد لضبط إعدادات أداة الحلّ على النحو التالي: * إذا لم تكن أداة الحلّ تتيح هذه الميزة، ستكون قيمة "UNSPECIFIED" فقط صالحة دائمًا، في حين يمثّل الإعداد الآخر عادةً خطأ في الوسيطة غير صالحة (قد تقبل بعض أدوات الحلّ أيضًا الإيقاف). * إذا كانت أداة الحلّ تتيح الميزة: - عند ضبط السياسة على UNSPECIFIED، يتم استخدام القيمة التلقائية الأساسية. - عندما يتعذر إيقاف تشغيل الميزة، سيعرض "إيقاف" رسالة خطأ. - إذا تم تفعيل الميزة تلقائيًا، يتم عادةً تعيين أداة الحلّ التلقائية على MEDIUM. - إذا كانت الميزة متوافقة، فلن تقدم الميزة أي أخطاء على الإطلاق، وهي "منخفضة" و"متوسطة" و"مرتفعة جدًا" و"مرتفعة جدًا" مطلقًا، وسيتم تعيينها إلى أفضل تطابق لها.

عمليات التعداد
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 وPrimalSolutionProto (PrimalSolutionProto.variable_values، PrimalRayProto.variable_values).

المتطلبات: * معرفات التصفية هي عناصر VariablesProto.ids.

dualValuesFilter

object (SparseVectorFilterProto)

فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والم الرئيسية بقيود خطية في DualSolutionProto وDualRay (DualSolutionProto.dual_values, DualRay.dual_values).

المتطلبات: * أرقام التعريف المفلتَرة هي عناصر من LinearConstraints.ids.

reducedCostsFilter

object (SparseVectorFilterProto)

فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والمحلية بمتغيرات في DualSolutionProto وDualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs).

المتطلبات: * معرفات التصفية هي عناصر VariablesProto.ids.

initialBasis

object (BasisProto)

أساس اختياري مبدئي لأدوات حلّ LP بسيطة وسريعة التشغيل. في حال ضبطها، من المتوقّع أن تكون صالحة وفقًا لـ ValidateBasis في validators/solution_validator.h لنظام ModelSummary الحالي.

solutionHints[]

object (SolutionHintProto)

تلميحات عن الحلول الاختيارية. إذا قبلت أداة الحلّ الأساسية تلميحًا واحدًا فقط، سيتم استخدام التلميح الأول.

branchingPriorities

object (SparseInt32VectorProto)

أولويات التشعّب الاختيارية. سوف تتفرع المتغيرات ذات القيم الأعلى أولاً. تحصل المتغيرات التي لم يتم ضبط أولوياتها على الأولوية التلقائية لأداة الحلّ (عادةً ما تكون صفرًا).

المتطلبات: * يجب أن تكون قيمة lineingpriities.values محدودة. * يجب أن تكون lineingPriorityities.ids ضمن عناصر VariablesProto.ids.

SparseVectorFilterProto

تسمح هذه الرسالة بالاستعلام عن/ضبط أجزاء معينة من SparseXxxxVector. السلوك التلقائي هو عدم فلترة أي محتوى. الاستخدام الشائع هو الاستعلام عن أجزاء الحلول فقط (القيم غير الصفرية فقط و/أو مجموعة مختارة بعناية من قيم المتغيرات).

تمثيل JSON
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
الحقول
skipZeroValues

boolean

بالنسبة إلى SpasesBoolVectorProto، فإن قيمة "zero" هي false.

filterByIds

boolean

عند الضبط على "صحيح"، يتم عرض القيم المقابلة لأرقام التعريف المدرَجة في معرّفات الكيانات المفلتَرة فقط.

filteredIds[]

string (int64 format)

قائمة المعرّفات المطلوب استخدامها عندما تكون قيمة filterByIds صحيحة. يجب أن يكون هذا الحقل فارغًا عندما تكون قيمة filterByIds خاطئة. ملاحظة: إذا كانت هذه السمة فارغة، وكانت قيمة filterByIds صحيحة، هذا يعني أنّك لا تريد تضمين أي معلومات في النتيجة.

BasisProto

يشير ذلك المصطلح إلى وصف اتحادي لحلّ برنامج خطي.

تعرض الطريقة البسيطة لحل البرامج الخطية دائمًا "حلاً أساسيًا عمليًا" يمكن وصفه بشكل مجمّع باستخدام أساس. يعيّن الأساس BasisStatusProto لكل متغير وقيد خطي.

على سبيل المثال، ضع في الاعتبار نموذج LP: minc * x s.t. A * x = b x >= 0 الذي يحتوي على متغيرات أكثر من القيود وبترتيب الصف بالكامل A.

لنفترض أن n تمثل عدد المتغيرات وm عدد القيود الخطية. يمكن إنشاء أساس صالح لهذه المشكلة على النحو التالي: * سيكون لجميع القيود حالة الأساس "FIXED". * اختر متغيرات m بحيث تكون أعمدة A مستقلة خطيًا ويتم تعيين الحالة BASIC. * حدِّد الحالة AT_LOWER للمتغيّرات المتبقية من النوع n إلى m.

يكون الحل الأساسي لهذا الأساس هو الحل الفريد A * x = b الذي يحتوي على جميع المتغيرات التي تكون حالتها AT_LOWER ثابتة إلى حدودها الدنيا (الكل صفر). يسمى الحل الناتج بالحل الأساسي المجدي إذا كان يفي أيضًا بـ x >= 0.

تمثيل JSON
{
  "constraintStatus": {
    object (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
الحقول
constraintStatus

object (SparseBasisStatusVector)

حالة أساس القيد.

المتطلبات: * RestricttStatus.ids تبلغ قيمة LinearConstraints.ids.

variableStatus

object (SparseBasisStatusVector)

حالة أساس متغير.

المتطلبات: * idetStatus.ids تساوي VariablesProto.ids.

basicDualFeasibility

enum (SolutionStatusProto)

هذه ميزة متقدّمة تستخدمها شركة MathOpt لوصف جدوى حلول LP الأفضل (ستظل للحلول المثالية الحالة SOLUTION_STATUS_FEASIBLE).

بالنسبة إلى LPs أحادية الاتجاه، يجب أن تكون مساوية لحالة الجدوى للحل الثنائي المرتبط. بالنسبة إلى LPs ذات الجانبين، قد يختلف الأمر في بعض الحالات الهامشية (على سبيل المثال، الحلول غير المكتملة باستخدام النظام الأساسي البسيط).

إذا كنت تقدم أساسًا للبدء من خلال ModelSolveParametersProto.initial_basis، يتم تجاهل هذه القيمة. وهي مرتبطة فقط بالأساس الذي يتم عرضه بواسطة SolutionProto.basis.

SparseBasisStatusVector

تمثيل متفرق لمتجه حالات الأساس.

تمثيل JSON
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
الحقول
ids[]

string (int64 format)

يجب ترتيبه (بترتيب متزايد) مع تضمين كل العناصر المميزة.

values[]

enum (BasisStatusProto)

يجب أن يساوي طول الصورة أرقام التعريف.

BasisStatusProto

حالة المتغيّر/القيد في أساس LP.

عمليات التعداد
BASIS_STATUS_UNSPECIFIED قيمة الحرس التي لا تمثّل حالة.
BASIS_STATUS_FREE المتغير/القيد حر (ليس له حدود محدودة).
BASIS_STATUS_AT_LOWER_BOUND المتغير/القيد في حده الأدنى (والذي يجب أن يكون محددًا).
BASIS_STATUS_AT_UPPER_BOUND يكون المتغير/القيد في حده الأعلى (والذي يجب أن يكون محددًا).
BASIS_STATUS_FIXED_VALUE لدى المتغير/القيد حد أدنى وحد أدنى متطابقان.
BASIS_STATUS_BASIC المتغير/القيد أساسي.

SolutionStatusProto

إمكانية التوصّل إلى حلّ أساسي أو ثنائي كما يدّعي الحلّ

عمليات التعداد
SOLUTION_STATUS_UNSPECIFIED قيمة الحرس التي لا تمثّل حالة.
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 هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم المتغيرValues.value محدودة.

dualValues

object (SparseDoubleVectorProto)

يشير ذلك المصطلح إلى عملية تحديد قيم (من المحتمل أن تكون جزئية) للقيم المستندة إلى القيود الخطيّة في المسألة.

المتطلبات: * dualValues.ids هي عناصر من LinearConstraintsProto.ids. * يجب أن تكون جميع قيم DualValues.value محدودة.

SparseInt32VectorProto

تمثيل متفرق لمتّجه من الأعداد الصحيحة.

تمثيل JSON
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
الحقول
ids[]

string (int64 format)

يجب فرزها (بترتيب متزايد) مع تمييز جميع العناصر.

values[]

integer

يجب أن يساوي طول الصورة أرقام التعريف.

SolveResultProto

عقد الحلول/الحلول الأولية/المزدوجة الذي يكون معقّدًا، يمكنك الانتقال إلى موقع End_reasons.md للحصول على وصف كامل.

وإلى أن يتم الانتهاء من العقد الدقيق، من الأسهل عليك التحقّق من توفّر حل أو عرض بشكلٍ أفضل بدلاً من الاعتماد على سبب الإنهاء.

تمثيل JSON
{
  "termination": {
    object (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
الحقول
termination

object (TerminationProto)

تمثّل هذه السمة سبب إيقاف أداة الحلّ.

solutions[]

object (SolutionProto)

العقد العام لترتيب الحلول التي يجب أن تنفذها أدوات الحلّ المستقبلية هو الترتيب حسب: 1. يشير ذلك المصطلح إلى الحلول ذات الحلول الأساسية الممكنة، والتي يتم ترتيبها حسب أفضل هدف أساسي أولاً. 2. يشير ذلك المصطلح إلى الحلول ذات الحلول المزدوجة الممكنة، والمرتبة حسب أفضل هدف ثنائي (الهدف المزدوج غير المعروف هو الأسوأ). 3. يمكن إرجاع كل الحلول المتبقية بأي ترتيب.

primalRays[]

object (PrimalRayProto)

تمثّل هذه السمة إرشادات التحسين الأساسي غير المحدود، أو شهادات عدم دراسة قابلية التنفيذ المزدوجة. يتم توفيره عادةً لسبب الإنهاء Protos UNboundED وDUAL_INFEASIBLE

dualRays[]

object (DualRayProto)

تمثّل هذه السمة إرشادات التحسين الثنائي غير المحدود، أو شهادات عدم الإمكانية الأساسية المكافئة. يتم توفيره عادةً لسبب الإنهاء مهامProto 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، قد تكون هذه الرسالة غير متوفّرة. في حال عدم توفّر المشكلة، يمكن العثور علىProblemStatus في SolveResultProto.solve_stats.

objectiveBounds

object (ObjectiveBoundsProto)

يقتصر على قيمة الهدف الأمثل. اعتبارًا من 18 تموز (يوليو) 2023، قد تكون هذه الرسالة غير متوفّرة. في حال عدم وجود هذه السمة، يمكن العثور على sampleBounds.primal_bound في SolveProto.solve.stats.best_primal_bound ويمكن العثور على objectBounds.dual_bound في SolveResultProto.solve.stats.best_dual_bound

TerminationReasonProto

سبب إنهاء الاستدعاء إلى Solve().

عمليات التعداد
TERMINATION_REASON_UNSPECIFIED
TERMINATION_REASON_OPTIMAL تم العثور على حل مثالي يمكن إثباته (يصل إلى حالات التفاوت العددي).
TERMINATION_REASON_INFEASIBLE المشكلة الأساسية ليس لها حلول مجدية.
TERMINATION_REASON_UNBOUNDED المسألة الأساسية هي مجدية ويمكن إيجاد حلول جيدة عشوائيًا على طول الأشعة الأولية.
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED المشكلة الرئيسية إما غير قابلة للتنفيذ أو غير محدودة. قد يتوفّر مزيد من التفاصيل حول حالة المشكلة فيresolveStats.problem_status. تجدر الإشارة إلى أنّه قد يتم ربط حالة Gurobi غير المرتبطة هنا.
TERMINATION_REASON_IMPRECISE

تم حل المشكلة وفقًا لأحد المعايير المذكورة أعلاه (مثلي، أو غير ممكن، أو غير محدود، أو غير قابل للتحقيق أو غير محدود)، ولكن لم يتم استيفاء واحد أو أكثر من القيم. توجد بعض الحلول/الأشعة الأولية/المزدوجة، ولكنها إما ستكون غير ممكنة قليلاً، أو (إذا كانت المشكلة هي المثالية تقريبًا) قد تكون فجوة بين هدف الحل الأفضل وأفضل حد موضوعي.

لا يزال بإمكان المستخدمين الاستعلام عن الحلول/الحلول/الحلول المزدوجة وإحصاءات الحلول، لكنهم مسؤولون عن التعامل مع مدى الدقة العددي.

TERMINATION_REASON_FEASIBLE وصل المحسن إلى حد ما وتم عرض حل عملي أوّلي. يُرجى الاطّلاع على SolveResultProto.limit_detail للحصول على وصف تفصيلي لنوع الحد الأقصى الذي تم الوصول إليه.
TERMINATION_REASON_NO_SOLUTION_FOUND وصل برنامج تحسين الأداء إلى حد ما ولم يجد حلًا أوّليًا عمليًا. يُرجى الاطّلاع على SolveResultProto.limit_detail للحصول على وصف تفصيلي لنوع الحد الأقصى الذي تم الوصول إليه.
TERMINATION_REASON_NUMERICAL_ERROR توقفت الخوارزمية بسبب حدوث خطأ عددي غير قابل للإصلاح. لا تتوفّر أي معلومات عن الحلّ.
TERMINATION_REASON_OTHER_ERROR توقفت الخوارزمية بسبب خطأ غير وارد في إحدى الحالات المحددة أعلاه. لا تتوفّر أي معلومات عن الحلّ.

LimitProto

عند توقف Solve() في وقت مبكر باستخدام تسويةreasonProto FEASIBLE أو NO_SOLUTION_FOUND، يكون الحد المحدد الذي تم الوصول إليه.

عمليات التعداد
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 عندما يكون السبب معروفًا ولكن لا يتناسب مع أي من البدائل المذكورة أعلاه.

قد يحتوي إنهاء Proto.detail على معلومات إضافية حول الحد.

ProblemStatusProto

حالة الاحتمالية للمشكلة الأساسية وازدواجها (أو ازدواجية الاسترخاء المستمر) كما يدّعي برنامج الحلّ. ليس مطلوبًا من أداة الحلّ إرسال شهادة للمطالبة (على سبيل المثال، قد يدّعي أداة الحلّ المطالبة بالجدوى الأساسية بدون عرض حل مجدٍ ممكن). تقدّم هذه الحالة المجمّعة وصفًا شاملاً لادعاءات القائم بالحلّ حول إمكانية حلّ المشكلة التي تم حلها وعدم حدودها. على سبيل المثال:

  • تشير الحالة الممكنة للمسائل الأولية والمزدوجة إلى أنّ المستوى الأولي ممكن ومحدود ومن المحتمل أن يكون له الحل الأمثل (مضمون للمشكلات بدون قيود غير خطية).
  • الحالة الأساسية الممكنة، والحالة المزدوجة غير المستحيلة تشير إلى أن المشكلة الأساسية غير محدودة (أي أن لها حلول جيدة عشوائيًا).

لاحظ أن الحالة المزدوجة غير القابلة للتنفيذ في حد ذاتها (أي التي تكون مصحوبةً بالحالة الأولية غير المحددة) لا يعني أن المشكلة الأولية غير محدودة؛ لأنه يمكن أن يكون لدينا كلتا المشكلتين غير ممكنتين. وعلى الرغم من أنّ الحالة الأولية والمزدوجة قد تشير إلى توفّر الحلّ الأمثل، لا تضمنها أنّ أداة الحلّ قد عثرت على هذا الحل الأمثل.

تمثيل JSON
{
  "primalStatus": enum (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
الحقول
primalStatus

enum (FeasibilityStatusProto)

حالة المشكلة الأساسية

dualStatus

enum (FeasibilityStatusProto)

حالة المشكلة المزدوجة (أو لثنائيات الاسترخاء المستمر).

primalOrDualInfeasible

boolean

إذا كان الحلّ صحيحًا، يدّعي الحلّ أنّ المشكلة الأساسية أو المزدوجة غير قابلة للتنفيذ، ولكنّه لا يعرف أيًا منها (أو إذا كان كلاهما غير ممكن). يمكن أن يكون صحيحًا فقط عندما primal_problem_status = dual_problem_status = kUndetermined. غالبًا ما تكون هذه المعلومات الإضافية مطلوبة عندما تحدد المعالجة المسبقة أنه لا يوجد حل مثالي للمشكلة (ولكن لا يمكن تحديد ما إذا كان ذلك بسبب عدم التمكن أو عدم الحدود أو كليهما).

FeasibilityStatusProto

حالة إمكانية حلّ المشكلة كما طالبت أداة الحلّ (لا يُشترط على الحلّ تقديم شهادة للمطالبة)

عمليات التعداد
FEASIBILITY_STATUS_UNSPECIFIED قيمة الحرس التي لا تمثّل حالة.
FEASIBILITY_STATUS_UNDETERMINED لا يطالب برنامج الحلّ بالحالة.
FEASIBILITY_STATUS_FEASIBLE يدّعي الحلّ أنّ المشكلة مجدية.
FEASIBILITY_STATUS_INFEASIBLE يدّعي الحلّ أنّ المشكلة غير قابلة للتطبيق.

ObjectiveBoundsProto

يقتصر على قيمة الهدف الأمثل.

تمثيل JSON
{
  "primalBound": number,
  "dualBound": number
}
الحقول
primalBound

number

يدّعي أداة الحلّ أنّ القيمة المثلى تساوي أو أفضل (أصغر للتصغير وأكبر لتكبيرها) من primalBound لحدود الاحتمالية الأساسية للحلّ (اطّلِع على التحذير أدناه): * primalBound تافهة (+inf لتصغير وتكبير -inf) عندما لا يدّعي حلّ الحلّ لديه هذا الحدّ. * primalBound يمكن أن يكون أقرب إلى القيمة المثلى من هدف أفضل حل بدائي عملي. وعلى وجه الخصوص، قد يكون primalBound غير بسيط حتى في حال عدم عرض أي حلول بدائية مجدية. تحذير: الادّعاء الدقيق بأنّ هناك حل أولي: * ممكن رقميًا (أي ممكن حسب مقدار التفاوت في أدوات الحلّ)، ويحتوي * على قيمة موضوعية primalBound. قد يكون هذا الحل الممكن من الناحية الرقمية غير ممكن إلى حد ما، وفي هذه الحالة يمكن أن يكون primalBound أفضل تمامًا من القيمة المثلى. إنّ ترجمة مدى تفاوت دراسة الجدوى الأساسي إلى مقدار تفاوت معيَّن في primalBound ليس أمرًا تافهًا، خاصةً عندما يكون مقدار تفاوت دراسة الجدوى كبيرًا نسبيًا (على سبيل المثال، عند الحل باستخدام PDLP).

dualBound

number

يدّعي أداة الحلّ أنّ القيمة المُثلى تساوي أو أسوأ (أكبر من أجل تقليص القيمة وأصغر حجمًا للتكبير) من القيمة المزدوجة التي تصل إلى أداة الحلّ وفقًا للاحتمالية المزدوجة للقدرة على الحلّ (اطّلِع على التحذير أدناه): * تُعتبَر قيمة Dubound بسيطة (-inf لتصغيرها وتكبيرها) عندما لا يدّعي حلّ الحلّ أنّه لديه هذا الحدّ. على غرار primalBound، قد يحدث ذلك لبعض أدوات الحلّ حتى عند عرض القيمة المثلى. عادةً ما تُبلِغ أدوات حلّ MIP عن حدّ حتى إذا كان غير دقيق. * بالنسبة إلى المشكلات المستمرة، يمكن أن يكون DueBound أقرب إلى القيمة المثلى من هدف أفضل حل ثنائي ممكن. بالنسبة إلى MIP، فإن إحدى القيم الأولى غير البسيطة لـ DualBound غالبًا ما تكون القيمة المثلى لتخفيف LP لـ MIP. * يجب أن تكون قيمة DualBound أفضل (أصغر حجمًا للتصغير وأكبر لتكبيرها) من primalBound وصولاً إلى القيم المسموح بها للحلّ (اطّلِع على التحذير أدناه). تحذير: * بالنسبة إلى المسائل المستمرة، يكون الادّعاء الدقيق هو توفّر حل مزدوج: * ممكن رقميًا (أي ممكن حسب مقدار التفاوت في أدوات الحلّ)، و * يحتوي على قيمة موضوعية مزدوجة باوند. قد يكون هذا الحل الممكن من الناحية الرقمية غير ممكن إلى حد ما، وفي هذه الحالة يمكن أن يكون DueBound أسوأ تمامًا من القيمة المثلى وprimalBound. على غرار الحالة الأولية، فإن ترجمة مدى تفاوت دراسة الجدوى إلى مقدار تفاوت معيَّن على ثنائي باوند ليس أمرًا بسيطًا، خاصةً عندما يكون مقدار تفاوت الاحتمالية كبيرًا نسبيًا. ومع ذلك، توفِّر بعض أدوات الحلّ إصدارًا مصحّحًا من DualBound يمكن أن يكون أكثر أمانًا من الناحية الرقمية. يمكن الوصول إلى هذا الإصدار المصحَّح من خلال المُخرجات المحدّدة لأداة الحلّ (على سبيل المثال، ميزة PDLP وpdlp_output.convergence_information. corrected_dual_objective). * بالنسبة إلى أدوات حلّ مشاكل MIP، قد يتم ربط Dubound بحلّ ثنائي من أجل الاسترخاء المستمر (على سبيل المثال، الاسترخاء الناتج عن LP)، ولكن غالبًا ما يكون نتيجة معقّدة لتنفيذ أدوات الحلّ وتكون عادةً أكثر دقة من الحدود التي توفّرها أدوات الحلّ.

SolutionProto

يعتمد ما يتم تضمينه في الحل على نوع المشكلة والحل. الأنماط الشائعة الحالية هي 1. لا تعرض أدوات حلّ MIP سوى الحل الأساسي. 2. غالبًا ما تُرجع أدوات حل LP البسيطة أساسًا والحلول الأولية والثنائية المرتبطة بهذا الأساس. 3- غالبًا ما تعرض أدوات الحلّ المستمرة الأخرى حلاً أوليًا وثنائيًا يتم ربطه بصيغة تعتمد على تلك الأداة.

المتطلبات: * يجب ضبط حقل واحد على الأقل، ولا يمكن أن يكون الحل فارغًا.

تمثيل JSON
{
  "primalSolution": {
    object (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
الحقول
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

PrimalSolutionProto

حل لمشكلة في التحسين.

على سبيل المثال، ضع في الاعتبار برنامجًا خطيًا بسيطًا: الحد الأدنى c * x s.t. A * x >= b x >= 0. الحل الأساسي هو قيم التعيين إلى س. من الممكن تحقيقه إذا كانت تتوافق مع A * x >= b و x >= 0 من أعلاه. في الرسالة PrimalSolutionProto أدناه، تكون sortValues هي x و objectValue هي c * x.

تمثيل JSON
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
الحقول
variableValues

object (SparseDoubleVectorProto)

المتطلبات: * المتغيرValues.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم المتغيرValues.value محدودة.

objectiveValue

number

القيمة الموضوعية وفقًا لحسابها من خلال أداة الحلّ الأساسية. لا يمكن أن تكون قيمة غير محدودة أو غير فارغة.

auxiliaryObjectiveValues

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

تمثّل هذه السمة القيم الهدف الإضافية التي يتم احتسابها من خلال أداة الحلّ الأساسية. يجب أن تكون المفاتيح أرقام تعريف أهداف إضافية صالحة. لا يمكن أن تكون القيم لانهائية أو NaN.

عنصر يحتوي على قائمة من أزواج "key": value. مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" }

feasibilityStatus

enum (SolutionStatusProto)

تشير هذه السمة إلى حالة إمكانية الحلّ وفقًا للأداة الأساسية.

DualSolutionProto

حل للمعادلات المزدوجة لمشكلة التحسين.

على سبيل المثال، ضع في الاعتبار زوج البرنامج الخطي الثنائي الأساسي: (أساسي) (ثنائي) الحدّ الأدنى c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. الحل الثنائي هو الزوج (y, r). ويمكن تحقيقه إذا استوفى القيود المفروضة من (ثنائي) أعلاه.

في الرسالة أدناه، ص هي DualValues، وr هي discountCosts، وb * y هي قيمة موضوعية.

تمثيل JSON
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
الحقول
dualValues

object (SparseDoubleVectorProto)

المتطلبات: * dualValues.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع قيم DualValues.value محدودة.

reducedCosts

object (SparseDoubleVectorProto)

المتطلبات: * minCosts.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم shoppingCosts.values محدودة.

feasibilityStatus

enum (SolutionStatusProto)

تشير هذه السمة إلى حالة إمكانية الحلّ وفقًا للأداة الأساسية.

objectiveValue

number

PrimalRayProto

يشير ذلك المصطلح إلى اتجاه تحسين غير محدود لمشكلة تحسين، وهو ما يعادل ذلك شهادة عدم الجدوى لمضاعفة مشكلة التحسين.

على سبيل المثال، ضع في الاعتبار برنامجًا خطيًا بسيطًا: min c * x s.t. A * x >= b x >= 0 A primal ray هو x الذي يفي بـ: c * x < 0 A * x >= 0 x >= 0 لاحظ أنه إذا أعطينا حلاً لا يزال قابلاً للتطبيق، فإن أي مضاعف موجب لـ Primal حصل، كما يثبت الشعاع الأولي أن مشكلة التحسين المزدوج غير مجدية.

في رسالة PrimalRay أدناه، تكون valueValues هي x.

تمثيل JSON
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  }
}
الحقول
variableValues

object (SparseDoubleVectorProto)

المتطلبات: * المتغيرValues.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم المتغيرValues.value محدودة.

DualRayProto

يشير ذلك المصطلح إلى توجيه تحسين غير محدود إلى ثنائي تحسين أو مشكلة، أي شهادة عدم جدوى أساسية.

على سبيل المثال، ضع في الاعتبار زوج البرنامج الخطي الثنائي الأساسي: (أساسي) (ثنائي) الحدّ الأدنى 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) إلى حل ممكن ثنائي يحافظ على الجدوى المزدوجة ويحسن الهدف (إثبات عدم وجود قيود). كما يثبت الأشعة المزدوجة أن المشكلة الرئيسة غير قابلة للتنفيذ.

في رسالة DualRay أدناه، تكون y هي DualValues وr هي shoppingCosts.

تمثيل JSON
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
الحقول
dualValues

object (SparseDoubleVectorProto)

المتطلبات: * dualValues.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع قيم DualValues.value محدودة.

reducedCosts

object (SparseDoubleVectorProto)

المتطلبات: * minCosts.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم shoppingCosts.values محدودة.

SolveStatsProto

تمثيل JSON
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
الحقول
solveTime

string (Duration format)

الوقت المنقضي على الحائط كما تم قياسه باستخدامMath_opt، وهو الوقت التقريبي داخل Solver::Solve(). ملاحظة: لا يشمل ذلك العمل المنجز في إنشاء النموذج.

مدة بالثواني يصل عددها إلى تسعة أرقام كسرية وتنتهي بـ "s". مثال: "3.5s".

problemStatus

object (ProblemStatusProto)

حالات الإمكانيات للمسائل الأولية والمزدوجة.

simplexIterations

string (int64 format)

barrierIterations

string (int64 format)

firstOrderIterations

string (int64 format)

nodeCount

string (int64 format)