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)

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

modelParameters

object (ModelSolveParametersProto)

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

نص الاستجابة

استجابة لحل أحادي عن بُعد في MathOpt.

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

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

object (SolveResultProto)

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

messages[]

string

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

SolverTypeProto

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

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

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

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

SOLVER_TYPE_GUROBI

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

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

SOLVER_TYPE_GLOP

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

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

SOLVER_TYPE_CP_SAT

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

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

SOLVER_TYPE_PDLP

أداة حل PDLP من Google.

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

SOLVER_TYPE_GLPK

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

يدعم MIP و LP.

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

عند حل المحلول الفينولي باستخدام المُحلِّل، لا يتم إرجاع المحلول (والشعاع غير المرتبط) إلا إذا تم العثور على الحلّ الأمثل. وإلا، لن يتم إرجاع أي شيء. راجع 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

The HiGHS Solver (طرف ثالث)

دعم مشاكل LP وMIP (وحدات QP المحدبة غير قابلة للتنفيذ).

SOLVER_TYPE_SANTORINI

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

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

ModelProto

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

بشكل افتراضي، يتم تمثيل القيود في "id-to-data" خرائط Google. ومع ذلك، نمثل القيود الخطية في "هيكل صفيف" أكثر كفاءة .

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

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

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

المتطلبات: * LineConstraintMatrix.row_ids هي عناصر من lineConstraints.ids. * lineConstraintMatrix.column_ids هي عناصر من فرص المتغيّرات.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. تكون القيمة خاطئة للمتغيرات المستمرة وصحيحة لمتغيرات الأعداد الصحيحة.

names[]

string

وإذا لم يتم ضبطها، يُفترض أن تكون جميع السلاسل الفارغة. بخلاف ذلك، يجب أن يكون الطول يساوي #variables.

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

ObjectiveProto

تمثيل JSON
{
  "maximize": boolean,
  "offset": number,
  "linearCoefficients": {
    object (SparseDoubleVectorProto)
  },
  "quadraticCoefficients": {
    object (SparseDoubleMatrixProto)
  },
  "name": string,
  "priority": string
}
الحقول
maximize

boolean

false هو تصغير، صواب هو مضاعفة

offset

number

يجب أن تكون محدودة وليست NaN.

linearCoefficients

object (SparseDoubleVectorProto)

مصطلحات ObjectiveProto الخطية في متغيرات القرار.

المتطلبات: * inlineCoefficients.ids هي عناصر من VariablesProto.ids. * VariablesProto غير محدد تتجاوب مع الصفر. * يجب أن تكون جميع قيم المعاملات الخطية محدودة. * يمكن أن تكون قيم المعاملات الخطية صفرًا، ولكن هذا يؤدي فقط إلى إهدار المساحة.

quadraticCoefficients

object (SparseDoubleMatrixProto)

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

المتطلبات بالإضافة إلى المتطلبات الواردة في رسائل Spirse DoubleMatrixProto: * يجب أن يكون كل عنصر من عناصر quadraticCoefficients.row_ids وكل عنصر من عناصر quadraticCoefficients.column_ids عنصرًا من عناصر VariablesProto.ids. * يجب أن تكون المصفوفة مثلثًا علويًا لكل i، quadraticCoefficients.row_ids[i] <= quadraticCoefficients.column_ids[i].

ملاحظات: * العبارات غير المخزنة بشكل صريح لها معامل صفر. * يمكن أن تكون عناصر quadraticCoefficients.coمعامِلات صفرًا، ولكن هذا يؤدي فقط إلى إهدار المساحة.

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], columnId[i]) مختلفًا. يجب أن تكون الإدخالات بالترتيب الرئيسي للصف.

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

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

قد لا يحتوي على NaN.

LinearConstraintsProto

كما هو موضح أدناه، نعرّف "#القيود الخطية" = size(LinearConstraintsProto.ids).

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

string (int64 format)

يجب ألا تكون القيمة سالبة وأن ترتفع بشكل صارم. لا يمكن استخدام قيمة max(int64).

lowerBounds[]

number

يجب أن يكون الطول مساويًا للقيود الخطية #، والقيم في [ -inf، inf).

upperBounds[]

number

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

names[]

string

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

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

QuadraticConstraintProto

قيد تربيعي واحد بالصيغة: lb <= sum{ التحقّق من البنود} + الجمع {quadratic terms} <= ub

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

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

object (SparseDoubleVectorProto)

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

بالإضافة إلى المتطلبات المتعلقة برسائل Spirse DoubleVectorProto، نحتاج إلى ما يلي: * characterTerm.ids عبارة عن عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم منهجية محدودة (منهجية) محدودة وليست بتنسيق NaN.

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

quadraticTerms

object (SparseDoubleMatrixProto)

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

بالإضافة إلى المتطلبات المتعلّقة برسائل Spirse DoubleMatrixProto، يجب توفير ما يلي: * يجب أن يكون كل عنصر من عناصر quadraticTerm.row_ids وكل عنصر من عناصر quadraticTerm.column_ids عنصرًا من عناصر VariablesProto.ids. * يجب أن تكون المصفوفة مثلثية الشكل العليا: لكل i، quadraticTerm.row_ids[i] <= quadratic terms.column_ids[i].

ملاحظات: * العبارات غير المخزنة بشكل صريح لها معامل صفر. * يمكن أن تكون عناصر quadraticTerm.costructs صفرًا، ولكن هذا يؤدي فقط إلى إهدار المساحة.

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) ◄ الحدّ الأدنى <= التعبير <= الطابع الأعلى

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

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

boolean

إذا كانت القيمة هي "صحيح"، يجب أن يكون القيد الضمني مُطبَّقًا إذا أخذ متغيّر المؤشر القيمة 0. بخلاف ذلك، إذا أخذ متغيّر المؤشر القيمة 1، يجب أن يحتفظ القيد الضمني بالقيمة 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

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

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

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

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

يتم تمرير المَعلمات التي تعتمد على النموذج (على سبيل المثال، تحديد أولوية التشعّب لكل متغيّر) في 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، سيتم تسجيل الدخول(INFO).

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

lpAlgorithm

enum (LPAlgorithmProto)

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

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

presolve

enum (EmphasisProto)

جهد تبسيط المشكلة قبل بدء الخوارزمية الرئيسية، أو مستوى الجهد التلقائي لأداة حلّ الحلّ في حال الخطأ FEATURE_UNSPECIFIED.

cuts

enum (EmphasisProto)

الجهود المبذولة لتخفيف قيود LP فقط (MIP فقط)، أو مستوى الجهد التلقائي لأداة الحلّ في حال MINUTES_UNSPECIFIED.

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

heuristics

enum (EmphasisProto)

الجهود المبذولة لإيجاد حلول مجدية غير تلك التي تمت مصادفتها في إجراء البحث الكامل (MIP فقط)، أو مستوى الجهد التلقائي للحل في حال MINUTES_UNSPECIFIED.

scaling

enum (EmphasisProto)

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

iterationLimit

string (int64 format)

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

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

nodeLimit

string (int64 format)

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

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

cutoffLimit

number

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

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

يوصى باستخدام مقدار تفاوت معيَّن إذا كنت ترغب في إرجاع حلول ذات هدف يساوي تمامًا الموعد النهائي.

راجِع دليل المستخدم للحصول على مزيد من التفاصيل وللمقارنة مع bestBoundLimit.

objectiveLimit

number

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

bestBoundLimit

number

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

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

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, SpamSeed)).

absoluteGapTolerance

number

يشير ذلك المصطلح إلى تسامح مثالي مطلق (بشكل أساسي) لأدوات حل MIP.

GAP المطلقة هي القيمة المطلقة للفرق بين: * القيمة الموضوعية لأفضل حل ممكن تم العثور عليه، * الحد الثنائي الناتج عن البحث. يمكن أن تتوقف أداة الحلّ بمجرد وصول GAP المطلق إلى أقصى حد لـ GapTolerance (عند الضبط)، وعرض TERMINATION_REASON_OPTIMAL.

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

راجع أيضًا مقياس التسامح النسبي.

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

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

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

عمليات التعداد
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).

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

dualValuesFilter

object (SparseVectorFilterProto)

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

المتطلبات: * filterId هي عناصر من LinearConstraints.ids.

reducedCostsFilter

object (SparseVectorFilterProto)

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

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

initialBasis

object (BasisProto)

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

solutionHints[]

object (SolutionHintProto)

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

branchingPriorities

object (SparseInt32VectorProto)

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

المتطلبات: * يجب أن تكون قيمة السمة التحقّق (الأولوية) محدودة. * يجب أن تكون عناصر التحقّق من أوجه الاختلاف بين عناصر واجهة برمجة التطبيقات VariablesProto.ids.

SparseVectorFilterProto

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

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

boolean

لـ SpirseBoolVectorProto "zero" false.

filterByIds

boolean

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

filteredIds[]

string (int64 format)

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

BasisProto

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

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

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

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

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

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

object (SparseBasisStatusVector)

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

المتطلبات: * RestricttStatus.ids تساوي LinearConstraints.ids.

variableStatus

object (SparseBasisStatusVector)

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

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

basicDualFeasibility

enum (SolutionStatusProto)

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

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

إذا كنت تقدم أساس البدء من خلال modelSolveparamsProto.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 المستندة إلى Simplex الأساس الأولي إلى تلميح الحل (يجب أن تؤدي إلى التبديل لتحويل التلميح إلى حل أساسي عملي بخلاف ذلك).

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

object (SparseDoubleVectorProto)

ربما تخصيص جزئي لقيم للمتغيرات الأساسية في المشكلة. المتطلبات المستقلة للحل لهذه الرسالة الفرعية هي: * VariableValues.ids هي عناصر VariablesProto.ids. * يجب أن تكون جميع قيمة المتغيّرValues.values محدودة.

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)

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

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، قد لا تظهر هذه الرسالة. إذا لم يتم العثور على مشكلة، يمكن العثور على توفّرها في SolveResultProto.solve_stats.

objectiveBounds

object (ObjectiveBoundsProto)

القيود على القيمة الموضوعية المثلى. اعتبارًا من 18 تموز (يوليو) 2023، قد لا تظهر هذه الرسالة. إذا لم يتم تحديد قيمة، يمكن العثور على objectBounds.primal_bound في SolveResultProto.solve.stats.best_primal_bound وtopicBounds.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 المشكلة الأساسية إما غير قابلة للتنفيذ أو غير محدودة. قد تتوفّر المزيد من التفاصيل حول حالة المشكلة في SolStats.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() مبكرًا مع FinishreasonProto FEASIBLE أو NO_SOLUTION_FOUND، الحدّ الأقصى الذي تم الوصول إليه.

عمليات التعداد
LIMIT_UNSPECIFIED يتم استخدامها كقيمة فارغة عند إنهاء الاتفاقية ليس من حدود حد (مثل TERMINATION_REASON_OPTIMAL).
LIMIT_UNDETERMINED لا تكشف أداة الحلّ الأساسية عن الحدّ الذي تم بلوغه.
LIMIT_ITERATION توقف خوارزمية تكرارية بعد إجراء الحد الأقصى لعدد التكرارات (على سبيل المثال التكرارات البسيطة أو الحاجزة).
LIMIT_TIME توقفت الخوارزمية بعد وقت الحساب الذي حدده المستخدم.
LIMIT_NODE توقفت خوارزمية "فرع وربط" بسبب استكشافها للحد الأقصى لعدد العُقد في شجرة الروابط والارتباطات.
LIMIT_SOLUTION توقفت الخوارزمية لأنها وجدت عدد الحلول المطلوب. وغالبًا ما يستخدم هذا في ملفات MIPs لجعل أداة الحل تعرض أول حل ممكن مصادفتها.
LIMIT_MEMORY توقفت الخوارزمية بسبب نفاد الذاكرة.
LIMIT_CUTOFF تم تشغيل أداة الحلّ مع تحديد قيمة فاصلة (على سبيل المثال، تم ضبط Solveparams.cutoff_limit) على الهدف، ما يشير إلى أنّ المستخدم لا يريد أيّ حلّ أسوأ من الموعد النهائي، وتوصّلت أداة الحلّ إلى أنّه لا تتوفّر حلول على الأقل عالية الجودة. وفي العادة، لا يتم تقديم معلومات إضافية عن الحلول.
LIMIT_OBJECTIVE توقفت الخوارزمية لأنها إما عثرت على حل أو حد أفضل من الحد الذي حدده المستخدم (راجع Solveparams.objective_limit و Solveparameters.best_bound_limit).
LIMIT_NORM توقفت الخوارزمية لأن قاعدة التكرار أصبحت كبيرة جدًا.
LIMIT_INTERRUPTED توقفت الخوارزمية بسبب إشارة مقاطعة أو طلب مقاطعة من المستخدم.
LIMIT_SLOW_PROGRESS توقفت الخوارزمية لأنها لم تتمكن من مواصلة إحراز تقدم نحو الحل.
LIMIT_OTHER

توقفت الخوارزمية بسبب حد لا يشمله أحد العناصر المذكورة أعلاه. تجدر الإشارة إلى أنّه يتم استخدام LIMIT_UNDETERMINED عندما يتعذّر تحديد السبب، وLIMIT_OTHER تُستخدَم عندما يكون السبب معروفًا ولكنّه لا يندرج ضمن أي من البدائل المذكورة أعلاه.

قد تحتوي FinishProto.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 = kUnUnused. غالبًا ما تكون هذه المعلومات الإضافية مطلوبة عندما تحدد مرحلة المعالجة المسبقة عدم وجود حل مثالي للمشكلة (ولكن لا يمكن تحديد ما إذا كان السبب يعود إلى عدم الجدوى أو العدم الحد أو كليهما).

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

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

SolutionProto

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

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

تمثيل 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 x >= b وx >= 0 أعلاه. في الرسالة PrimalSolutionProto أدناه، وهي قيمةVariableValues هي x وsubjectValue هي c * x.

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

object (SparseDoubleVectorProto)

المتطلبات: * VariableValues.ids هي عناصر VariablesProto.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

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

مثلاً: بالنظر إلى زوج البرنامج الخطي الثنائي الأولي: (Primal) (Dual) 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 هي DualValues، و r هي انخفاضCosts، و 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)

المتطلبات: * lessCosts.ids هي عناصر VariablesProto.ids. * يجب أن تكون جميع القيم المخفّضة التكلفة محدودة.

feasibilityStatus

enum (SolutionStatusProto)

حالة إمكانية تنفيذ الحلّ وفقًا لأداة الحلّ الأساسية

objectiveValue

number

PrimalRayProto

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

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

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

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

object (SparseDoubleVectorProto)

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

DualRayProto

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

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

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

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

object (SparseDoubleVectorProto)

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

reducedCosts

object (SparseDoubleVectorProto)

المتطلبات: * lessCosts.ids هي عناصر VariablesProto.ids. * يجب أن تكون جميع القيم المخفّضة التكلفة محدودة.

SolveStatsProto

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

string (Duration format)

الوقت المنقضي لساعة الحائط كما تم قياسه بواسطة weather_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)