مشكلة حقيبة الظهر وتحسينها باستخدام Python - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: مشكلة حقيبة الظهر وتحسينها باستخدام Python

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: example

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

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

يشرح النص وظائف مكتبة mip الرئيسية، مثل `add_var` لإنشاء متغيرات ثنائية، و`maximize` لزيادة الدالة الموضوعية، و`xsum` لإنشاء تعبيرات رياضية تتضمن مجاميع، و`optimize` لإيجاد الحل الأمثل باستخدام برمجة الأعداد الصحيحة المختلطة.

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

تختتم الصفحة بمعلومات تعريفية تشمل شعار وزارة التعليم ورقم الصفحة 285 والتواريخ 2023-1447، مما يشير إلى أنها جزء من كتاب دراسي سعودي.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

Python Code for Knapsack Problem Optimization

نوع: محتوى تعليمي

C = 40 # knapsack capacity I = range(len(values)) # creates an index for each item: 0,1,2,3,... solver = Model("knapsack") # creates a knapsack solver solver.verbose = 0 # setting this to 1 will print more information on the progress of the solver x = [] # represents the binary decision variables for each item. # for each items creates and appends a binary decision variable for i in I: x.append(solver.add_var(var_type = BINARY)) # creates the objective function solver.objective = maximize(xsum(values[i] * x[i] for i in I)) # adds the capacity constraint to the solver solver += xsum(weights[i] * x[i] for i in I) <= C # solves the problem solver.optimize()

Optimization Status Output

نوع: محتوى تعليمي

<OptimizationStatus.OPTIMAL: 0>

Explanation of mip Library Functions

نوع: محتوى تعليمي

يُنشئ المقطع البرمجي القائمة x لتخزين متغيرات القرار الثنائية للعناصر، وتُوفّر المكتبة mip في البايثون ما يلي: • أداة ()add_var (var_type = BINARY) لإنشاء المتغيرات الثنائية وإضافتها إلى خوارزمية الحل. • أداة ()maximize لمشكلات التحسين التي تحتاج لزيادة دالة موضوعية، أما مشكلات التحسين التي تتطلب تصغير الدالة الموضوعية، فتستخدم الأداة ()minimize. • أداة ()xsum لإنشاء التعبيرات الرياضية التي تتضمن المجاميع (sums)، وفي المثال السابق تم استخدام هذه الأداة لحساب مجموع الوزن الإجمالي للعناصر في إنشاء قيد السعة وحله. • أداة ()optimize لإيجاد حل يحسن الدالة الموضوعية في ظل الالتزام بالقيود، وتستخدم الأداة برمجة الأعداد الصحيحة المختلطة للنظر بكفاءة في توليفات القيم المختلفة لمتغيرات القرار ولإيجاد التوليفة التي تُحسّن الهدف. • المعامل = + لإضافة قيود إضافية إلى خوارزمية الحل الموجودة.

Further Explanation of Decision Variables and Solution

نوع: محتوى تعليمي

في المقطع البرمجي أدناه تحتوي القائمة x على متغير ثنائي واحد لكل عنصر، وبعد حساب الحل سيكون كل متغير مساويًا للواحد إذا أُدرج العنصر في الحل، ويُساوي صفرًا بخلاف ذلك. تُستخدم المكتبة mip بناء الجملة x.[i] لإظهار القيمة الثنائية للعنصر ذي الفهرس i، وتحسب خوارزمية الحل متغير x، ثم تجد القيمة الإجمالية والوزن الإجمالي للعناصر المنتقاة عن طريق التكرار على متغير القرار x، وتجمع الأوزان والقيم لكل عنصر منتقى i، استنادًا إلى x[i]، وتُعرضها كما هو موضح في المقطع البرمجي التالي:

Calculating Total Weight and Value

نوع: محتوى تعليمي

total_weight = 0 # stores the total weight of the items in the solution total_value = 0 # stores the total value of the items in the solution

Page Footer

نوع: METADATA

وزارة التعليم Ministry of Education 285 2023 - 1447

🔍 عناصر مرئية

Ministry of Education Logo and Page Information

A stylized logo with Arabic text 'وزارة التعليم' and English text 'Ministry of Education', accompanied by the page number '285' and the corresponding Gregorian and Hijri years '2023 - 1447'.

📄 النص الكامل للصفحة

--- SECTION: Python Code for Knapsack Problem Optimization --- C = 40 # knapsack capacity I = range(len(values)) # creates an index for each item: 0,1,2,3,... solver = Model("knapsack") # creates a knapsack solver solver.verbose = 0 # setting this to 1 will print more information on the progress of the solver x = [] # represents the binary decision variables for each item. # for each items creates and appends a binary decision variable for i in I: x.append(solver.add_var(var_type = BINARY)) # creates the objective function solver.objective = maximize(xsum(values[i] * x[i] for i in I)) # adds the capacity constraint to the solver solver += xsum(weights[i] * x[i] for i in I) <= C # solves the problem solver.optimize() --- SECTION: Optimization Status Output --- <OptimizationStatus.OPTIMAL: 0> --- SECTION: Explanation of mip Library Functions --- يُنشئ المقطع البرمجي القائمة x لتخزين متغيرات القرار الثنائية للعناصر، وتُوفّر المكتبة mip في البايثون ما يلي: • أداة ()add_var (var_type = BINARY) لإنشاء المتغيرات الثنائية وإضافتها إلى خوارزمية الحل. • أداة ()maximize لمشكلات التحسين التي تحتاج لزيادة دالة موضوعية، أما مشكلات التحسين التي تتطلب تصغير الدالة الموضوعية، فتستخدم الأداة ()minimize. • أداة ()xsum لإنشاء التعبيرات الرياضية التي تتضمن المجاميع (sums)، وفي المثال السابق تم استخدام هذه الأداة لحساب مجموع الوزن الإجمالي للعناصر في إنشاء قيد السعة وحله. • أداة ()optimize لإيجاد حل يحسن الدالة الموضوعية في ظل الالتزام بالقيود، وتستخدم الأداة برمجة الأعداد الصحيحة المختلطة للنظر بكفاءة في توليفات القيم المختلفة لمتغيرات القرار ولإيجاد التوليفة التي تُحسّن الهدف. • المعامل = + لإضافة قيود إضافية إلى خوارزمية الحل الموجودة. --- SECTION: Further Explanation of Decision Variables and Solution --- في المقطع البرمجي أدناه تحتوي القائمة x على متغير ثنائي واحد لكل عنصر، وبعد حساب الحل سيكون كل متغير مساويًا للواحد إذا أُدرج العنصر في الحل، ويُساوي صفرًا بخلاف ذلك. تُستخدم المكتبة mip بناء الجملة x.[i] لإظهار القيمة الثنائية للعنصر ذي الفهرس i، وتحسب خوارزمية الحل متغير x، ثم تجد القيمة الإجمالية والوزن الإجمالي للعناصر المنتقاة عن طريق التكرار على متغير القرار x، وتجمع الأوزان والقيم لكل عنصر منتقى i، استنادًا إلى x[i]، وتُعرضها كما هو موضح في المقطع البرمجي التالي: --- SECTION: Calculating Total Weight and Value --- total_weight = 0 # stores the total weight of the items in the solution total_value = 0 # stores the total value of the items in the solution --- SECTION: Page Footer --- وزارة التعليم Ministry of Education 285 2023 - 1447 --- VISUAL CONTEXT --- **IMAGE**: Ministry of Education Logo and Page Information Description: A stylized logo with Arabic text 'وزارة التعليم' and English text 'Ministry of Education', accompanied by the page number '285' and the corresponding Gregorian and Hijri years '2023 - 1447'. Table Structure: Headers: N/A Data: No data points, it's a logo and textual metadata. Key Values: 285, 2023, 1447 Context: Provides source identification and page numbering for the textbook.

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 5 بطاقة لهذه الصفحة

ما هي الأداة المستخدمة في مكتبة `mip` لإنشاء متغيرات قرار ثنائية وإضافتها إلى خوارزمية الحل؟

الإجابة: الأداة المستخدمة هي `add_var(var_type = BINARY)`.

الشرح: تُستخدم الأداة `add_var` مع تحديد `var_type = BINARY` لتعريف المتغيرات التي يمكن أن تأخذ قيمتين فقط (0 أو 1)، وهي ضرورية في مسائل مثل مشكلة حقيبة الظهر حيث نقرر إما أخذ العنصر أو عدم أخذه.

تلميح: ابحث عن اسم الأداة التي تقوم بإنشاء متغيرات من نوع ثنائي.

لحل مشكلة تحسين تسعى إلى زيادة دالة موضوعية، أي أداة في مكتبة `mip` تُستخدم؟

الإجابة: تُستخدم الأداة `maximize`.

الشرح: عندما يكون الهدف هو العثور على أكبر قيمة ممكنة للدالة الموضوعية (مثل زيادة الربح الإجمالي)، يتم استخدام الدالة `maximize` في مكتبة `mip`.

تلميح: ما هي الكلمة التي تعبر عن زيادة شيء ما؟

ما هو الغرض من الأداة `xsum` في مكتبة `mip` عند استخدامها في سياق مشكلة حقيبة الظهر؟

الإجابة: تُستخدم الأداة `xsum` لإنشاء التعبيرات الرياضية التي تتضمن المجاميع (sums)، وفي هذا السياق تُستخدم لحساب مجموع الأوزان الإجمالية للعناصر المختارة.

الشرح: في مشكلة حقيبة الظهر، نحتاج إلى حساب الوزن الإجمالي للعناصر التي سنختارها. الأداة `xsum` تساعد في جمع حاصل ضرب قيمة كل عنصر بمتغير القرار الخاص به (إما 0 أو 1)، مما يعطينا الوزن أو القيمة الإجمالية.

تلميح: فكر في كيف تجمع مكتبة `mip` قيم متعددة لإنشاء تعبير رياضي واحد.

ماذا يمثل كل متغير ثنائي في القائمة `x` بعد حل مشكلة حقيبة الظهر باستخدام مكتبة `mip`؟

الإجابة: كل متغير ثنائي في القائمة `x` يمثل قرارًا بشأن عنصر معين: إذا كان المتغير يساوي 1، فهذا يعني أن العنصر أُدرج في الحل (تم اختياره)؛ وإذا كان يساوي 0، فهذا يعني أن العنصر لم يُدرج (لم يُختر).

الشرح: المتغيرات الثنائية (BINARY) مصممة لتمثيل خيارات 'نعم' أو 'لا'. في مشكلة حقيبة الظهر، 'نعم' تعني اختيار العنصر و'لا' تعني عدم اختياره.

تلميح: ما هي طبيعة المتغيرات التي استخدمناها لتمثيل اختيار العناصر؟

كيف يتم حساب القيمة الإجمالية والوزن الإجمالي للعناصر المنتقاة بعد الحصول على الحل في مشكلة حقيبة الظهر؟

الإجابة: يتم حساب القيمة الإجمالية والوزن الإجمالي عن طريق التكرار على متغيرات القرار `x`، وجمع الأوزان والقيم لكل عنصر `i` مضروبة في قيمة متغير القرار الخاص به `x[i]`.

الشرح: لكل عنصر، نضرب وزنه/قيمته في قيمة متغير القرار المقابل له (0 أو 1). إذا كان المتغير 1، فإن الوزن/القيمة الكاملة للعنصر تُضاف إلى المجموع. إذا كان المتغير 0، فإن الوزن/القيمة تُضاف بصفر.

تلميح: فكر في العلاقة بين قيمة العنصر ووزنه، وقرار إدراجه في الحقيبة.