📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
نوع: محتوى تعليمي
تُستخدم الدالة random.randint (x,y) لتوليد عدد صحيح عشوائي بين X و Y. وهناك طريقة مختلفة لاستخدام هذه الدالة تتمثل في توفير قائمة [X,Y] أو مجموعة (X,Y). وفي هذه الحالة لا بد من كتابة الرمز * قبل القائمة، كما هو موضح في الدالة السابقة، على سبيل المثال:
نوع: محتوى تعليمي
for i in range(5): # prints 5 random integers between 1 and 10
print(random.randint(*[1, 10]))
نوع: محتوى تعليمي
6
5
5
10
1
نوع: محتوى تعليمي
يُستخدم المقطع البرمجي التالي دالة ()create_problem_instance لتوليد نسخة لمشكلة يتوفر فيها ما يلي:
نوع: محتوى تعليمي
• تشتمل كل نسخة على عشرة مهام.
• يمكن لكل مهمة أن تستمر ما بين 5 وحدات زمنية و 20 وحدة زمنية، وسيتم افتراض أن الساعة هي الوحدة الزمنية المستخدمة فيما تبقى من هذا الدرس.
• كل مهمة لها موعد نهائي يتراوح ما بين 5 ساعات و 50 ساعة، وتبدأ ساعة الموعد النهائي من لحظة بدء المهمة الأولى في استخدام الآلة، على سبيل المثال: إذا كان الموعد النهائي لمهمة ما يساوي عشر ساعات، فهذا يعني أنه لا بد من إكمال المهمة في غضون عشر ساعات من بداية المهمة الأولى في الجدول.
• وزن كل مهمة هو عدد صحيح يتراوح بين 1 و 3.
نوع: محتوى تعليمي
create_problem_instance(10, [5, 20], [5, 50], [1, 3])
نوع: محتوى تعليمي
{'durations': [18, 17, 6, 9, 6, 20, 12, 9, 19],
'deadlines': [39, 31, 6, 42, 48, 10, 39, 16, 34, 35],
'weights': [2, 2, 3, 2, 1, 3, 2, 1, 1]}
نوع: محتوى تعليمي
يُمكن استخدام الدالة التالية لتقييم جودة أي جدول أنتجته إحدى الخوارزميات لنسخة مشكلة محددة. حيث تقبل الدالة نسخة المشكلة وجدولاً لمهامها، ثم تمر على كل المهام بترتيب جدولتها نفسه حتى تُحسب أزمنة إنجازها ومجموع التباطؤ الموزون لكامل الجدول. ويُحسب هذا التباطؤ بحساب تباطؤ كل مهمة (مع مراعاة الموعد النهائي لها) وضربه في وزن المهمة وإضافة الناتج إلى المجموع:
نوع: محتوى تعليمي
# computes the total weighted tardiness of a given problem instance
def compute_schedule_tardiness(problem, schedule):
# gets the information for this problem
durations, weights, deadlines=problem['durations'], problem['weights'], problem['deadlines']
job_num = len(schedule) # gets the number of jobs
finish_times = [0] * job_num # stores the finish time for each job
schedule_tardiness = 0 # initializes the weighted tardiness of the overall schedule to 0
for pos in range(job_num): # goes over the jobs in scheduled order
نوع: METADATA
وزارة التعليم
Ministry of Education
2023 - 1447
نوع: METADATA
270
🔍 عناصر مرئية
مخطط توضيحي لدالة create_problem_instance
A diagram illustrating the input parameters for the `create_problem_instance` function. It shows four labeled boxes connected by lines to the corresponding arguments in the function call.
📄 النص الكامل للصفحة
تُستخدم الدالة random.randint (x,y) لتوليد عدد صحيح عشوائي بين X و Y. وهناك طريقة مختلفة لاستخدام هذه الدالة تتمثل في توفير قائمة [X,Y] أو مجموعة (X,Y). وفي هذه الحالة لا بد من كتابة الرمز * قبل القائمة، كما هو موضح في الدالة السابقة، على سبيل المثال:for i in range(5): # prints 5 random integers between 1 and 10
print(random.randint(*[1, 10]))يُستخدم المقطع البرمجي التالي دالة ()create_problem_instance لتوليد نسخة لمشكلة يتوفر فيها ما يلي:• تشتمل كل نسخة على عشرة مهام.
• يمكن لكل مهمة أن تستمر ما بين 5 وحدات زمنية و 20 وحدة زمنية، وسيتم افتراض أن الساعة هي الوحدة الزمنية المستخدمة فيما تبقى من هذا الدرس.
• كل مهمة لها موعد نهائي يتراوح ما بين 5 ساعات و 50 ساعة، وتبدأ ساعة الموعد النهائي من لحظة بدء المهمة الأولى في استخدام الآلة، على سبيل المثال: إذا كان الموعد النهائي لمهمة ما يساوي عشر ساعات، فهذا يعني أنه لا بد من إكمال المهمة في غضون عشر ساعات من بداية المهمة الأولى في الجدول.
• وزن كل مهمة هو عدد صحيح يتراوح بين 1 و 3.create_problem_instance(10, [5, 20], [5, 50], [1, 3]){'durations': [18, 17, 6, 9, 6, 20, 12, 9, 19],
'deadlines': [39, 31, 6, 42, 48, 10, 39, 16, 34, 35],
'weights': [2, 2, 3, 2, 1, 3, 2, 1, 1]}يُمكن استخدام الدالة التالية لتقييم جودة أي جدول أنتجته إحدى الخوارزميات لنسخة مشكلة محددة. حيث تقبل الدالة نسخة المشكلة وجدولاً لمهامها، ثم تمر على كل المهام بترتيب جدولتها نفسه حتى تُحسب أزمنة إنجازها ومجموع التباطؤ الموزون لكامل الجدول. ويُحسب هذا التباطؤ بحساب تباطؤ كل مهمة (مع مراعاة الموعد النهائي لها) وضربه في وزن المهمة وإضافة الناتج إلى المجموع:# computes the total weighted tardiness of a given problem instance def compute_schedule_tardiness(problem, schedule):
# gets the information for this problem durations, weights, deadlines=problem['durations'], problem['weights'], problem['deadlines']
job_num = len(schedule) # gets the number of jobs finish_times = [0] * job_num # stores the finish time for each job schedule_tardiness = 0 # initializes the weighted tardiness of the overall schedule to 0
for pos in range(job_num): # goes over the jobs in scheduled order2023 - 1447--- VISUAL CONTEXT ---
**DIAGRAM**: مخطط توضيحي لدالة create_problem_instance Description: A diagram illustrating the input parameters for the `create_problem_instance` function. It shows four labeled boxes connected by lines to the corresponding arguments in the function call.
Key Values: عدد المهام المراد إنشاؤها (Number of tasks to be created) -> 10, نطاق مدة المهمة (Task duration range) -> [5, 20], نطاق الموعد النهائي (Deadline range) -> [5, 50], مدى أهمية الوزن (Weight importance range) -> [1, 3]
Context: This diagram visually explains the meaning and order of the parameters passed to the `create_problem_instance` function, which is used to generate a specific problem instance for task scheduling.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هي الوظيفة الأساسية للدالة `random.randint(x, y)`؟
الإجابة: تُستخدم لتوليد عدد صحيح عشوائي ضمن النطاق المحدد بين X و Y (بما في ذلك X و Y).
الشرح: هذه الدالة هي طريقة شائعة في العديد من لغات البرمجة لتوليد قيم رقمية غير متوقعة ضمن نطاق معين.
تلميح: فكر في الغرض الرئيسي من استخدام الأعداد العشوائية في البرمجة.
متى يجب استخدام الرمز `*` قبل قائمة أو مجموعة عند استخدام الدالة `random.randint`؟
الإجابة: يجب استخدام الرمز `*` قبل القائمة `[X, Y]` أو المجموعة `(X, Y)` التي تمثل نطاق الأعداد العشوائية، وذلك لفصل عناصر القائمة/المجموعة وجعلها وسائط منفصلة للدالة.
الشرح: بدون الرمز `*`، قد تفسر الدالة القائمة أو المجموعة كوُسط واحد بدلاً من نطاق محدد من القيم.
تلميح: فكّر في كيفية معالجة الدوال للقوائم أو المجموعات كوحدة واحدة مقابل معالجتها كعناصر فردية.
ما هو الغرض من الدالة `create_problem_instance` في سياق جدولة المهام؟
الإجابة: تُستخدم لتوليد نسخة لمشكلة جدولة مهام، حيث تحدد خصائص كل مهمة مثل عدد المهام، نطاق مدتها، نطاق موعدها النهائي، ونطاق وزنها.
الشرح: هذه الدالة توفر البيانات الخام التي تستخدمها خوارزميات الجدولة المختلفة لاختبار أدائها.
تلميح: ما هي المعلومات الأساسية التي تحتاجها خوارزمية جدولة المهام لتبدأ العمل؟
إذا كانت مدة مهمة ما هي 10 وحدات زمنية، وموعدها النهائي يبدأ من لحظة بدء المهمة الأولى في الجدول، فماذا يعني موعد نهائي يساوي 20 ساعة لهذه المهمة؟
الإجابة: يعني أنه يجب إكمال هذه المهمة في غضون 20 ساعة من لحظة بدء المهمة الأولى في الجدول، وليس بعد 20 ساعة من بداية المهمة نفسها.
الشرح: الموعد النهائي هنا هو مقياس بالنسبة لبداية الجدول الكلي، وليس بداية المهمة الفردية.
تلميح: ركز على نقطة البداية المرجعية لحساب المواعيد النهائية.
كيف يُحسب "التباطؤ الموزون" (weighted tardiness) لكامل الجدول باستخدام الدالة `compute_schedule_tardiness`؟
الإجابة: يُحسب عن طريق المرور على كل مهمة في ترتيب جدولتها، وحساب تباطؤ كل مهمة (مع الأخذ في الاعتبار موعدها النهائي)، وضرب هذا التباطؤ في وزن المهمة، ثم جمع نواتج الضرب هذه لكل المهام.
الشرح: هذه العملية تمنح أهمية أكبر للمهام ذات الوزن الأكبر عند حساب إجمالي التباطؤ.
تلميح: ما هي العوامل الثلاثة الرئيسية التي تؤثر في تقييم جودة الجدول وفقًا لهذه الدالة؟