الفهرس
BasisProto
(رسالة)BasisStatusProto
(تعداد)DualRayProto
(رسالة)DualSolutionProto
(رسالة)EmphasisProto
(تعداد)FeasibilityStatusProto
(تعداد)IndicatorConstraintProto
(رسالة)LPAlgorithmProto
(تعداد)LimitProto
(تعداد)LinearConstraintsProto
(رسالة)LinearExpressionProto
(رسالة)ModelProto
(رسالة)ModelSolveParametersProto
(رسالة)ObjectiveBoundsProto
(رسالة)ObjectiveProto
(رسالة)PrimalRayProto
(رسالة)PrimalSolutionProto
(رسالة)ProblemStatusProto
(رسالة)QuadraticConstraintProto
(رسالة)SecondOrderConeConstraintProto
(رسالة)SolutionHintProto
(رسالة)SolutionProto
(رسالة)SolutionStatusProto
(تعداد)SolveParametersProto
(رسالة)SolveResultProto
(رسالة)SolveStatsProto
(رسالة)SolverTypeProto
(تعداد)SosConstraintProto
(رسالة)SparseBasisStatusVector
(رسالة)SparseDoubleMatrixProto
(رسالة)SparseDoubleVectorProto
(رسالة)SparseInt32VectorProto
(رسالة)SparseVectorFilterProto
(رسالة)TerminationProto
(رسالة)TerminationReasonProto
(تعداد)VariablesProto
(رسالة)
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 |
حالة أساس القيد. المتطلبات: * Restrictt_status.ids يساوي LinearConstraints.ids. |
variable_status |
حالة أساس متغير. المتطلبات: * Restrictt_status.ids يساوي VariablesProto.ids. |
basic_dual_feasibility |
هذه ميزة متقدّمة تستخدمها شركة 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 |
المتطلبات: * dual_values.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة. |
reduced_costs |
المتطلبات: * 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 |
المتطلبات: * dual_values.ids هي عناصر من LinearConstraints.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة. |
reduced_costs |
المتطلبات: * mark_costs.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع القيم المخفَّضة التكلفة محدودة. |
feasibility_status |
تشير هذه السمة إلى حالة إمكانية الحلّ وفقًا للأداة الأساسية. |
objective_value |
|
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 |
إذا كان true، فعندئذ إذا أخذ متغير المؤشر القيمة 0، فيجب أن يخضع القيد الضمني. بخلاف ذلك، إذا أخذ متغير المؤشر القيمة 1، فيجب أن يظل القيد الضمني ثابتًا. |
expression |
يجب أن يكون تعبيرًا خطيًا صالحًا في ما يتعلق بالنموذج الذي يتضمّن ذلك: * جميع الشروط المذكورة في |
lower_bound |
يجب أن تحتوي على قيمة بتنسيق [-inf, inf؛ ولا يمكن أن تكون NaN. |
upper_bound |
يجب أن تكون القيمة داخل (-inf, inf]، ولا يمكن أن تكون NaN. |
name |
قد تحتوي الرسائل الرئيسية على متطلبات فريدة في هذا الحقل. على سبيل المثال، يمكنك الاطّلاع على |
indicator_id |
معرّف يقابل متغيّر ثنائي، أو تم تركه بدون ضبط. في حال ترك هذه السياسة بدون ضبط، يتم تجاهل قيد المؤشر. في حال التعيين، نحن نطلب ما يلي: * 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[] |
يجب أن تكون القيمة غير سالبة وأن تكون متزايدة تمامًا. لا يمكن استخدام قيمة max(int64). |
lower_bounds[] |
يجب أن يكون طولها #line خطي، والقيم بـ [-inf, inf). |
upper_bounds[] |
يجب أن يكون طولها #قابلاً للقيود الخطية، والقيم بـ (-inf, inf]. |
names[] |
في حال ترك هذه السياسة بدون ضبط، يُفترض أن تكون جميع السلاسل فارغة. بخلاف ذلك، يجب أن يكون طولاً يساوي #Line القيود. يجب أن تكون جميع الأسماء غير الفارغة مختلفة. |
LinearExpressionProto
تمثيل متفرق لتعبير خطي (مجموع مرجّح للمتغيرات، بالإضافة إلى إزاحة ثابتة).
الحقول | |
---|---|
ids[] |
مُعرّفات المتغيرات. يجب ترتيبه (بترتيب متزايد) مع تضمين كل العناصر المميزة. |
coefficients[] |
يجب أن يساوي طول الصورة أرقام التعريف. يجب أن تكون القيم محدودة ولا يمكن أن تكون NaN. |
offset |
يجب أن يكون محدودًا ولا يمكن أن يكون NaN. |
ModelProto
مشكلة في التحسين. يتيح Mathopt: - متغيّرات القرار المستمرة والأعداد الصحيحة مع حدود محدودة اختيارية. - الأهداف الخطية والتربيعية (أهداف واحدة أو متعددة)، سواء كانت مصغرة أو مكبرة. - عدد من أنواع القيود، بما في ذلك: * القيود الخطية * القيود التربيعية * قيود المستوى الثاني * القيود المنطقية > قيود SOS1 وSOS2 > قيود المؤشر
يتم تمثيل القيود افتراضيًا في خرائط "المعرف إلى البيانات". ومع ذلك، نمثل القيود الخطية بتنسيق "هيكلة مصفوفة" أكثر فاعلية.
الحقول | |
---|---|
name |
|
variables |
|
objective |
الهدف الأساسي في النموذج. |
auxiliary_objectives |
الأهداف الإضافية للاستخدام في النماذج متعددة الأهداف. يجب أن تكون أرقام تعريف مفاتيح الخريطة بالتنسيق [0, max(int64)). يجب أن تكون كل أولوية وكل اسم غير فارغ فريدة وأن تكون مختلفة أيضًا عن قيمة |
linear_constraints |
|
linear_constraint_matrix |
يشير ذلك المصطلح إلى المعاملات المتغيّرة للقيود الخطية. إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر. المتطلبات: * Line_restrictiont_matrix.row_ids هي عناصر Line_Restrictts.ids. * inline_Restrictt_matrix.column_ids هي عناصر المتغير.ids. * قيمة إدخالات المصفوفة غير المحددة صفر. * يجب أن تكون جميع قيم line_Restrictt_matrix.values محددة. |
quadratic_constraints |
القيود التربيعية في النموذج. |
second_order_cone_constraints |
قيود المخروط من الدرجة الثانية في النموذج. |
sos1_constraints |
قيود SOS1 في النموذج، والتي تؤدي إلى تقييد |
sos2_constraints |
قيود SOS2 في النموذج، والتي تفرض قيودًا على أنّ إدخالين من |
indicator_constraints |
قيود المؤشر في النموذج، والتي تفرض ذلك في حال ضبط "متغيّر المؤشر" الثنائي على واحد، يجب أن يخضع "القيد الضمني" لقيود. |
ModelSolveParametersProto
الحقول | |
---|---|
variable_values_filter |
فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والمحلية بمتغيرات في PrimalSolutionProto وPrimalSolutionProto (PrimalSolutionProto.variable_values، PrimalRayProto.variable_values). المتطلبات: * filter_ids هي عناصر VariablesProto.ids. |
dual_values_filter |
فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والم الرئيسية بقيود خطية في DualSolutionProto وDualRay (DualSolutionProto.dual_values, DualRay.dual_values). المتطلبات: * filter_ids هي عناصر LinearConstraints.ids. |
reduced_costs_filter |
فلتر يتم تطبيقه على جميع الحاويات المتفرقة المعروضة والمحلية بمتغيرات في DualSolutionProto وDualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs). المتطلبات: * filter_ids هي عناصر VariablesProto.ids. |
initial_basis |
أساس اختياري مبدئي لأدوات حلّ LP بسيطة وسريعة التشغيل. في حال ضبطها، من المتوقّع أن تكون صالحة وفقًا لـ |
solution_hints[] |
تلميحات عن الحلول الاختيارية. إذا قبلت أداة الحلّ الأساسية تلميحًا واحدًا فقط، سيتم استخدام التلميح الأول. |
branching_priorities |
أولويات التشعّب الاختيارية. سوف تتفرع المتغيرات ذات القيم الأعلى أولاً. تحصل المتغيرات التي لم يتم ضبط أولوياتها على الأولوية التلقائية لأداة الحلّ (عادةً ما تكون صفرًا). المتطلبات: * يجب أن تكون قيمة sorting_priorities.values محدودة. * يجب أن تكون Braning_priorities.ids عناصر VariablesProto.ids. |
ObjectiveBoundsProto
يقتصر على قيمة الهدف الأمثل.
الحقول | |
---|---|
primal_bound |
يدّعي أداة الحلّ أنّ القيمة المثلى تساوي أو أفضل (أصغر للتصغير وأكبر للزيادة) من قيمة primal_bound وصولاً إلى حدود الاحتمالية الأساسية للأدوات (اطّلِع على التحذير أدناه): * primal_bound تافهة (+inf لتصغير وتكبير -inf) عندما لا يدّعي الحلّ أنّ لديه هذا الحد. * يمكن أن يكون primal_bound أقرب إلى القيمة الأمثل من هدف أفضل حلّ بدائي عملي. على وجه الخصوص، قد يكون primal_bound غير تافه حتى في حال عدم عرض أي حلول بدائية مجدية. تحذير: يشير الادعاء الدقيق إلى توفُّر حلّ أولي: * ممكن رقميًا (أي ممكن حسب مقدار تفاوت أدوات الحلّ)، ويحتوي * على قيمة موضوعية primal_bound. قد يكون هذا الحل الممكنة رقميًا غير ممكن قليلاً، وفي هذه الحالة يمكن أن يكون primal_bound أفضل تمامًا من القيمة المثلى. إنّ ترجمة مقدار تفاوت معيَّن للجدوى الأساسي إلى مقدار تفاوت معيَّن في primal_bound ليس أمرًا تافهًا، خاصةً عندما يكون مقدار تفاوت الإمكانيات كبيرًا نسبيًا (على سبيل المثال، عند الحل باستخدام PDLP). |
dual_bound |
يدّعي أداة الحلّ أنّ القيمة المُثلى تساوي أو أسوأ (أكبر لتصغيرها وأصغر حجمًا للتكبير) من تأثير "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 |
false هو تصغير، true هو تكبير |
offset |
يجب أن يكون محدودًا وليس NaN. |
linear_coefficients |
يشير ذلك المصطلح إلى مصطلحات ObjectiveProto الخطية في متغيرات القرار. المتطلبات: * line_co transactions.ids هي عناصر من VariablesProto.ids. * VariablesProto غير محددة تتوافق مع الصفر. * يجب أن تكون جميع القيم الخطية محدودة. * يمكن أن تكون القيم الخطية صفرًا، ولكن هذا يؤدي إلى إهدار مساحة. |
quadratic_coefficients |
يشير ذلك المصطلح إلى المصطلحات الموضوعية التربيعية في متغيرات القرار. المتطلبات بالإضافة إلى تلك الواردة في رسائل 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 |
قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل، على سبيل المثال، راجع ModelProto.objectives وAuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
بالنسبة لمشكلات متعددة الأهداف، تكون أولوية هذا الهدف بالنسبة إلى الأهداف الأخرى (أقل أهمية). يجب أن تكون هذه القيمة غير سالبة. علاوة على ذلك، يجب أن تكون كل أولوية موضوعية في النموذج مستقلة في وقت الحل. لم يتم التحقّق من صحة هذا الشرط على مستوى النموذج الأولي، لذا قد يكون للنماذج مؤقتًا أهداف لها الأولوية نفسها. |
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 |
المتطلبات: * المتغير_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 |
المتطلبات: * المتغير_values.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم المتغير_values.value محدودة. |
objective_value |
القيمة الموضوعية وفقًا لحسابها من خلال أداة الحلّ الأساسية. لا يمكن أن تكون قيمة غير محدودة أو غير فارغة. |
auxiliary_objective_values |
تمثّل هذه السمة القيم الهدف الإضافية التي يتم احتسابها من خلال أداة الحلّ الأساسية. يجب أن تكون المفاتيح أرقام تعريف أهداف إضافية صالحة. لا يمكن أن تكون القيم لانهائية أو NaN. |
feasibility_status |
تشير هذه السمة إلى حالة إمكانية الحلّ وفقًا للأداة الأساسية. |
ProblemStatusProto
حالة الاحتمالية للمشكلة الأساسية وازدواجها (أو ازدواجية الاسترخاء المستمر) كما يدّعي برنامج الحلّ. ليس مطلوبًا من أداة الحلّ إرسال شهادة للمطالبة (على سبيل المثال، قد يدّعي أداة الحلّ المطالبة بالجدوى الأساسية بدون عرض حل مجدٍ ممكن). تقدّم هذه الحالة المجمّعة وصفًا شاملاً لادعاءات القائم بالحلّ حول إمكانية حلّ المشكلة التي تم حلها وعدم حدودها. على سبيل المثال:
- تشير الحالة الممكنة للمسائل الأولية والمزدوجة إلى أنّ المستوى الأولي ممكن ومحدود ومن المحتمل أن يكون له الحل الأمثل (مضمون للمشكلات بدون قيود غير خطية).
- الحالة الأساسية الممكنة، والحالة المزدوجة غير المستحيلة تشير إلى أن المشكلة الأساسية غير محدودة (أي أن لها حلول جيدة عشوائيًا).
لاحظ أن الحالة المزدوجة غير القابلة للتنفيذ في حد ذاتها (أي التي تكون مصحوبةً بالحالة الأولية غير المحددة) لا يعني أن المشكلة الأولية غير محدودة؛ لأنه يمكن أن يكون لدينا كلتا المشكلتين غير ممكنتين. وعلى الرغم من أنّ الحالة الأولية والمزدوجة قد تشير إلى توفّر الحلّ الأمثل، لا تضمنها أنّ أداة الحلّ قد عثرت على هذا الحل الأمثل.
الحقول | |
---|---|
primal_status |
حالة المشكلة الأساسية |
dual_status |
حالة المشكلة المزدوجة (أو لثنائيات الاسترخاء المستمر). |
primal_or_dual_infeasible |
إذا كان الحلّ صحيحًا، يدّعي الحلّ أنّ المشكلة الأساسية أو المزدوجة غير قابلة للتنفيذ، ولكنّه لا يعرف أيًا منها (أو إذا كان كلاهما غير ممكن). يمكن أن يكون صحيحًا فقط عندما primal_problem_status = dual_problem_status = kUndetermined. غالبًا ما تكون هذه المعلومات الإضافية مطلوبة عندما تحدد المعالجة المسبقة أنه لا يوجد حل مثالي للمشكلة (ولكن لا يمكن تحديد ما إذا كان ذلك بسبب عدم التمكن أو عدم الحدود أو كليهما). |
QuadraticConstraintProto
قيد تربيعي واحد بالصيغة: lb <= sum{line_terms} + sum{quadratic_terms} <= ub.
إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.
الحقول | |
---|---|
linear_terms |
العبارات الخطية في متغيرات القرار. بالإضافة إلى المتطلبات الخاصة برسائل SparseDoubleVectorProto، نطلب منك ما يلي: * Line_terms.ids هي عناصر VariablesProto.ids. * يجب أن تكون جميع قيم line_terms.values محدودة وليس بدون NaN. ملاحظات: * المعرّفات المتغيّرة التي تم حذفها لها معامل مقابل صفر. * يمكن أن تساوي قيم line_terms.values صفرًا، ولكن هذا يؤدي إلى إهدار مساحة. |
quadratic_terms |
المصطلحات التربيعية في متغيرات القرار. بالإضافة إلى المتطلبات المتعلّقة برسائل 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 |
يجب أن تكون القيمة بـ [-inf وinf) وأن تكون أقل من أو تساوي |
upper_bound |
يجب أن تكون القيمة في (-inf, inf]، وأن تكون أكبر من أو تساوي |
name |
قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل، على سبيل المثال، يمكنك الاطّلاع على ModelProto.quadratic_Restrictts وQuadraticConstraintUpdatesProto.new_Restrictts. |
SecondOrderConeConstraintProto
قيد مخروطي واحد من الدرجة الثانية للشكل:
||arguments_to_norm
||_2 <= upper_bound
،
حيث يكون upper_bound
وكل عنصر من عناصر arguments_to_norm
تعبيرات خطية.
إذا تم حذف متغير متضمن في هذا القيد، فسيتم التعامل معه كما لو تم تعيينه على صفر.
الحقول | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
قد تحتوي الرسائل الرئيسية على متطلبات فريدة في هذا الحقل. على سبيل المثال، يمكنك الاطّلاع على |
SolutionHintProto
تمثّل هذه السمة حلّ بدء مقترَح للحلّ.
تحتاج أدوات حلّ MIP عادةً إلى المعلومات الأساسية فقط (variable_values
)، في حين تريد أدوات حلّ LP لكل من المعلومات الأساسية والمزدوجة (dual_values
).
يمكن للعديد من أدوات حلّ MIP العمل مع: (1) الحلول الجزئية التي لا تحدِّد جميع المتغيرات أو (2) الحلول غير القابلة للتطبيق. وفي هذه الحالات، تحل أدوات الحلّ عادةً MIP الفرعي لإكمال أو تصحيح التلميح.
وتعتمد كيفية استخدام التلميح من قِبل أداة الحلّ بشكل كبير على أداة الحلّ ونوع المسألة والخوارزمية المستخدَمة. إنّ الطريقة الأكثر موثوقية لضمان تأثير التلميح هي قراءة سجلّات أدوات الحلّ الأساسية مع التلميح أو بدونه.
عادةً ما تفضل أدوات حل LP القائمة على النموذج الأولي أساسًا أوليًا إلى تلميح الحل (تحتاج إلى تبديل التلميح لتحويل التلميح إلى حل أساسي عملي بخلاف ذلك).
الحقول | |
---|---|
variable_values |
يشير ذلك المصطلح إلى عملية تخصيص جزئية لقيم للمتغيرات الأساسية للمشكلة. في ما يلي المتطلبات المستقلة للحل لهذه الرسالة الفرعية: * المتغير_values.ids هي عناصر من VariablesProto.ids. * يجب أن تكون جميع قيم المتغير_values.value محدودة. |
dual_values |
يشير ذلك المصطلح إلى عملية تحديد قيم (من المحتمل أن تكون جزئية) للقيم المستندة إلى القيود الخطيّة في المسألة. المتطلبات: * dual_values.ids هي عناصر من LinearConstraintsProto.ids. * يجب أن تكون جميع القيم المزدوجة (Dual_values.values) محدودة. |
SolutionProto
يعتمد ما يتم تضمينه في الحل على نوع المشكلة والحل. الأنماط الشائعة الحالية هي 1. لا تعرض أدوات حلّ MIP سوى الحل الأساسي. 2. غالبًا ما تُرجع أدوات حل LP البسيطة أساسًا والحلول الأولية والثنائية المرتبطة بهذا الأساس. 3- غالبًا ما تعرض أدوات الحلّ المستمرة الأخرى حلاً أوليًا وثنائيًا يتم ربطه بصيغة تعتمد على تلك الأداة.
المتطلبات: * يجب ضبط حقل واحد على الأقل، ولا يمكن أن يكون الحل فارغًا.
الحقول | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
إمكانية التوصّل إلى حلّ أساسي أو ثنائي كما يدّعي الحلّ
عمليات التعداد | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
قيمة الحرس التي لا تمثّل حالة. |
SOLUTION_STATUS_UNDETERMINED |
لا يدّعي أداة الحلّ معرفة حالة الإمكانية. |
SOLUTION_STATUS_FEASIBLE |
يدّعي القائم بالحلّ أنّ الحل ممكن. |
SOLUTION_STATUS_INFEASIBLE |
يدّعي القائم بالحلّ أنّ الحل غير ممكن. |
SolveParametersProto
معلَمات للتحكّم في حل واحد.
يحتوي على كلتا المَعلمتَين المشتركتَين في جميع أدوات الحلّ، مثل time_limit، والمَعلمات الخاصة بأداة حلّ محدَّدة، مثل gcip. في حال ضبط قيمة في كل من الحقل الشائع والحقل الخاص بأداة الحلّ، يتم استخدام الإعداد الخاص بأداة الحلّ.
تشير المَعلمات الشائعة الاختيارية وغير المحدَّدة أو التعداد بدون تحديد قيمة إلى أنّه يتم استخدام الإعداد التلقائي لأداة الحلّ.
ويتم تجاهل المعلَمات الخاصة بأدوات الحلّ غير تلك المستخدَمة.
يتم تمرير المعلّمات التي تعتمد على النموذج (مثلاً، ضبط أولوية التشعّب لكل متغير) في ModelSolveParametersProto.
الحقول | |
---|---|
time_limit |
يشير ذلك إلى الحدّ الأقصى للوقت الذي يجب أن يقضيه الحلّ في حلّ المشكلة (أو غير محدود إذا لم يتم ضبط هذه الميزة). هذه القيمة ليست حدًا صارمًا، قد يتجاوز وقت الحل هذه القيمة قليلاً. يتم دائمًا تمرير هذه المَعلمة إلى أداة الحلّ الأساسية، ولا يتم استخدام الأداة التلقائية للحلّ. |
enable_output |
يؤدي هذا الخيار إلى تفعيل طباعة آثار تنفيذ أداة الحلّ. ويعتمد موقع عمليات التتبُّع هذه على أداة الحلّ. بالنسبة إلى SCIP وGurobi، سيكون هذا هو مجموعات الإخراج العادية. بالنسبة إلى Glop وCP-SAT، سيؤدي ذلك إلى LOG(INFO). يُرجى العِلم أنّه إذا كانت أداة الحلّ توفّر إمكانية معاودة الاتصال بالرسالة وسجَّل المستخدم معاودة الاتصال بها، سيتم تجاهل قيمة المَعلمة هذه ولن تتم طباعة أي عمليات تتبُّع. |
lp_algorithm |
يشير ذلك المصطلح إلى خوارزمية حل برنامج خطي. إذا كان LP_ALGORITHM_UNSPECIFIED، استخدِم الخوارزمية التلقائية لأداة الحلّ. بالنسبة إلى المسائل التي ليست برامج خطية ولكنها تكون فيها البرمجة الخطية روتينًا فرعيًا، يمكن أن تستخدم أدوات الحلّ هذه القيمة. على سبيل المثال، تستخدم أدوات حل MIP عادةً هذا لأسلوب LP الجذري (وتستخدم طريقة العرض المزدوج البسيط في الحالات الأخرى). |
presolve |
جهد لتبسيط المسألة قبل بدء الخوارزمية الرئيسية، أو مستوى الجهد الافتراضي لأداة الحلّ إذا وجدوا أن EVAL_UNSPECIFIED. |
cuts |
هناك الجهد المبذول في الحصول على مستوى أقوى للتخفيف من آثار LP (MIP فقط)، أو مستوى الجهد الافتراضي لأداة الحلّ في حالة LINK_UNSPECIFIED. ملاحظة: قد يؤدي إيقاف ميزة القطع إلى منع عمليات معاودة الاتصال من إضافة إمكانية إضافة اختصار في MIP_NODE، ولكن هذا السلوك مرتبط بأداة الحلّ. |
heuristics |
هناك جهد لإيجاد حلول مجدية تتجاوز تلك التي تتم مواجهتها في إجراء البحث الكامل (MIP فقط)، أو مستوى الجهد الافتراضي لأداة الحلّ في حالة ATTRIBUTE_UNSPECIFIED. |
scaling |
يبذل الجهد في تغيير نطاق المشكلة لتحسين الثبات العددي، أو مستوى الجهد الافتراضي لأداة الحلّ إذا لم تكن هذه القيمة LINK_UNSPECIFIED. |
iteration_limit |
تقييد التكرارات للخوارزمية الأساسية (على سبيل المثال، محورية بسيطة). يعتمد هذا السلوك المحدّد على أداة الحلّ والخوارزمية المستخدَمة، ولكن غالبًا ما يمكن أن يوفّر حدًا للحل (قد تكون هناك حاجة إلى ضبط إضافي، مثل سلسلة واحدة). تكون هذه الأدوات متوافقة عادةً مع أدوات حلّ LP وQP وMIP، ولكن بالنسبة إلى أدوات حلّ MIP، يمكنك أيضًا الاطّلاع علىNode_limit. |
node_limit |
يشير ذلك إلى الحد الأقصى لعدد المسائل الفرعية التي يتم حلها في البحث التعدادي (مثل الفرع والحدود). بالنسبة إلى العديد من أدوات الحلّ، يمكن استخدام هذه الطريقة لتحديد العمليات الحسابية بشكل حاسم (قد تكون هناك حاجة إلى ضبط إضافي، مثل سلسلة واحدة). بالنسبة إلى أدوات حل MIP، يمكنك أيضًا الاطّلاع على iteration_limit. |
cutoff_limit |
تتوقّف أداة الحلّ مبكرًا إذا تمكّنت من إثبات عدم توفّر حلول أولية، على الأقل هذه الحدود. في مرحلة مبكرة، تعرض أداة الحلّ سبب الإنهاء NO_SOLUTION_FOUND مع تحديد CUTOFF، وليس مطلوبًا منها تقديم أي معلومات إضافية عن الحلّ. ولن يكون لذلك أي تأثير في القيمة المعروضة في حال عدم التوقّف المبكر. يوصى باستخدام مقدار تفاوت إذا كنت تريد حلولاً بهدف تساوي تمامًا عرض القطع. راجِع دليل المستخدم لمزيد من التفاصيل والمقارنة مع best_bound_limit. |
objective_limit |
تتوقف أداة الحلّ في أقرب وقت عند العثور على حلّ بهذا الشكل على الأقل، مع إدراج سبب الإغلاق "مقبول" و"الحدّ من الهدف". |
best_bound_limit |
تتوقف أداة الحلّ في أقرب وقت بعد أن تتأكّد من أنّ الحدّ الأفضل هو على الأقل هذا الحدّ، وذلك مع سبب الإغلاق FEASIBLE أو NO_SOLUTION_FOUND والحدّ الأقصى المسموح به. راجِع دليل المستخدم للاطّلاع على مزيد من التفاصيل والمقارنة مع cutoff_limit. |
solution_limit |
تتوقف أداة الحلّ في وقت مبكر بعد العثور على هذه الحلول العديدة الممكنة، ويكون سبب الإنهاء سهل وحلّ محدود. يجب أن تكون القيمة أكبر من صفر في حال ضبطها. وغالبًا ما يتم استخدامها لجعل أداة الحلّ تتوقّف عند أول حلّ ممكن يتم العثور عليه. تجدر الإشارة إلى أنّه ما مِن ضمان على قيمة الهدف لأي من الحلول التي تم إرجاعها. لا تعرض أدوات الحلّ عادةً حلولاً أكثر من حدّ الحلّ، ولكن لا يتم فرض ذلك باستخدام MathOpt، راجع أيضًا b/214041169. تتوفّر هذه الميزة حاليًا في Gurobi وSCIP، وبالنسبة إلى CP-SAT فقط بالقيمة 1. |
threads |
وفي حال ضبطها، يجب أن تكون القيمة >= 1. |
random_seed |
المصدر الأساسي لإنشاء الأرقام العشوائية الزائفة في أداة الحلّ الأساسية. يُرجى العِلم أنّ جميع أدوات الحلّ تستخدم أرقامًا عشوائية عشوائية لاختيار عناصر، مثل اضطراب في خوارزمية 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 |
مقياس تفاوت مثالي مطلق (في المقام الأول) لأدوات حل MIP. GAP المطلق هي القيمة المطلقة للفرق بين: * القيمة الموضوعية لأفضل حل عملي تم العثور عليه، * الحد المزدوج الناتج عن البحث. يمكن أن تتوقف أداة الحلّ عند بلوغ قيمة GAP المطلقة على الأكثر absolute_gap_tolerance (عند ضبطها)، وعرض TERMINATION_REASON_optIMAL. يجب أن تكون القيمة >= 0 في حال ضبطها. انظر أيضًا recognized_gap_tolerance. |
relative_gap_tolerance |
التباين النسبي الأمثل (بشكل أساسي) لأدوات حل MIP. GAP النسبي هي نسخة تمت تسويتها من GAP المطلق (محدَّدة في absolute_gap_tolerance)، حيث تعتمد التسوية على الحل، على سبيل المثال، ناتج GAP المطلق مقسومًا على القيمة الموضوعية لأفضل حل عملي تم العثور عليه. يمكن أن تتوقف أداة الحلّ عند بلوغ قيمة GAP النسبية كحد أقصى (عند ضبطها)، وتعرض هذه الأداة TERMINATION_REASON_optIMAL. يجب أن تكون القيمة >= 0 في حال ضبطها. راجِع أيضًا absolute_gap_tolerance. |
solution_pool_size |
استفِد من |
SolveResultProto
عقد الحلول/الحلول الأولية/المزدوجة الذي يكون معقّدًا، يمكنك الانتقال إلى موقع End_reasons.md للحصول على وصف كامل.
وإلى أن يتم الانتهاء من العقد الدقيق، من الأسهل عليك التحقّق من توفّر حل أو عرض بشكلٍ أفضل بدلاً من الاعتماد على سبب الإنهاء.
الحقول | |
---|---|
termination |
تمثّل هذه السمة سبب إيقاف أداة الحلّ. |
solutions[] |
العقد العام لترتيب الحلول التي يجب أن تنفذها أدوات الحلّ المستقبلية هو الترتيب حسب: 1. يشير ذلك المصطلح إلى الحلول ذات الحلول الأساسية الممكنة، والتي يتم ترتيبها حسب أفضل هدف أساسي أولاً. 2. يشير ذلك المصطلح إلى الحلول ذات الحلول المزدوجة الممكنة، والمرتبة حسب أفضل هدف ثنائي (الهدف المزدوج غير المعروف هو الأسوأ). 3. يمكن إرجاع كل الحلول المتبقية بأي ترتيب. |
primal_rays[] |
تمثّل هذه السمة إرشادات التحسين الأساسي غير المحدود، أو شهادات عدم دراسة قابلية التنفيذ المزدوجة. يتم توفيره عادةً لسبب الإنهاء Protos UNboundED وDUAL_INFEASIBLE |
dual_rays[] |
تمثّل هذه السمة إرشادات التحسين الثنائي غير المحدود، أو شهادات عدم الإمكانية الأساسية المكافئة. يتم توفيره عادةً لسبب الإنهاء مهامProto INFEASIBLE. |
solve_stats |
إحصاءات حول عملية الحل، مثل وقت التشغيل والتكرارات |
SolveStatsProto
الحقول | |
---|---|
solve_time |
الوقت المنقضي على الحائط كما تم قياسه باستخدامMath_opt، وهو الوقت التقريبي داخل Solver::Solve(). ملاحظة: لا يشمل ذلك العمل المنجز في إنشاء النموذج. |
problem_status |
حالات الإمكانيات للمسائل الأولية والمزدوجة. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
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[] |
التعبيرات التي سيتم تطبيق قيد SOS عليها: * SOS1: يأخذ عنصر واحد قيمة غير صفرية على الأكثر. * SOS2: يتخذ عنصران كحد أقصى قيمًا غير صفرية، ويجب أن يكونا متجاورين بالترتيب المكرر. |
weights[] |
إما أن تكون فارغة أو متساوية في الطول من التعبيرات. إذا كانت القيم فارغة، تكون قيم الترجيح الافتراضية هي 1، 2، ... إذا كانت موجودة، يجب أن تكون الإدخالات فريدة. |
name |
قد يكون للرسائل الرئيسية متطلبات فريدة في هذا الحقل؛ على سبيل المثال، راجع ModelProto.sos1_Restrictts وSosConstraintUpdatesProto.new_Restrictts. |
SparseBasisStatusVector
تمثيل متفرق لمتجه حالات الأساس.
الحقول | |
---|---|
ids[] |
يجب ترتيبه (بترتيب متزايد) مع تضمين كل العناصر المميزة. |
values[] |
يجب أن يساوي طول الصورة أرقام التعريف. |
SparseDoubleMatrixProto
تمثيل متفرق لمصفوفة من الأزواج.
يتم تخزين المصفوفة كثلاث ثلاثيات من معرف الصف ومعرف العمود ومعامل. يجب أن تكون هذه المتجهات الثلاثة متساوية الطول. بالنسبة إلى كل i، يجب أن يكون الصف (row_ids[i] وcolumn_ids[i]) مختلفًا. يجب أن تكون الإدخالات بترتيب رئيسي في الصف.
الحقول | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
قد لا تحتوي على القيم غير الرقمية (NaN). |
SparseDoubleVectorProto
تمثيل متفرق لمتجه المضاعفات.
الحقول | |
---|---|
ids[] |
يجب ترتيبه (بترتيب متزايد) مع تضمين كل العناصر المميزة. |
values[] |
يجب أن يساوي طول الصورة أرقام التعريف. قد لا تحتوي على القيم غير الرقمية (NaN). |
SparseInt32VectorProto
تمثيل متفرق لمتّجه من الأعداد الصحيحة.
الحقول | |
---|---|
ids[] |
يجب فرزها (بترتيب متزايد) مع تمييز جميع العناصر. |
values[] |
يجب أن يساوي طول الصورة أرقام التعريف. |
SparseVectorFilterProto
تسمح هذه الرسالة بالاستعلام عن/ضبط أجزاء معينة من SparseXxxxVector. السلوك التلقائي هو عدم فلترة أي محتوى. الاستخدام الشائع هو الاستعلام عن أجزاء الحلول فقط (القيم غير الصفرية فقط و/أو مجموعة مختارة بعناية من قيم المتغيرات).
الحقول | |
---|---|
skip_zero_values |
بالنسبة إلى SpasesBoolVectorProto، فإن قيمة "zero" هي |
filter_by_ids |
عند اختيار "true"، يمكنك عرض القيم المقابلة لأرقام التعريف المدرجة في filter_ids. |
filtered_ids[] |
قائمة المعرّفات المطلوب استخدامها عندما تكون filter_by_ids صحيحة. يجب أن يكون هذا الحقل فارغًا عندما تكون قيمة filter_by_ids خطأ. ملاحظة: إذا كانت هذه المعلومات فارغة، وكانت filter_by_ids صحيحة، هذا يعني أنّك لا تريد عرض أي معلومات في النتيجة. |
TerminationProto
جميع المعلومات المتعلقة بسبب إنهاء الاتصال إلى Solve().
الحقول | |
---|---|
reason |
معلومات إضافية باللغة |
limit |
LIMIT_UNSPECIFIED ما لم يكن السبب TERMINATION_REASON_FEASIBLE أو TERMINATION_REASON_NO_SOLUTION_FOUND. لا يمكن لجميع أدوات الحلّ دائمًا تحديد الحد الذي تسبب في الإنهاء، ويتم استخدام LIMIT_UNDETERMINED في حالة تعذّر تحديد السبب. |
detail |
معلومات إضافية محدّدة عادةً عن أداة الحلّ حول إنهاء الاتفاقية |
problem_status |
حالات الإمكانيات للمسائل الأولية والمزدوجة. اعتبارًا من 18 تموز (يوليو) 2023، قد تكون هذه الرسالة غير متوفّرة. في حالة عدم وجود المشكلة، يمكن العثور علىProblem_status في SolveResultProto.solve_stats. |
objective_bounds |
يقتصر على قيمة الهدف الأمثل. اعتبارًا من 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[] |
يجب أن تكون القيمة غير سالبة وأن تكون متزايدة تمامًا. لا يمكن استخدام قيمة max(int64). |
lower_bounds[] |
يجب أن يساوي الطول #variables، والقيم بـ [-inf, inf). |
upper_bounds[] |
يجب أن يساوي طول #variables، القيم بـ (-inf, inf]. |
integers[] |
يجب أن يساوي طول #variables. تكون القيمة خاطئة للمتغيرات المستمرة، وتكون true لمتغيّرات الأعداد الصحيحة. |
names[] |
في حال ترك هذه السياسة بدون ضبط، يُفترض أن تكون جميع السلاسل فارغة. بخلاف ذلك، يجب أن يكون طوله #variables. يجب أن تكون جميع الأسماء غير الفارغة مختلفة. |