Package google.research.optimization.v1.mathopt

الفهرس

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.

الحقول
constraint_status

SparseBasisStatusVector

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

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

variable_status

SparseBasisStatusVector

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

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

basic_dual_feasibility

SolutionStatusProto

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

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

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

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 المتغير/القيد أساسي.

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 هي "Double_values" وr مضبوطة على "تقليل_التكاليف".

الحقول
dual_values

SparseDoubleVectorProto

المتطلبات: * dual_values.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة.

reduced_costs

SparseDoubleVectorProto

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

DualSolutionProto

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

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

في الرسالة أدناه، y هي dual_values، وr تساوي drop_costs، وb * y هي قيمة موضوعية.

الحقول
dual_values

SparseDoubleVectorProto

المتطلبات: * dual_values.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة.

reduced_costs

SparseDoubleVectorProto

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

feasibility_status

SolutionStatusProto

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

objective_value

double

EmphasisProto

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

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

عمليات التعداد
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

FeasibilityStatusProto

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

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

IndicatorConstraintProto

بيانات تمثل قيد مؤشر واحد على النحو التالي: Variable(indicator_id) = (activate_on_zero ? 0 : 1) \n أقل_bound <= التعبير <= upper_bound.

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

الحقول
activate_on_zero

bool

إذا كان true، فعندئذ إذا أخذ متغير المؤشر القيمة 0، فيجب أن يخضع القيد الضمني. بخلاف ذلك، إذا أخذ متغير المؤشر القيمة 1، فيجب أن يظل القيد الضمني ثابتًا.

expression

SparseDoubleVectorProto

يجب أن يكون تعبيرًا خطيًا صالحًا في ما يتعلق بالنموذج الذي يتضمّن ذلك: * جميع الشروط المذكورة في SparseDoubleVectorProto، * يجب أن تكون جميع عناصر expression.values محدودة، * expression.ids هي مجموعة فرعية من VariablesProto.ids.

lower_bound

double

يجب أن تحتوي على قيمة بتنسيق [-inf, inf؛ ولا يمكن أن تكون NaN.

upper_bound

double

يجب أن تكون القيمة داخل (-inf, inf]، ولا يمكن أن تكون NaN.

name

string

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

indicator_id

int64

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

LPAlgorithmProto

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

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

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 على معلومات إضافية حول الحد.

LinearConstraintsProto

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

الحقول
ids[]

int64

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

lower_bounds[]

double

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

upper_bounds[]

double

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

names[]

string

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

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

LinearExpressionProto

تمثيل متفرق لتعبير خطي (مجموع مرجّح للمتغيرات، بالإضافة إلى إزاحة ثابتة).

الحقول
ids[]

int64

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

coefficients[]

double

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

offset

double

يجب أن يكون محدودًا ولا يمكن أن يكون NaN.

ModelProto

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

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

الحقول
name

string

variables

VariablesProto

objective

ObjectiveProto

الهدف الأساسي في النموذج.

auxiliary_objectives

map<int64, ObjectiveProto>

الأهداف الإضافية للاستخدام في النماذج متعددة الأهداف.

يجب أن تكون أرقام تعريف مفاتيح الخريطة بالتنسيق [0, max(int64)). يجب أن تكون كل أولوية وكل اسم غير فارغ فريدة وأن تكون مختلفة أيضًا عن قيمة objective الأساسية.

linear_constraints

LinearConstraintsProto

linear_constraint_matrix

SparseDoubleMatrixProto

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

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

المتطلبات: * Line_restrictiont_matrix.row_ids هي عناصر Line_Restrictts.ids. * inline_Restrictt_matrix.column_ids هي عناصر المتغير.ids. * قيمة إدخالات المصفوفة غير المحددة صفر. * يجب أن تكون جميع قيم line_Restrictt_matrix.values محددة.

quadratic_constraints

map<int64, QuadraticConstraintProto>

القيود التربيعية في النموذج.

second_order_cone_constraints

map<int64, SecondOrderConeConstraintProto>

قيود المخروط من الدرجة الثانية في النموذج.

sos1_constraints

map<int64, SosConstraintProto>

قيود SOS1 في النموذج، والتي تؤدي إلى تقييد expression واحد على الأكثر يمكن أن تكون قيمة غير صفرية. تُعد إدخالات weights الاختيارية تفاصيل تنفيذ تستخدمها أداة الحلّ (ونأمل) في التواصل بسرعة أكبر. وبمزيد من التفاصيل، يمكن للأدوات استخدام هذه القيم التقديرية (أو عدم استخدامها) لاختيار قرارات التشعّب التي تنتج عُقد فرعية "متوازنة".

sos2_constraints

map<int64, SosConstraintProto>

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

indicator_constraints

map<int64, IndicatorConstraintProto>

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

ModelSolveParametersProto

الحقول
variable_values_filter

SparseVectorFilterProto

فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والمحلية بمتغيرات في PrimalSolutionProto وPrimalSolutionProto (PrimalSolutionProto.variable_values، PrimalRayProto.variable_values).

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

dual_values_filter

SparseVectorFilterProto

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

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

reduced_costs_filter

SparseVectorFilterProto

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

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

initial_basis

BasisProto

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

solution_hints[]

SolutionHintProto

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

branching_priorities

SparseInt32VectorProto

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

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

ObjectiveBoundsProto

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

الحقول
primal_bound

double

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

dual_bound

double

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

ObjectiveProto

الحقول
maximize

bool

false هو تصغير، true هو تكبير

offset

double

يجب أن يكون محدودًا وليس NaN.

linear_coefficients

SparseDoubleVectorProto

يشير ذلك المصطلح إلى مصطلحات ObjectiveProto الخطية في متغيرات القرار.

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

quadratic_coefficients

SparseDoubleMatrixProto

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

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

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

name

string

قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل، على سبيل المثال، راجع ModelProto.objectives وAuxiliaryObjectivesUpdatesProto.new_objectives.

priority

int64

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

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 أدناه، تكون sort_values هي x.

الحقول
variable_values

SparseDoubleVectorProto

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

PrimalSolutionProto

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

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

الحقول
variable_values

SparseDoubleVectorProto

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

objective_value

double

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

auxiliary_objective_values

map<int64, double>

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

feasibility_status

SolutionStatusProto

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

ProblemStatusProto

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

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

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

الحقول
primal_status

FeasibilityStatusProto

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

dual_status

FeasibilityStatusProto

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

primal_or_dual_infeasible

bool

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

QuadraticConstraintProto

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

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

الحقول
linear_terms

SparseDoubleVectorProto

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

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

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

quadratic_terms

SparseDoubleMatrixProto

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

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

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

lower_bound

double

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

upper_bound

double

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

name

string

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

SecondOrderConeConstraintProto

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

||arguments_to_norm||_2 <= upper_bound،

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

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

الحقول
upper_bound

LinearExpressionProto

arguments_to_norm[]

LinearExpressionProto

name

string

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

SolutionHintProto

تمثّل هذه السمة حلّ بدء مقترَح للحلّ.

تحتاج أدوات حلّ MIP عادةً إلى المعلومات الأساسية فقط (variable_values)، في حين تريد أدوات حلّ LP لكل من المعلومات الأساسية والمزدوجة (dual_values).

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

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

عادةً ما تفضل أدوات حل LP القائمة على النموذج الأولي أساسًا أوليًا إلى تلميح الحل (تحتاج إلى تبديل التلميح لتحويل التلميح إلى حل أساسي عملي بخلاف ذلك).

الحقول
variable_values

SparseDoubleVectorProto

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

dual_values

SparseDoubleVectorProto

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

المتطلبات: * dual_values.ids هي عناصر من LinearConstraintsProto.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة.

SolutionProto

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

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

الحقول
primal_solution

PrimalSolutionProto

dual_solution

DualSolutionProto

basis

BasisProto

SolutionStatusProto

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

عمليات التعداد
SOLUTION_STATUS_UNSPECIFIED قيمة الحرس التي لا تمثّل حالة.
SOLUTION_STATUS_UNDETERMINED لا يدّعي أداة الحلّ معرفة حالة الإمكانية.
SOLUTION_STATUS_FEASIBLE يدّعي القائم بالحلّ أنّ الحل ممكن.
SOLUTION_STATUS_INFEASIBLE يدّعي القائم بالحلّ أنّ الحل غير ممكن.

SolveParametersProto

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

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

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

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

يتم تمرير المعلّمات التي تعتمد على النموذج (مثلاً، ضبط أولوية التشعّب لكل متغير) في ModelSolveParametersProto.

الحقول
time_limit

Duration

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

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

enable_output

bool

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

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

lp_algorithm

LPAlgorithmProto

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

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

presolve

EmphasisProto

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

cuts

EmphasisProto

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

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

heuristics

EmphasisProto

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

scaling

EmphasisProto

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

iteration_limit

int64

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

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

node_limit

int64

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

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

cutoff_limit

double

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

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

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

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

objective_limit

double

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

best_bound_limit

double

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

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

solution_limit

int32

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

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

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

threads

int32

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

random_seed

int32

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

مع أنّ جميع أدوات الحلّ لديها مفهوم البذور، ولكن يُرجى العِلم أنّ القيم الصالحة تعتمد على أداة الحلّ الفعلية. - Gurobi: [0:GRB_MAXINT] (وهو الإصدار Gurobi 9.0 هو 2x10^9). - GSCIP: [0:2147483647] (وهو MAX_INT أو kint32max أو 2^31-1). - GLOP: [0:2147483647] (كما هو موضح أعلاه)،

absolute_gap_tolerance

double

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

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

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

انظر أيضًا recognized_gap_tolerance.

relative_gap_tolerance

double

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

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

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

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

راجِع أيضًا absolute_gap_tolerance.

solution_pool_size

int32

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

SolveResultProto

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

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

الحقول
termination

TerminationProto

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

solutions[]

SolutionProto

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

primal_rays[]

PrimalRayProto

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

dual_rays[]

DualRayProto

تمثّل هذه السمة إرشادات التحسين الثنائي غير المحدود، أو شهادات عدم الإمكانية الأساسية المكافئة. يتم توفيره عادةً لسبب الإنهاء مهامProto INFEASIBLE.

solve_stats

SolveStatsProto

إحصاءات حول عملية الحل، مثل وقت التشغيل والتكرارات

SolveStatsProto

الحقول
solve_time

Duration

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

problem_status

ProblemStatusProto

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

simplex_iterations

int64

barrier_iterations

int64

first_order_iterations

int64

node_count

int64

SolverTypeProto

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

عمليات التعداد
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 (لم يتم عرض معلومات مزدوجة).

SosConstraintProto

بيانات تمثل قيدًا واحدًا على مستوى SOS1 أو SOS2.

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

الحقول
expressions[]

LinearExpressionProto

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

weights[]

double

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

name

string

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

SparseBasisStatusVector

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

الحقول
ids[]

int64

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

values[]

BasisStatusProto

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

SparseDoubleMatrixProto

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

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

الحقول
row_ids[]

int64

column_ids[]

int64

coefficients[]

double

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

SparseDoubleVectorProto

تمثيل متفرق لمتجه المضاعفات.

الحقول
ids[]

int64

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

values[]

double

يجب أن يساوي طول الصورة أرقام التعريف. قد لا تحتوي على القيم غير الرقمية (NaN).

SparseInt32VectorProto

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

الحقول
ids[]

int64

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

values[]

int32

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

SparseVectorFilterProto

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

الحقول
skip_zero_values

bool

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

filter_by_ids

bool

عند اختيار "true"، يمكنك عرض القيم المقابلة لأرقام التعريف المدرجة في filter_ids.

filtered_ids[]

int64

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

TerminationProto

جميع المعلومات المتعلقة بسبب إنهاء الاتصال إلى Solve().

الحقول
reason

TerminationReasonProto

معلومات إضافية باللغة limit عندما تكون القيمة TERMINATION_REASON_FEASIBLE أو TERMINATION_REASON_NO_SOLUTION_FOUND، يُرجى الانتقال إلى limit لمعرفة التفاصيل.

limit

LimitProto

LIMIT_UNSPECIFIED ما لم يكن السبب TERMINATION_REASON_FEASIBLE أو TERMINATION_REASON_NO_SOLUTION_FOUND. لا يمكن لجميع أدوات الحلّ دائمًا تحديد الحد الذي تسبب في الإنهاء، ويتم استخدام LIMIT_UNDETERMINED في حالة تعذّر تحديد السبب.

detail

string

معلومات إضافية محدّدة عادةً عن أداة الحلّ حول إنهاء الاتفاقية

problem_status

ProblemStatusProto

حالات الإمكانيات للمسائل الأولية والمزدوجة. اعتبارًا من 18 تموز (يوليو) 2023، قد تكون هذه الرسالة غير متوفّرة. في حالة عدم وجود المشكلة، يمكن العثور علىProblem_status في SolveResultProto.solve_stats.

objective_bounds

ObjectiveBoundsProto

يقتصر على قيمة الهدف الأمثل. اعتبارًا من 18 تموز (يوليو) 2023، قد تكون هذه الرسالة غير متوفّرة. في حال عدم وجود هذه السمة، يمكن العثور على object_bounds.primal_bound في SolveProto.solve.stats.best_primal_bound و نسخ_bound_bounds.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 المشكلة الرئيسية إما غير قابلة للتنفيذ أو غير محدودة. قد يتوفّر مزيد من التفاصيل عن حالة المشكلة فيSolve_stats.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 توقفت الخوارزمية بسبب خطأ غير وارد في إحدى الحالات المحددة أعلاه. لا تتوفّر أي معلومات عن الحلّ.

VariablesProto

كما هو مستخدم أدناه، نعرّف "#variables" = size(VariablesProto.ids).

الحقول
ids[]

int64

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

lower_bounds[]

double

يجب أن يساوي الطول #variables، والقيم بـ [-inf, inf).

upper_bounds[]

double

يجب أن يساوي طول #variables، القيم بـ (-inf, inf].

integers[]

bool

يجب أن يساوي طول #variables. تكون القيمة خاطئة للمتغيرات المستمرة، وتكون true لمتغيّرات الأعداد الصحيحة.

names[]

string

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

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