Transcript تحميل

Slide 1

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 2

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 3

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 4

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 5

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 6

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 7

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 8

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 9

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 10

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 11

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 12

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 13

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 14

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 15

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 16

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 17

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 18

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net


Slide 19

‫حبوث معليات‬
‫احملارضة العارشة‬
‫لكية العلوم –قسم الرايضيات ‪-‬جامعة دمشق‬
‫‪2014-2013‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬وتقوم هذه المسألة بإسناد 𝑚وظيفة الى 𝑛 شخص وذلك بأقل كلفة‬
‫حيث كلفة شغل الشخص 𝑖للوظيفة 𝑗 هي 𝑗𝑖𝑐‬
‫‪ ‬تعتبر مسألة اإلسناد برنامج خطي لذلك يمكن حلها باستخدام طريقة‬
‫السمبلكس‬
‫‪ ‬كذلك يمكن اعتبارها مسألة نقل بالتالي يمكن حلها باستخدام خوارزمية‬
‫السمبلكس المعدلة (تحريك الحجر)‬
‫‪ ‬بما أن لمسالة اإلسناد شكل خاص لذلك هناك عدة طرق لحلها بوقت قياسي‬
‫ومن أفضل هذه الطرق(ومن أقدم الطرق أيضا)الطريقة الهنغارية‪.‬‬

‫مسألة اإلسناد ‪assignment problem‬‬
‫‪ ‬النموذج الرياضي للمسألة‪:‬‬

‫𝑚‬

‫𝑛‬

‫= 𝑧 𝑛𝑖𝑀‬

‫𝑗𝑖𝑥 ‪𝑐𝑖𝑗 .‬‬
‫‪𝑖=1 𝑗=1‬‬

‫شرط الشخص ‪≤ 1‬‬

‫𝑚‬
‫𝑗𝑖𝑥 ‪𝑗=1‬‬
‫𝑛‬
‫𝑗𝑖𝑥 ‪𝑖=1‬‬

‫‪S.T:‬‬

‫شرط شغل الوظيفة‪= 1‬‬
‫𝑚 ‪𝑥𝑖𝑗 ∈ 0,1 ; 𝑖 = 1,2, … , 𝑛 𝑗 = 1,2, … ,‬‬

‫مسألة‬
‫‪ ‬بفرض لدينا أربع أشخاص نريد أن ننفذ ثالث وظائف يعطى كلفة قيام كل‬
‫شخص للوظائف بالجدول التالي‪:‬‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬
‫‪C‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نضيف وظيفة وهمية ‪D‬كلفة قيام أي شخص بها صفر‬
‫‪A‬‬

‫‪1‬‬

‫الوظائف‬
‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪16‬‬

‫‪36‬‬

‫‪50‬‬

‫‪1‬‬

‫‪0‬‬

‫‪18‬‬

‫‪30‬‬

‫‪28‬‬

‫‪2‬‬

‫‪0‬‬

‫‪20‬‬

‫‪32‬‬

‫‪35‬‬

‫‪3‬‬

‫‪0‬‬

‫‪14‬‬

‫‪25‬‬

‫‪25‬‬

‫‪4‬‬

‫‪B‬‬

‫‪2‬‬

‫‪C‬‬

‫‪3‬‬

‫‪D‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل سطر اصغر قيمة و نطرحها من جميع عناصر السطر‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0 -0‬‬

‫‪16-0‬‬

‫‪36 -0‬‬

‫‪50 -0‬‬

‫‪1‬‬

‫‪0 -0‬‬

‫‪18-0‬‬

‫‪30 -0‬‬

‫‪28 -0‬‬

‫‪2‬‬

‫‪0 -0‬‬

‫‪20-0‬‬

‫‪32 -0‬‬

‫‪35 -0‬‬

‫‪3‬‬

‫‪0 -0‬‬

‫‪14 -0‬‬

‫‪25 -0‬‬

‫‪25 -0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد في كل عمود اصغر قيمة و نطرحها من جميع عناصر العمود‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0-0‬‬

‫‪16 -14‬‬

‫‪36-25‬‬

‫‪50 -25‬‬

‫‪1‬‬

‫‪0-0‬‬

‫‪18 -14‬‬

‫‪30-25‬‬

‫‪28 -25‬‬

‫‪2‬‬

‫‪0-0‬‬

‫‪20 -14‬‬

‫‪32-25‬‬

‫‪35 -25‬‬

‫‪3‬‬

‫‪0-0‬‬

‫‪14 -14‬‬

‫‪25-25‬‬

‫‪25 -25‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بعد طرح أصغر قيمة في كل سطر وكل عمود ينتج لدينا الجدول التالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نرسم اقل عدد من الخطوط بحيث نغطي جميع االصفار‪.‬‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬بما ان عدد الخطوط أقل من عدد الوظائف بقوم بالخطوات التالية‬
‫نحدد أصغر عدد في الخاليا غير المغطى بخط‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2‬‬

‫‪11‬‬

‫‪25‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6‬‬

‫‪7‬‬

‫‪10‬‬

‫‪3‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نطرح هذه القيمة من جميع الخاليا غير المغطاة ونضيفها للخاليا المغطاة‬
‫بخطين‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪2-2‬‬

‫‪11-2‬‬

‫‪25-2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪4-2‬‬

‫‪5-2‬‬

‫‪3-2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪6-2‬‬

‫‪7-2‬‬

‫‪10-2‬‬

‫‪3‬‬

‫‪0+2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نعيد الخطوات السابقة ونرسم اقل عدد من الخطوط يغطي جميع األصفار‪.‬‬
‫عدد الوظائف أيضا أقل من عدد الوظائف تنابع الخطوات السابقة‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪9‬‬

‫‪23‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3‬‬

‫‪1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5‬‬

‫‪8‬‬

‫‪3‬‬

‫‪2‬‬

‫‪0‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬نحدد أصغر عدد غير مغطى بخط ونطرحه من الخاليا غير المغطاة بأي‬
‫خط ونضيفه للخاليا المغطاة بخطين‬
‫الوظائف‬

‫األشخاص‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫‪0‬‬

‫‪0‬‬

‫‪9 -1‬‬

‫‪23 -1‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪3 -1‬‬

‫‪1 -1‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪5 -1‬‬

‫‪8 -1‬‬

‫‪3‬‬

‫‪2 +1‬‬

‫‪0 +1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫خطوات خوارزمية الطريقة اهلنغارية‬
‫‪ ‬يصبح الجدول كالتالي‬
‫ان الخطوط التي تغطي األصفار أربعة وهي‬
‫الوظائف‬

‫‪D‬‬

‫‪C‬‬

‫‪B‬‬

‫‪A‬‬

‫األشخاص‬

‫‪0‬‬

‫‪0‬‬

‫‪8‬‬

‫‪22‬‬

‫‪1‬‬

‫‪0‬‬

‫‪2‬‬

‫‪2‬‬

‫‪0‬‬

‫‪2‬‬

‫‪0‬‬

‫‪4‬‬

‫‪4‬‬

‫‪7‬‬

‫‪3‬‬

‫‪3‬‬

‫‪1‬‬

‫‪0‬‬

‫‪0‬‬

‫‪4‬‬

‫احلل النهائي‬
‫‪ ‬يتعين الحل من األصفار المقابلة لكل شخص ‪،‬وهي كالتالي‬
‫الشخص األول يمكن أن يقوم بالوظيفة ‪C&D‬‬
‫الشخص الثاني يمكن أن يقوم بالوظيفة ‪A&D‬‬
‫الشخص الثالث يمكن أن يقوم بالوظيفة ‪D‬‬
‫الشخص الرابع يمكن أن يقوم بالوظيفة‪A&B‬‬

‫احلل األمثل‬

‫الشخص الثالث يقوم بالوظيفة ‪(D‬وظيفة وهمية اي ال يقوم بأي وظيفة)‬
‫الشخص األول يقوم بالوظيفة ‪C‬‬
‫الشخص الثاني يقوم بالوظيفة ‪A‬‬
‫الشخص الرابع يقوم بالوظيفة ‪B‬‬

‫كلفة احلل‬
‫‪ 𝑀𝑖𝑛 𝑧 = 𝑐13 + 𝑐21 + 𝑐41 = 16 + 28 + 25 = 68‬‬

‫تلخيص اخلطوات السابقة‪:‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

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

‫‪ ‬ويكون الحل كل شخص يمكنه القيام بالوظائف ذات القيمة صفر في الجدول‬
‫النهائي‪.‬‬
‫‪ ‬في حال إضافة وظيفة وهمية فان الشخص الذي يقوم بهذه الوظيفة فإنه فعليا‬
‫ال يقوم بأي وظيفة ألنها وهمية‪.‬‬

‫انتهت احملاضرة‬
[email protected]
www.SyriaMath.net