05/03/2026
خوارزمية السمبلكس (The Simplex Algorithm)
سنقوم الآن بشرح كيفية استخدام خوارزمية السمبلكس لحل مسائل البرمجة الخطية (LP) التي يكون الهدف فيها تعظيم دالة الهدف. أما مسائل التصغير فسيتم تناولها في القسم (4.4).
خطوات خوارزمية السمبلكس:
الخطوة 1: تحويل نموذج البرمجة الخطية إلى الصيغة القياسية (Standard Form).
الخطوة 2: إيجاد حل أساسي ممكن (Basic Feasible Solution - BFS) إن أمكن.
الخطوة 3: التحقق مما إذا كان الحل الحالي أمثل (Optimal).
الخطوة 4: إذا لم يكن الحل أمثل، يتم تحديد:
المتغير غير الأساسي الذي سيدخل الأساس (Entering Variable)
والمتغير الأساسي الذي سيخرج منه (Leaving Variable)
وذلك للحصول على حل جديد أفضل.
الخطوة 5: استخدام عمليات الصفوف الابتدائية (Elementary Row Operations - EROs) لإيجاد الحل الجديد، ثم العودة إلى الخطوة (3).
صياغة دالة الهدف
تُكتب دالة الهدف بالشكل:
z=c
1
x
1
+c
2
x
2
+⋯+c
n
x
n
ثم تُحوَّل إلى ما يُعرف بـ صيغة الصف صفر (Row 0):
z−c
1
x
1
−c
2
x
2
−⋯−c
n
x
n
=0
مثال تطبيقي: شركة داكوتا للأثاث (Dakota Furniture Company)
تقوم الشركة بإنتاج:
مكاتب (Desks)
طاولات (Tables)
كراسي (Chairs)
الموارد المتاحة:
الخشب: 48 قدم لوحي
التشطيب: 20 ساعة
النجارة: 8 ساعات
الأرباح:
المكتب: 60 دولار
الطاولة: 30 دولار
الكرسي: 20 دولار
تعريف المتغيرات:
x
1
: عدد المكاتب
x
2
: عدد الطاولات
x
3
: عدد الكراسي
نموذج البرمجة الخطية:
تعظيم z=60x
1
+30x
2
+20x
3
القيود:
8x
1
+6x
2
+x
3
≤48(الخشب)
4x
1
+2x
2
+1.5x
3
≤20(التشطيب)
2x
1
+1.5x
2
+0.5x
3
≤8(النجارة)
x
2
≤5(الطلب)
x
1
,x
2
,x
3
≥0
التحويل إلى الصيغة القياسية
نضيف متغيرات فائض (Slack Variables):
s
1
,s
2
,s
3
,s
4
وتصبح دالة الهدف:
z−60x
1
−30x
2
−20x
3
=0
الحل الأساسي الأولي (Initial BFS)
بافتراض:
x
1
=x
2
=x
3
=0
نحصل على:
s
1
=48
s
2
=20
s
3
=8
s
4
=5
وقيمة الدالة:
z=0
اختبار المثالية (Optimality Test)
نقوم بإعادة كتابة:
z=60x
1
+30x
2
+20x
3
نلاحظ أن:
زيادة x
1
تزيد z بمقدار 60
زيادة x
2
تزيد z بمقدار 30
زيادة x
3
تزيد z بمقدار 20
➡️ إذن أفضل متغير للدخول هو:
x
1
(لأنه يحقق أكبر زيادة)
اختبار النسبة (Ratio Test)
نحسب الحد الأقصى لزيادة x
1
:
8
48
=6
4
20
=5
2
8
=4
➡️ أصغر قيمة = 4 → الصف الثالث هو الفائز
المحور (Pivoting)
ندخل x
1
ونخرج s
3
➡️ الحل الجديد:
x
1
=4
z=240
التكرار الثاني
نحدد المتغير الداخل:
➡️ x
3
(لأنه يحسن قيمة z)
نطبق اختبار النسبة:
0.5
4
=8
➡️ الصف الثاني يفوز
الحل الجديد:
x
1
=2
x
3
=8
z=280
اختبار المثالية النهائي
z=280−5x
2
−10s
2
−10s
3
جميع معاملات المتغيرات غير الأساسية سالبة أو صفر:
➡️ لا يمكن تحسين z
✅ الحل الأمثل:
x
1
=2 (مكتبين)
x
2
=0 (لا طاولات)
x
3
=8 (8 كراسي)
الربح الأقصى = 280 دولار
قاعدة المثالية (للمسائل التعظيمية):
يكون الحل أمثل إذا كانت جميع معاملات المتغيرات غير الأساسية في الصف صفر ≥ 0
متى يكون الحل أمثل في طريقة السمبلكس؟
✅ القاعدة الأساسية:
🔹 يكون الحل أمثل (Optimal) في مسألة التعظيم إذا:
👉 جميع معاملات المتغيرات غير الأساسية (Nonbasic Variables)
في الصف (Row 0) غير سالبة (≥ 0)
🧠 ماذا يعني ذلك؟
إذا كان هناك أي معامل سالب في الصف 0
➜ يمكن تحسين قيمة الدالة الهدف Z
إذا كانت كل المعاملات ≥ 0
➜ لا يمكن تحسين Z
➜ ✅ الحل الحالي هو الحل الأمثل
📊 مفهوم مهم: التكلفة المختزلة (Reduced Cost)
🔹 التعريف:
هي معامل المتغير في الصف 0
🔹 التفسير:
👉 تمثل مقدار التغير في Z عند زيادة المتغير بوحدة واحدة
💡 مثال:
إذا كانت التكلفة المختزلة لـ x
2
=5
👉 هذا يعني:
➡️ زيادة x
2
بمقدار 1
➡️ تؤدي إلى انخفاض Z بمقدار 5
⚠️ ملاحظات مهمة
1️⃣ المتغيرات الأساسية (Basic Variables)
دائمًا معاملها في الصف 0 = 0
لذلك:
👉 تكلفتها المختزلة = 0
2️⃣ تفسير الحل النهائي (مثال داكوتا)
x
1
=2 (مكاتب)
x
3
=8 (كراسي)
x
2
=0 (طاولات)
👉 إذن:
لا يتم إنتاج طاولات
الموارد المستخدمة بالكامل في بعض القيود
3️⃣ اختيار المتغير الداخل (Entering Variable)
القاعدة:
👉 اختر المتغير ذو أكثر معامل سالب
⚠️ لكن:
ليس شرطًا أن يكون الأسرع للوصول للحل الأمثل
أي متغير سالب سيقود في النهاية للحل
4️⃣ اختبار النسبة (Ratio Test)
🎯 الهدف:
تحديد أي صف سيتم عليه Pivot
📌 القاعدة:
نحسب النسبة فقط عندما:
👉 معامل المتغير الداخل > 0
نختار:
👉 أصغر نسبة موجبة
🔁 ملخص خوارزمية السمبلكس (تعظيم)
🧩 الخطوات:
تحويل النموذج إلى الصيغة القياسية
إيجاد حل أساسي ممكن (BFS)
فحص الصف 0:
إذا كل المعاملات ≥ 0 → ✅ الحل أمثل
إذا يوجد سالب → ننتقل للخطوة 4
اختيار:
المتغير الداخل (أكثر سالب)
الصف المحوري (Ratio Test)
تنفيذ Pivot (عمليات الصفوف)
🔁 تكرار حتى الوصول للحل الأمثل
🚨 تحذير مهم
❌ إذا ظهر:
👉 طرف أي قيد سالب (RHS < 0)
➡️ هذا يعني:
لا يوجد حل أساسي ممكن
غالبًا يوجد خطأ في الحسابات
🎨 تمثيل بصري سريع
Row 0 coefficients:
x1 x2 x3 s1 s2
0 5 0 0 0
✔ جميعها ≥ 0
➡️ الحل أمثل ✅