# برمجة خطية

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

## التاريخ

خلال الحرب العالمية الثانية، وبنتيجة محدودية الموارد العسكرية، كلَّفت الحكومة البريطانية فريقاً من كبار العلماء دراسة مسائل كيفية توزيع مواردها العسكرية، وما يتناسب مع أفضل وضع دفاعي جوي وبري، ولقد أطلق على دراسات هذا الفريق اسم بحوث العمليات أو البحث العملياتي. ثم أخذت هذه التسمية تطلق على كافة الأبحاث والدراسات التي تتعامل مع مسائل البرمجة أو التوزيع ومسائل اتخاذ القرار. وقد حثَّت النتائج المشجعة لفريق بحوث العمليات البريطاني الإدارة العسكرية الجوية الأمريكية على تكوين فريق مشابه للقيام بالدراسات اللازمة في هذا المجال. فقد وجدت هذه الفرق أن أساليب مسائل التفضيل التقليدية، كطريقة مضاريب لاغرانج مثلاً، ليست ذات فائدة كبيرة في حل مسائل البرمجة الخطية، مما استوجب إيجاد أساليب أكثر فاعلية في عام 1947 م حين طور جورج دانتزغ عضو الفريق الأمريكي لبحوث العمليات الطريقة المبسطة (السمبلكس) لحل مسألة البرمجة الخطية؛ لكن لم تنشر تفاصيل هذه الطريقة إلا في عام 1956م. وبعد نشر الطريقة المبسطة (السمبلكس) حدث تسارع كبير في استخدام وتطوير البرمجة الخطية. ومن المشاركات التطويرية المهمة في ذلك المجال أعمال جال Gal التي قام بها وحده أو بمشاركة آخرين معه، إذ قاموا بصَوْغ المسألة الثنائية لمسألة البرمجة الخطية. وحاليا، تستخدم البرمجة الخطية في مختلف المجالات الصناعية والاقتصادية والخدمية والعسكرية، وحيثما توجد عدة موارد محدودة الكمية مشتركة في تشكيل أو إنتاج سلعة أو تقديم خدمة معينة.
إن المسائل الاقتصادية أو العلمية، والتي يمكن أن تصاغ كمسألة برمجة خطية، يجب أن يتوفر فيها الأساسيات التالية:
* وجود غاية أو هدف يراد الوصول إليه مثل تحقيق ربح أعظمي أو تحقيق كلفة أصغرية أو اقتصاد أعظمي في الوقت أو الجهد وغير ذلك. ويعبر عن ذلك بتابع رياضي خطي نسميه بتابع الهدف أو تابع الربح في حالة تعظيم، أو بتابع الخسارة في حالة تقليل.
* وجود عدد كبير من المتحولات أو المجاهيل التي يجب تحديد قيمها للوصول إلى الغاية المطلوبة، وتسمى هذه المتحولات بمتحولات القرار.
* وجود علاقات ارتباط خطية بين تلك المتحولات وتسمى هذه العلاقات بقيود المسألة.
إذن البرنامج الخطي هو استمثال optimization (تعظيم أو تقليل) دالَّة خطية، تحت قيود خطية. ويمكن رياضياً أن نعبر عن ذلك بالشكل التالي:
حيث المجموعة {I={1,2,...,m تعبر عن مجموعة الأدلة الكلية للقيود، والمجموعة I0 هي مجموعة جزئية من I وتعبر عن مجموعة الأدلة التي تصف قيود المساواة للمسألة، والمجموعة -I هي مجموعة جزئية من I وتعبر عن مجموعة الأدلة التي تصف قيوداً أصغر أو تساوي للمسألة، والمجموعة +I هي مجموعة جزئية من I وتعبر عن مجموعة الأدلة التي تصف قيوداً أكبر أو تساوي للمسألة.
نفترض أن التوابع
هي توابع خطية. إنه ليس قيداً إذا افترضنا أن جميع المتحولات (Xi(i=1,....,n ليست سالبة لأنه إذا وجد متحول xj يأخذ قيماً حقيقية لا على التعيين موجبة أو سالبة، يمكننا الاستعاضة عنه بالفرق -xj+- xj حيث المتحولان +xj و-xj يأخذان قيماً غير سالبة. أما إذا وجد متحول سالب من الشكل 0£ xj فإنه يمكننا أيضاً إبداله بمتحول جديد من الشكل yj=-xj.

## آلية وضْع البرنامج الرياضي الخطي

لوضع البرنامج الرياضي الخطي يجب اتباع الخطوات التالية:
* تحديد المتحولات التي يجب إيجاد قيمها (متحولات القرار) وتمثيلها برموز جبرية.
* تحديد جميع القيود والعلاقات الممكنة التي تربط بين هذه المتحولات، ويعبَّر عن ذلك بمعادلات خطية أو متراجحات بحيث تكون هذه القيود خطية.
* تحديد تابع الهدف وتمثيله بتابع خطي بالنسبة للمتحولات، وتحديد ما إذا كان الهدف من المسألة تعظيم التابع الهدفي أو تقليله.
ويمكننا أن نكتب البرنامج الرياضي الخطي بطريقة المصفوفات كما يلي:
حيث عدد المتحولات غير المعلومة هو n وعدد القيود m و A مصفوفة القيود m×n و c متجهة عمود ب n مركبة و b متجهة عمود ب m مركبة أيضاً و T يرمز إلى المنقول.
إن حل البرنامج السابق يعني إيجاد القيمة الحقيقية التي تعطي التابع قيمة أعظميه (قيمة مثلى للتابع) على منطقة القيود، التي تسمى عادة منطقة الإمكانات. أما إذا أردنا أن نفتش عن النقطة (قيم مثلى للمتحولات) من منطقة الإمكانات، والتي توافق القيمة فنكتب المسألة على الشكل التالي:
ويجب الإشارة هنا إلى أن العلاقة التالية في مسائل التفضيل دوماً صحيحة:
وهذا يعني أن الخوارزميات الموضوعة لحل البرامج الرياضية الخطية في حالة تعظيم، هي نفسها تصلح لحل البرامج الرياضية الخطية في حالة تقليل، وذلك بالاستفادة من العلاقة السابقة. الثنائية في البرمجة الخطية A series of linear constraints on two variables produces a region of possible values for those variables. Solvable problems will have a feasible region in the shape of a simple polygon.
بوجه عام ودوماً يوجد إمكان اشتقاق برنامج رياضي خطي من كل برنامج رياضي خطي آخر مفروض، نسميه عادة بالبرنامج الثنائي أو بالبرنامج المرافق للبرنامج الرياضي الخطي الأساسي. وربما يكون حل البرنامج الثنائي أسهل من البرنامج الأساسي في بعض الحالات، ويمكن أن يفيد أيضاً في صياغة خوارزميات بُغْية إيجاد حلول لبرامج رياضية خطية، يطلب أحياناً أن تكون حلولها المثلى تنتمي إلى مجموعة الأعداد الصحيحة بدلاً من مجموعة الأعداد الحقيقية.

## أهم الخوارزميات لحل البرامج الرياضية الخطية

من أهم الطرق وأسهلها على الإطلاق لحل البرامج الرياضية الخطية، طريقة السمبلكس (1956) لـ دانتزغ Dantzig وقد بقيت هذه الطريقة مطبقة لسهولة التعامل معها على الرغم من ارتفاع تعقيديتها (تعبر التعقيدية عن عدد العمليات الحسابية الأعظمي للوصول إلى الحل المثالي للمسألة) وتقدر تعقيدية طريقة السمبلكس بـ
عملية حسابية وهي تعقيدية أسية. لكن في عام 1979م اقترح عالم روسي كاشيان (Khachian) طريقة جديدة لحل البرامج الرياضية الخطية بتعقيدية جبرية (O(n7L حيث n ترمز إلى عدد متحولات القرار و L ترمز إلى عدد البتات bits اللازمة لتوصيف معطيات الدخل للمسألة الخطية (c,b,A) وهذه الطريقة تعرف بطريقة القطوع الناقصة. إن هذه الطريقة مبنية بناء رياضياً مبدعاً، وهي تتفوق على طريقة السمبلكس نظرياً، لكن في المسائل العملية بقيت السمبلكس أكثر استعمالاً وموثوقية، لأن طريقة كاشيان لم تعط نتائج أكثر دقة وقناعة في المسائل العملية الحقيقية. في عام 1984م حصل تحول كبير في البرمجة الخطية، إذ نشر العالم الأمريكي كارماركار (Karmarkar) طريقتة الشهيرة ذات التعقيدية الجبرية (O(n3.5L وعلى ما يبدو، هذه الطريقة واعدة إذ عولج بها كثير من المسائل التطبيقية، ولا سيما في البحوث البترولية، وأعطت نتائج ممتازة. لكن مع كل هذا سيبقى أمام طريقة السمبلكس أيضاً أيام جميلة بسبب سهولتها الفائقة.
مثال1: مسألة المزج
يراد تحضير منتج ذي تركيب معين بحيث تحتوي الواحدة منه على الكميات (bi(i=1,...,m من العناصر (Bi(i=1,...,m كحد أدنى ويمكن تحضير هذا المنتج من المواد (Aj(j=1,...,n حيث تحتوي الواحدة من Aj على الكمية aij من العنصر Bi وتكلف الواحدة من Aj المبلغ cj ويراد تحضير هذا المنتج بأقل كلفة ممكنة.
يصاغ البرنامج الخطي لهذه المسألة على الشكل التالي:
مثال2: مسألة التنظيم الغذائي
اقترح طبيب على مريضه أن يتناول يومياً كحد أدنى كميات معينة bi من فيتامينات أو مقويات أساسية i=1,2,...,m)Bi) ضرورية لجسمه. يريد هذا المريض أن يحصل على هذه الفيتامينات بتناوله الخضراوات والفواكه المتوفرة في الأسواق المحلية ولنرمز لهذه المواد بـ (Aj(j=1,...,n. لنفترض أن ثمن الوحدة الواحدة (مقدرة بـ غ أو كغ أو....الخ) من المادة Aj هو cj وحدة نقدية حيث تحتوي هذه الوحدة على الكمية aij من الفيتامين الأساسي الأول Bi و a2j من الفيتامين الأساسي الثاني B2 وهكذا...
والمطلوب في هذه المسألة تحديد الكميات (xj(j=1,...,n الواجب تناولها من المواد الغذائية من قبل المريض للحصول على تنظيم غذائي صحيح يحقق طلب الطبيب من جهة وبأقل التكاليف من جهة أخرى.
مثال3: مسألة تنظيم الإنتاج
لنفترض أن معملاً ينتج الأنواع (Aj(j=1,...,n من مادة معينة قابلة للتسويق، حيث يجري في عملية الإنتاج استخدام المواد الأولية (Bi(i=1,...,m المتوفر منها في المعمل وفي الوقت الحاضر الكميات (bi(i=1,...,m. إذا كانت الوحدة الواحدة من المنتج Aj تستهلك من المادة الأولية Bi الكمية aij وإذا كان الربح الصافي من إنتاج تلك الوحدة هو فالمطلوب تنظيم الإنتاج بحيث يحقق المعمل ربحاً أعظمياً.

## مراجع

* ↑ Vanderbei (2001)
* ↑ Zeyuan Allen-Zhu؛ Lorenzo Orecchia (2015). Using Optimization to Break the Epsilon Barrier: A Faster and Simpler Width-Independent Algorithm for Solving Positive Linear Programs in Parallel. ACM-SIAM Symposium on Discrete Algorithms. arXiv:1407.1925.
* ↑ Murty (1983)
* بوابة رياضيات
* بوابة علم الحاسوب