לנטיב
שַׁבֵּץ-טִיב 2020
עמוד הבית > מדריך למשתמש > אילוצים

 אילוצים

האיכות של מערכת שעות שנבנית באופן אוטומטי נמדדת על-ידי כמה היא נוחה ומתאימה לאנשים המעורבים, ובאיזו מידת יעילות היא מנצלת את המשאבים העומדים לרשותם. הפרמטרים המגדירים את הקריטריונים הללו נקראים אילוצים.

Constraints goals illustration shabetz8.png

ישנם סוגים רבים של אילוצים אשר התוכנה תומכת בהם, ולמעשה, אנו כבר נתקלנו בחלק מהם בפרקים הקודמים. זאת מאחר וחלק מהאילוצים הם בסיסיים ונלקחים בחשבון גם במצב האינטראקטיבי של בניית המערכת, לעומת אחרים אשר נועדו לייעול המערכת ובהם התוכנה מתחשבת רק בזמן הבנייה האוטומטית.

אך לפני שנכיר את הסוג החדש של האילוצים, הבה נעבור על אלו שכבר למדנו עליהם בפרקים הקודמים על מנת שתהיה לנו רשימה אחת חדה וברורה של כל האילוצים שנלקחים בחשבון בזמן האוטומציה.

Contents

אילוצים בסיסיים

התוכנה מתחשבת בכל האילוצים שנזכיר בפרק זה בעת הבנייה האוטומטית, אבל באלה שעליהם נעבור בסעיף זה כבר נתקלנו בעבר, וכפי שראינו הם מוזנים בלשונית "מערכת שעות" (בתחתית סביבת העבודה) ולא בלשונית "אילוצים" הייחודית לסוג השני של האילוצים. הבה נראה.

הערה: כל האילוצים הבסיסיים בסעיף זה נחשבים לאילוצי חובה על-ידי התוכנה בעת הבנייה האוטומטית. התוכנה לעולם לא תציע מערכת שעות שבה אחד האילוצים הללו מופר.

משך של פעילות

כפי שזכור לכם, לכל פעילות ניתן להגדיר את השדה משך ברשימת הפעילויות:

Constraint activity length shabetz8.png

המשך הוא מספר השיעורים העוקבים שאותם הפעילות צריכה "לתפוס" בכל פעם שהיא משובצת. במצב האינטראקטיבי, כאשר אתם גוררים פעילות עם משך של "2", למשל, לתוך מערכת השעות, אתם בעצם גוררים פעילות של שתי משבצות. במצב האוטומטי התוכנה עושה בדיוק את אותו הדבר - היא תמיד משבצת פעילות כזאת על פני שני שיעורים עוקבים.

Constraint length shabetz8.png

מספר משאבים בפעילות

והנה תזכורת חשובה נוספת: כל פעילות יכולה לכלול מספר משאבים מאותו סוג (על-ידי סימון "וי" ליד כל המשאבים הללו כאשר אתם ממלאים את המאפיינים של הפעילות):

Constraint activity two teachers shabetz8.png

לדוגמה, פעילות אחת יכולה לערב 2 מורים; או 3 כיתות; או 2 מורים וגם 3 כיתות. פעילות כזאת תופיע במערכות של כל המשאבים המעורבים ותשובץ אך ורק בשיעור שבו הם כולם פנויים.

Constraint multiple resources shabetz8.png

פעילויות בו זמניות

מקבצים מאפשרים לצרף יחדיו מספר פעילויות בודדות אשר צריכות להיות משובצות באותו הזמן. את המקבצים ניתן ליצור ברשימת הפעילויות והם נבדלים משאר הפעילויות בצבע שלהם ובדמיון שלהם לתיקייה המכילה מספר שורות:

Constraint set simultaneously shabetz8.png

כל אחת מהפעילויות בתוך מקבץ יכולה לכלול משאבים שונים כגון קבוצות ומורים, אך כאשר הם מאוחדים במקבץ הם בעצם הופכים להיות יחידה אחת בלתי ניתנת להפרדה והם תמיד משובצים בו זמנית על-ידי המנוע האוטומטי.

Constraint simultaneously shabetz8.png

מספר חדרים אפשריים לפעילות

באופן טבעי, כאשר פעילות יכולה להיות משובצת באחד מתוך מספר חדרים אפשריים, הדבר נותן יותר גמישות לתוכנה בזמן הבנייה האוטומטית. כפי שהוסבר קודם לכן, ניתן לבחור את החדרים הפוטנציאליים שבהם פעילות יכולה להיות משובצת בתוך המאפיין "חדר" של הפעילות על-ידי שינוי הכתובת שבתחתית רשימת החדרים מ-"כל המשאבים המסומנים" ל-"מבחר מהמשאבים המסומנים":

Constraint activity room selection shabetz8.png

כאשר לפעילות מוגדרים כמה חדרים אפשריים כמו לעיל, התוכנה תבחר אחד מהם באופן אוטומטי בזמן בניית המערכת. שימו לב שמשבצות שונות של אותה פעילות יכולות להיות משובצות בחדרים שונים.

Constraint room selection shabetz8.png

מרחקים בין חדרים ובניינים

כאשר הזמן הדרוש בשביל להגיע מחדר (או בניין) אחד לאחר הינו משמעותי, התוכנה חייבת להשאיר מרווח של שיעור אחד (או יותר; תלוי במרחק) בין שתי פעילויות עוקבות השייכות לאותו אדם (מורה או תלמיד) או קבוצה, ואשר משובצות בשני החדרים/הבניינים הללו. כפי שמוסבר בפרק "המשאבים", את המרחקים בין חדרים ובניינים ניתן להגדיר בחלון המאפיינים:

Constraint building properties distances shabetz8.png

לאחר שהמרחקים הוגדרו בצורה כזו, התוכנה תמיד תבדוק את זמני ההתחלה והסיום של השיעורים על מנת לוודא שלא שובצו שתי פעילויות אחת אחרי השניה כך שלא נותר מספיק זמן בשביל להגיע מהחדר של הפעילות הראשונה לחדר של הפעילות השניה, בהינתן המרווח שבין זמן הסיום של השיעור שבו משובצת ההפעילות הראשונה לזמן ההתחלה של השיעור שבו משובצת הפעילות השניה.

Constraint rooom distances shabetz8.png

כמות של ציוד במלאי

כפי שזכור לכם, המספר הכולל של פריטים מסוג ציוד מסויים המצויים במלאי מוגדר במאפייני הציוד:

Constraint resource equipment quantity shabetz8.png

כמות זו יוצרת מגבלה על מספר הפעילויות אשר משתמשות בציוד זה היכולות להיות משובצות באותו שיעור. לדוגמה, נתבונן בפעילות הדורשת מקרן אחד:

Constraint activity equipment shabetz8.png

במצב כזה, אם קיימים רק 2 מקרנים במלאי, התוכנה לעולם לא תוכל לשבץ באותו שיעור 3 פעילויות הדורשות מקרן.

Constraint equipment quantity shabetz8.png

שיבוץ כפול

מיותר לציין שאי אפשר לשבץ מורים, תלמידים וקבוצות בשתי פעילויות שונות באותו הזמן (אלא אם כן הפעילויות שייכות לאותו מקבץ). אמנם הדבר הזה יכול להישמע מובן מאליו, אך אנו מזכירים זאת מאחר ואילוץ זה הוא אחד ההיבטים הכי מגבילים של תהליך בניית המערכת.

Constraint double booking shabetz8.png

אי זמינות של משאבים

כפי שהוסבר בפרק העוסק בשיבוץ האינטראקטיבי, הימים והשיעורים שבהם משאבים (או פעילויות) לא זמינים לשיבוץ ניתנים לחסימה על-ידי סימון המשבצות הרלוונטיות ובחירה באפשרות "עריכה", "חסימה" בתפריט הראשי. משבצת חסומה של משאב מונעת מהתוכנה שיבוץ כל פעילות של אותו משאב במשבצת זו.

Constraint unavailability shabetz8.png

משבצות מקובעות

פעילות ששובצה במצב האינטראקטיבי יכולה להיות מקובעת (על-ידי בחירה בתפריט "עריכה", "קיבוע") ואז התוכנה לא "תיגע" בה בעת הבנייה האוטומטית. דבר זה שימושי במיוחד כאשר אתם יודעים שפעילות מסויימת חייבת להתרחש בזמן ושיעור קבועים מראש, או שאתם יודעים שזהו הזמן המיטבי לשיבוץ פעילות זו.

Constraint fixated cells shabetz8.png

אילוצים לייעול המערכת

עתה, משקיבלנו תזכורת אודות האילוצים הבסיסיים של התוכנה, אנו יכולים להתוודע לאילוצים אשר משמשים לייעול (אופטימיזציה) של המערכת. כל סוג של אילוץ כזה אחראי על היבט אחר של המערכת. הבה נעבור על הסוגים השונים ונבין מה המשמעות של כל אחד מהם.

משבצות ביום

האילוץ משבצות ביום מסכם את מספר המשבצות המשובצות ביום אחד במערכת השעות של משאב:

Constraint cells per day shabetz8.png

ישנם שני שימושים שכיחים לאילוץ זה. האחד, הוא מאפשר לכם לפזר את הפעילויות של משאב בצורה שווה על הפני השבוע. לשם המחשה, נניח שלמורה יש 10 פעילויות מתוכננות; על-ידי הגבלת כמות השיעורים ביום למורה זה ל-"2", למשל, אפשר להכריח את התוכנה לשבץ את הפעילויות של המורה על פני 5 ימים, מכיוון שבאף יום לא יתאפשר לתוכנה לשבץ יותר מ-2 פעילויות.

השימוש השני קשור למקצועות. הוא מאפשר לכם לוודא שאף מקצוע לא משובץ יותר מדי פעמים באותו יום במערכת של קבוצה. למשל, בהנחה שהמקצוע "חינוך גופני" צריך להיות משובץ 3 פעמים בשבוע, אנו לא רוצים שהוא יהיה משובץ יותר מפעם אחת ביום. לשם כך אנו נגדיר כי מספר השיעורים המקסימלי ביום של המקצוע "חינוך גופני" יהיה 1 בלבד.

חלונות

חלון הוא משבצת ריקה באמצע היום, שלפניה יש פעילות משובצת כלשהי וגם אחריה יש פעילות משובצת כלשהי:

Constraint gaps shabetz8.png

כמות החלונות של משאב ביום בודד מסוכמת על-ידי האילוץ "חלונות ביום" ואילו הכמות הכוללת של חלונות במהלך השבוע מסוכמת על-ידי האילוץ "חלונות בשבוע". קיים אילוץ נוסף הקשור לחלונות אשר נקרא "גודל חלון" אשר מסכם את מספר המשבצות הריקות העוקבות המהוות חלון, כך שאפשר גם להגביל את המספר הזה.

השימוש השכיח ביותר באילוץ החלונות נועד להגביל זמן פנוי בין פעילויות במערכות של מורים, קבוצות ותלמידים. לדוגמה, אם מורה משובץ בשיעור הראשון ואחר כך רק בשיעור השביעי, אזי יש לו 5 חלונות (5 שיעורים ריקים) במערכת. במקרים רבים, הדבר עלול להיות לא נוח עבור המורה. במקרים כאלו, הגבלת הכמות המקסימלית של חלונות ביום ל-2, למשל, תעודד את התוכנה לשבץ את הפעילויות של המורה עם מרווחים של לא יותר מ-2 שיעורים פנויים.

דלתות

דלת היא משבצת ריקה או רצף של כמה משבצות ריקות בתחילת היום. אין פעילויות משובצות לפני דלת, אך יש פעילויות אחריה. למשל, אם מורה לא מלמד שום דבר בשיעור הראשון, אך יש לו פעילות משובצת בשיעור השני, יש לו דלת ביום זה.

Constraint late starts shabetz8.png

בהקשר לדלתות קיימים בתוכנה שני סוגי אילוצים: "דלתות בשבוע" אשר מסכם את מספר הדלתות במערכת של משאב במהלך כל השבוע, ו-"גודל דלת" אשר מסכם את מספר המשבצות העוקבות (המהוות דלת) בתחילת היום. האילוץ הראשון מאפשר להגביל את מספר הפעמים שמשאב מתחיל את יום הלימודים שלו מאוחר (לדוגמה: לא יותר מ-3 דלתות בשבוע) והאילוץ השני מאפשר להגביל את המשך המקסימלי של דלת (כגון לא יותר מ-2 שיעורים ריקים בתחילת יום).

משבצות ברצף

אילוץ זה מסכם את מספר המשבצות העוקבות במערכת של משאב שבהן משובצת פעילות כלשהי:

Constraint consecutive cells shabetz8.png

השימוש הנפוץ ביותר באילוץ זה הוא לשם הגבלת האורך המקסימלי של רצף של פעילויות במערכת של משאב כלשהו. לדוגמה, על-ידי הגדרת הערך המקסימלי של אילוץ זה בתור "3" עבור מורה מסויים, אתם בעצם מבקשים מהתוכנה שהמורה לא ישובץ ביותר מ-3 שיעורים עוקבים. במצב כזה, התוכנה תהיה חייבת להשאיר שיעור חופשי אחרי המשבצת השלישית ברצף.

תחום שיעורים

אילוץ זה מאפשר לכם להגדיר את תחום השיעורים שבו משאב או פעילות צריכים להיות משובצים. לדוגמה, כדי להגדיר לתוכנה שהפעילויות של משאב מסויים צריכות להיות משובצות אך ורק בשיעורים 1-4 תוכלו להזין "1" בתור הערך המינימלי של אילוץ זה ו-"4" בתור הערך המקסימלי.

Constraint period range shabetz8.png

הערה: אם השיעורים בבית ספרכם מתחילים מ-"0" או שיש להם שמות שונים מ-"1", "2" וכו', בכל זאת עליכם להזין ערכים מספריים חיוביים בתור ערכי המינימום והמקסימום של אילוץ זה. זאת מכיוון, שכאשר אתם מקלידים מספר, התוכנה ממפה את המספר הזה למספר השיעור היחסי. לדוגמה, "1" ממופה לשיעור הראשון, "2" לשיעור השני וכך הלאה.

שיעורים מנוצלים

אילוץ זה מסכם את מספר השיעורים (אנכית) שבהם משובצת משבצת כלשהי. לדוגמה, אם לפעילות מסויימת יש 5 משבצות, כך ששתיים מתוכן משובצות בשיעור הראשון (ביום שני ורביעי למשל), שתיים מתוכן משובצות בשיעור השלישי ואחת משובצת בשיעור הרביעי, נאמר שהפעילות "מנצלת" 3 שיעורים: את הראשון, השלישי והרביעי.

Constraint occupied periods shabetz8.png

אופן השימוש הנפוץ ביותר באילוץ זה הוא כדי להכריח את התוכנה לשבץ את כל המשבצות של פעילות מסויימת באותו שיעור. כך למשל, אם נרצה שכל המשבצות של הפעילות יתחילו ויסתיימו באותה שעה במשך השבוע (לא משנה באיזה שיעור, העיקר שיהיה זהה לכולן), אנו נגדיר את הערך המקסימלי של אילוץ זה ל-"1" (כדי שהפעילות "תנצל" רק שיעור אחד בטבלה).

ימים מנוצלים

אילוץ זה מסכם את מספר הימים (אופקית) שבהם משובצת משבצת כלשהי במערכת של משאב או פעילות. לדוגמה, אם למורה יש 8 משבצות במערכת, כך ש-3 מתוכן משובצות ביום שני, 3 ביום רביעי ו-2 ביום חמישי, אזי ישנם 3 ימים מנוצלים במערכת של אותו מורה: שני, רביעי וחמישי.

Constraint occupied days shabetz8.png

באילוץ זה משתמשים בדרך כלל על מנת להגביל את מספר ימי העבודה של מורים. למשל, כאשר למורה צריך להיות יום חופש אחד במערכת של 5 ימים (ולא משנה לנו איזה יום), נוכל להגדיר את הערך המקסימלי של ימים מנוצלים למורה זה בתור "4" על מנת שהתוכנה תשאיר יום אחד חופשי.

מרווח של ימים

אילוץ זה שולט על מספר הימים הפנויים (שבהם לא משובץ שום דבר) בין כל שני ימים מנוצלים במערכת של משאב או פעילות. במילים אחרות, זהו המרווח (במונחים של ימים) בין כל שני ימי עבודה (ימים מנוצלים במערכת). לדוגמה, נניח שלקבוצה ישנן שתי משבצות אסטרופיזיקה במשך השבוע. אם המטרה שלנו היא לוודא ששתי המשבצות הללו תהיינה משובצות לפחות במרחק של שני ימים האחת מהשניה, אנו נגדיר את מרווח הימים המינימלי לפעילות זו בתור "2". בצורה כזאת אנו מגדירים לתוכנה שעליה להשאיר לפחות שני ימים פנויים בין שתי המשבצות של פעילות זו.

Constraint gap of days shabetz8.png

הזנת האילוצים

על מנת שתוכלו להזין את האילוצים המשמשים לייעול המערכת, תחילה עליכם לעבור למצב האוטומטי של בניית המערכת, על-ידי לחיצה על הכפתור עם הכותרת "אוטומטי" בפינה השמאלית התחתונה של המסך:

Automatic button shabetz8.png

לאחר המעבר למצב האוטומטי, תראו לשונית בשם "אילוצים" בצד שמאל של סביבת העבודה (ליד הלשונית "חריגות"):

Constraints tab shabetz8.png

לחיצה על לשונית ה-"אילוצים" תציג את חלון הזנת האילוצים:

Constraints pane shabetz8.png

כיצד לבחור את סוג האילוץ?

לחלון האילוצים ישנו גם כן סרגל ניווט המופיע למעלה. השדה הראשון בסרגל זה משמש לבחירת סוג האילוץ ואילו שאר הכפתורים נועדו לבחירת סוג המשאבים שעבורם בכוונתכם להזין את ערכי האילוצים:

Constraints navigation pane shabetz8.png

לאחר בחירת סוג האילוץ תראו רשימה של כל המשאבים מהסוג שבחרתם עם ארבע עמודות נוספות בצד ימין של הרשימה: "מינ.", "מקס.", "רצוי" ו-"חריגה":

Constraints min max desr shabetz8.png

מהן העמודות "מינ.", "מקס." ו-"רצוי"?

כפי שראינו לעיל, אילוץ הוא בעיקרון נוסחה מתמטית אשר מסכמת דבר מה. זו הסיבה שאם נתבונן על המערכת של משאב כלשהו מנקודת המבט של אילוץ מסויים, נוסחה זו תמיד תניב מספר יחיד. למשל, אם אנו מסכמים את כמות החלונות בשבוע במערכת של מישהו, אנו נגיע למספר מסויים. כמובן שהמערכת של כל משאב תניב מספר שונה, ולכן כשנגדיר את האילוצים, נוכל להגדיר אילוצים שונים עבור משאבים שונים.

מאחר והנוסחה של כל אילוץ מניבה מספר, מה שנותר לנו לעשות הוא להציב מגבלה על המספר הזה. ברגע שנעשה כן, התוכנה תשאף לייצר מערכת שבה אין חריגות על המגבלות הללו. ניתן להגדיר 3 סוגים של מגבלות: מינימום, מקסימום, וערך רצוי (או כמה ערכים רצויים). ערכי המינימום והמקסימום הינם אילוצים "קשיחים" (הם בעלי עדיפות גבוהה) ואילו הערכים הרצויים הינם אילוצים "רכים" (בעלי עדיפות נמוכה יותר). אין חובה להזין את כל 3 הערכים אם אין צורך.

כדי להזין ערך, פשוט הקלידו אותו באחד השדות הנ"ל. כל השדות הם אופציונליים כך שניתן להזין רק את המינימום, או רק את המקסימום או מינימום וגם ערך רצוי וכו'.

Constraints enter value shabetz8.png

כיצד להזין מספר ערכים רצויים?

העמודה בעלת הכותרת "רצוי" מאפשרת לכם להזין ערך אילוץ רצוי אחד, או יותר. לערך הרצוי יש עדיפות נמוכה יותר מאשר לערכים המוגדרים על-ידי תחום המינימום/מקסימום. הווה אומר שבמידה והתוכנה מוצאת דרך לשפר את המערכת כדי להגיע לערך רצוי כלשהו, אך זאת על חשבון "שבירת" אילוץ מינימום או מקסימום של אילוץ אחר, התוכנה לא תבחר באופציה הזו. אולם, ערכים רצויים כן מאפשרים לכם לשפר את איכות המערכת במידה מסויימת מאחר ובעזרתם התוכנה יכולה לדעת בצורה מדוייקת יותר את דרישות ה-"אקסטרה" שלכם.

התוכנה תומכת לא רק בערך רצוי אחד, אלא אפילו בטווח שלם של ערכים. ניתן להזין טווח כזה בעזרת שימוש בפסיק או במקף. לדוגמה, נניח שיש לשבץ מקצוע מסויים בשיעורים 2-8 אך השיעורים המועדפים הם 3,4,5 ו-7. כדי להגדיר זאת לתוכנה, יש להשתמש באילוץ "תחום שיעורים" ולהגדיר את המינימום עבור מקצוע זה בתור "2", את המקסימום בתור "8" ובשדה "רצוי" יש להקליד את הערך: "3-5,7".

Constraints multiple desirable values shabetz8.png

כיצד לתעדף אילוצים קריטיים?

ישנם שלושה סוגי קדימויות לאילוצים: "קריטי", "דרוש" ו-"רצוי". כברירת מחדל, אילוץ קריטי הוא אך ורק אילוץ השיבוץ, כלומר התוכנה מחשיבה את מלאכת שיבוץ 100% מהפעילויות כמשימה קריטית. אילוצים דרושים הם אילוצי המינימום/מקסימום אשר אתם מגדירים ברשימת האילוצים ואילו אילוצים רצויים הם מה שמופיע בעמודה "רצוי" ברשימה זו.

אולם, קיימת דרך להפוך כל אילוץ "דרוש" לאילוץ "קריטי". דבר זה גורם לתוכנה להבין שאותו אילוץ הינו בקדימות גבוהה ביותר - כלומר בקדימות שאינה פחותה משיבוץ כל פעילות נותרת. במידה מסויימת, הדבר משפיע על תהליך קבלת ההחלטות של התוכנה בזמן הבנייה האוטומטית, כי מאותו רגע ואילך התוכנה אפילו לא תיקח בחשבון פתרונות מערכת שבהם מופר האילוץ שהוגדר כקריטי. על מנת להפוך אילוץ "דרוש" לאילוץ "קריטי", עליכם להוסיף את סימן הקריאה "!" לערך המופיע בעמודת המינימום או המקסימום.

Constraints critical priority shabetz8.png

מה משמעות העמודה "חריגה"?

אם תעברו ללשונית "אילוצים" כאשר אתם נמצאים במצב האוטומטי של בניית המערכת, תראו עמודה נוספת ליד עמודות המינימום, מקסימום והרצוי. עמודה זו נקראית "חריגה". בעמודה זו יופיע ערך עבור אילוצים אשר מופרים במערכת הנוכחית. במקרים אלו הערך בעמודה זו יהיה או חיובי או שלילי, וערך זה יציין את ההפרש בין הערך של האילוץ במערכת הנוכחית לבין הערך הדרוש (או הרצוי) הקרוב ביותר.

לדוגמה, נניח שהגדרנו את מקסימום החלונות בשבוע כ-"3" עבור מורה מסויים, אך במערכת הנוכחית יש לאותו מורה 5 חלונות. במקרה זה עמודת ה-"חריגה" תציג את הערך "2+", שמשמעותו שיש 2 חלונות מעבר למה שהוגדר כמותר. דוגמה נוספת - אם הכמות המינימלית של שיעורים ביום לקבוצה הוגדרה כ-"5" אך במערכת הנוכחית של אותה קבוצה יש כרגע רק משבצת אחת בכל יום מ-5 ימות השבוע, עמודת החריגה תציג את הערך המסוכם "20-" מאחר ובכל אחד מ-5 הימים חסרות כרגע 4 משבצות.

כאשר החריגה היא של המינימום או המקסימום, היא תוצג בצבע אדום. אם החריגה היא של הערך הרצוי, היא תוצג בצבע כתום:

Constraints violation column shabetz8.png

האם ניתן לשנות את האילוצים בשלב מאוחר יותר?

חשוב להדגיש כי גם אם המערכת כבר בנויה בצורה חלקית או מלאה, תמיד יש לכם את האפשרות לשנות את האילוצים הנוכחיים (או להגדיר אילוצים חדשים) ואז להפעיל את הבנייה האוטומטית מאותה נקודה. התוכנה יודעת לקחת את המערכת הנוכחית כנקודת התחלה ולבצע בה את השינויים הדרושים בצורה אוטומטית כדי שהיא תקיים את האילוצים ששיניתם או שהוספתם.

למעשה, ניתן להשתמש ביכולת זו כטכניקה כללית לבניית המערכת בצורה הדרגתית, כי אתם יכולים להפעיל את הבנייה האוטומטית מספר פעמים. הסיבה לכך שהדבר יכול להיות שימושי היא, שלעיתים קרובות קשה להזין את כל האילוצים ישר מן ההתחלה. במקרים רבים אתם תמצאו את עצמכם מתבוננים במערכת שנבנתה אחרי השלב הראשון ואומרים לעצמכם משהו בסגנון "אבוי, גם זה צריך להיות כך וכך...". במקרים כאלו אתם תמיד יכולים לחזור ללשונית האילוצים ולהגדיר אילוצים נוספים; או שאתם גם יכולים לבצע שינוי ידני במצב האינטראקטיבי, לקבע אותו ואז להפעיל את המנוע האוטומטי שוב. חזרה על השלבים הללו מספר פעמים עד לסיום המערכת היא למעשה הדרך המומלצת להשיג מערכת שעות באיכות הגבוהה ביותר בשבילכם.

כיצד למנוע מצב של "אילוץ-יתר"?

דבר אחד אחרון אשר חשוב להבין לגבי אילוצים הוא כיצד למנוע שימוש יתר. הבינו - אילוצים הם נושא עדין ביותר. דמיינו שהגדרתם הרבה מאוד אילוצים לתוכנה, וחלק מהם אכן חשובים עבורכם אבל חלק אחר זניחים או אף יותר גרוע - לגמרי לא מציאותיים. אילו אתם הייתם בונים את המערכת בצורה ידנית והדרגתית, ללא ספק הייתם מבצעים את ההחלטות הדרושות בתחילת התהליך כדי להשלים את האילוצים הקריטיים בתור עדיפות ראשונה. למנוע האוטומטי, מצד שני, אין את יכולת השיפוט שלכם. תהליך קבלת ההחלטות שלו מבוסס ב-100% על האילוצים שהזנתם. אם המנוע נתקל בצומת מחשבתי שבו עליו להחליט האם לבצע שינוי מסויים במערכת כדי לקיים אילוץ אחד, אך שינוי זה "שובר" אילוץ אחר (ושניהם מוגדרים כערכי מינימום/מקסימום דרושים כך שיש להם אותה קדימות), התוכנה תימנע מלבצע שינוי כזה (משום שהדבר ייחשב כלא מועיל על-ידי התוכנה). אם שני האילוצים אכן דרושים באותה מידה, זו בהחלט מסקנה נכונה. אם, לעומת זאת, אחד מהם לא באמת נחוץ, הרי שלפנינו מקרה של אילוץ יתר אשר פוגם ביכולת של התוכנה לקבל את ההחלטות הנכונות עבורכם. לכן כאשר אתם מגדירים אילוצים, אנא וודאו שאתם מגדירים רק את האילוצים הדרושים והמציאותיים בתור ערכי המינימום/מקסימום והשתמשו בערכי ה-"רצוי" כדי להגדיר את האילוצים בעלי החשיבות הנמוכה יותר.

דוגמאות שימושיות

בפרק זה נביא דוגמאות לאופן שבו אנו משתמשים באילוצים שפירטנו לעיל כדי לוודא שמערכת השעות מתאימה הלכה למעשה לדרישות ולמגבלות החלות על המערכת הבית-ספרית. בכל דוגמה נציג תחילה את התרחיש המדובר, ואז נסביר אילו אילוצים יש להזין כדי להשיג את התוצאה הרצויה במערכת.

כיצד למנוע מצב שבו מקצוע משובץ יותר מפעם אחת ביום?

במקרים רבים, איננו מעוניינים בכך שמקצוע ישובץ יותר מפעם אחת ביום במערכת השעות של קבוצה. לדוגמה, קרוב לוודאי שלא נרצה ששיעור ההסטוריה יופיע פעמיים (בשני שיעורים נפרדים) ביום ראשון במערכת השעות של א-1.

כדי להגדיר דרישה זו לתוכנה, נשתמש באילוץ משבצות ביום עבור מקצועות. בחלון האילוצים, נסמן תחילה "משבצות ביום" למעלה, ואז נלחץ על כפתור המקצוע. ברשימת המקצועות, נקליד "1" בעמודה "מקס." ליד המקצוע הסטוריה. הדבר אומר לתוכנה שלא צריכה להיות יותר ממשבצת אחת עם המקצוע הסטוריה ביום כלשהו במערכת השעות של כל קבוצה. מאחר ופעילות ההסטוריה משובצת כרגע פעמיים ביום ראשון (בדוגמה זו), התוכנה מציגה ערך בעמודה "חריגה", והחריגה היא "1+": כלומר קיימת כרגע משבצת עודפת אחת ביום כלשהו (יום ראשון במקרה זה):

Const subject more than once a day shabetz8.png

את אותו הדבר נגדיר גם עבור מקצועות אחרים. אולם, למקצועות כגון כתיבה, בדוגמה זו, אשר להן מתוכננות 7 או יותר משבצות בשבוע (שבוע בעל 6 ימים), נגדיר באופן טבעי מקסימום של "2" משבצות מותרות ביום.

לאחר שהגדרנו את האילוצים הנ"ל, נלחץ על הכפתור "פתור הכל" בתחתית החלון הראשי על מנת שהתוכנה תפתור את החריגות:

Const subject more than once a day resolved shabetz8.png

כיצד לפזר את המשבצות של קבוצה בצורה אחידה על פני השבוע?

כאשר מספר הפעילויות המתוכננות של קבוצה קטן יותר מסך מספר המשבצות הפנויות במערכת שלה (מספר השיעורים כפול מספר הימים), אזי באופן טבעי כמה מהמשבצות הפנויות יישארו ריקות כאשר המערכת תושלם. למשל, במערכת של 6 ימים עם 7 שיעורים ביום, ישנו סך של 42 משבצות לשיבוץ פעילויות. אם לקבוצה יש רק 37 פעילויות מתוכננות, יוצא ש-5 משבצות יישארו בוודאי ריקות. במצב כזה, ייתכן תאורטית מצב שבו התוכנה תשבץ ב-5 ימים 7 משבצות בכל יום, וביום השישי תהיינה רק 2 משבצות. לרוב, מצב כזה אינו מקובל.

כדי למנוע פיזור לא אחיד כזה של פעילויות, אנו נשתמש גם כעת באילוץ משבצות ביום, אלא שכאן במקום להגדיר אותו עבור מקצועות, אנו נגדיר אותו עבור קבוצות. מה שנעשה, הוא פשוט להגדיר מינימום של 5 משבצות ביום לקבוצה ובכך נמנע את התרחיש שאותו תיארנו לעיל שבו לקבוצה יש יום עם רק 2 פעילויות משובצות.

לשם כך, נבחר ב-"משבצות ביום" בחלק העליון של חלון האילוצים ואז נלחץ על כפתור הקבוצה. לבסוף, נקליד "5" בעמודה "מינ." ליד שם הקבוצה:

Const group spread cells evenly shabetz8.png

לאחר שהגדרנו את האילוץ כנדרש, נלחץ על הכפתור "פתור הכל" בחלק השמאלי התחתון של סביבת העבודה כדי שהתוכנה תפתור את החריגה שנוצרה:

Const group spread cells evenly resolved shabetz8.png

כיצד למנוע חלונות במערכות של קבוצות?

כפי שזכור לכם, חלונות הינן משבצות פנויות באמצע היום. לעיתים מקובל שלמורים יש אותם (עד לגבול מסויים כמובן), אבל לרוב זהו איסור חמור עבור קבוצות ותלמידים. כדי להגדיר דרישה זו, נשתמש באילוץ חלונות ביום (כן, ניתן להשתמש במקום גם באילוץ חלונות בשבוע). אנו נגדיר פשוט ערך מקסימלי של "0" עבור כל הקבוצות.

לשם כך, אנו בוחרים תחילה ב-"חלונות ביום" בחלק העליון של חלון האילוצים, לוחצים על כפתור הקבוצה ומקלידים "0" ליד הקבוצה הראשונה. ניתן לשכפל ערך זה לכל שאר הקבוצות על-ידי לחיצה על Ctrl+C במקלדת כאשר הערך "0" מסומן, סימון המשבצות של שאר הקבוצות בעמודה "מקס." ולבסוף לחיצה על Ctrl+V במקלדת:

Const group gaps shabetz8.png

כדי להורות לתוכנה לסגור את כל החלונות אנו לוחצים כעת על הכפתור פתור הכל והמערכת מסתדרת בהתאם:

Const group gaps resolved shabetz8.png

כיצד לוודא שהפעילויות של קבוצה מתחילות בשיעור הראשון?

בדיוק כמו חלונות, שהם משבצות פנויות באמצע היום, מערכת השעות יכולה להכיל גם משבצות ריקות בתחילת היום. דמיינו לעצמכם, למשל, שהתוכנה שיבצה את הפעילויות של קבוצה כך שהשיעור הראשון ביום ראשון נשאר ריק, והמשבצת המשובצת הראשונה היא בשיעור השני. אנו מכנים משבצת ריקה כזאת דלת. ברוב בתי הספר, דלתות הינן דבר אסור לקבוצות, אבל מותר (עד לרמה מסויימת) למורים. כדי להגדיר דרישה זו, אנו נשתמש (כמצופה) באילוץ "דלתות בשבוע".

מה שנעשה, הוא פשוט לקבוע ערך מקסימלי של אפס דלתות בשבוע עבור כל הקבוצות. לשם כך, אנו נסמן "דלתות בשבוע" בחלק העליון של חלון האילוצים, נלחץ על כפתור הקבוצה שלמעלה ונקליד "0" בעמודה "מקס." עבור כל הקבוצות:

Const group late starts shabetz8.png

לאחר שהגדרנו את האילוצים, אנו לוחצים כרגיל על הכפתור פתור הכל בפינה השמאלית התחתונה של המסך על מנת שהתוכנה תפתור את האילוצים החורגים מהגבול שהגדרנו:

Const group late starts resolved shabetz8.png

כיצד למזער את כמות החלונות במערכות של מורים?

כדי להפיק את המירב מזמנם, מרבית המורים מעדיפים שיהיו להם כמה שפחות חלונות במערכת. כדי להגדיר דרישה זו, אנו נשתמש באילוץ חלונות בשבוע. אנו נגדיר שני ערכים לכל מורה: הראשון הוא ערך מקסימלי אשר משמש כ-"חסם עליון" בעל עדיפות גבוהה; השני הוא ערך רצוי, אמנם בעל עדיפות נמוכה יותר, אך כזה שיגרום לתוכנה לנסות להקטין את כמות החלונות עוד יותר, במידה והדבר אפשרי.

כרגיל, נתחיל בכך שנבחר את האילוץ חלונות בשבוע בחלק העליון של חלון האילוצים. לאחר מכן נלחץ על כפתור המורה. כעת נעשה שני דברים:

  • בעמודה "מקס." נקליד ליד כל מורה את הערך החזק המירבי. במקרה שלנו זה יהיה ערך מירבי של "4" חלונות בשבוע.
  • בעמודה "רצוי", לעומת זאת, אנו נקליד את הערך "0-3" (0 מקף 3). מדוע אנו משתמשים במקף? מכיוון שהדבר מגדיר לתוכנה שזה בסדר מבחינתנו אם יהיו אפס, אחד, שניים או שלושה חלונות בשבוע. אילו היינו מקלידים ערך יחיד "3", הדבר היה אומר שכאשר למורה יש 2 חלונות בשבוע, התוכנה היתה מתייחסת לכך כאל אופציה פחות טובה מאשר אם היו לו 3 חלונות - וזו לא כוונתנו. לכן, אנו מגדירים טווח של ערכים: 0-3 (דרך אגב, היינו יכולים גם להקליד "0,1,2,3" בעמודה רצוי מכיוון שהערך הרצוי יכולים להכיל גם פסיקים וגם מקפים).

Const teacher gaps shabetz8.png

לאחר שלחצנו על פתור הכל ואיפשרנו לתוכנה לרוץ במשך כדקה, קיבלנו את התוצאה הבאה:

Const teacher gaps resolved shabetz8.png

כיצד להשאיר יום פנוי אצל מורה?

ישנן שתי דרכים לגרום לכך שבמערכת השעות של מורה מסויים יהיה יום פנוי אחד או יותר (ימים ללא שום פעילות משובצת):

  • אם היום המדוייק ידוע מראש, כל מה שעלינו לעשות הוא לחסום את המשבצות באותו יום, ואז שום דבר לא ישובץ בו. כפי שזכור לכם, חסימת משבצות היא פעולה שניתנת לביצוע במצב האינטראקטיבי של בניית המערכת על-ידי סימון המשבצות הרלוונטיות ובחירה ב-"עריכה", "חסימה" בתפריט הראשי.
  • מצד שני, אם אין חשיבות לאיזה יום יהיה היום החופשי של המורה (פשוט שיהיה איזשהו יום חופשי), אנו נעדיף להשתמש באילוץ ימים מנוצלים (במקום לחסום יום אקראי), מאחר ואילוץ זה משאיר יותר חופש לתוכנה במהלך הבנייה האוטומטית. האילוץ "ימים מנוצלים" מאפשר לנו לשלוט על כמות הימים שבהם אכן משובצת פעילות כלשהי. כתוצאה, הוא נותן לנו גם שליטה על כמות הימים שבהם לא משובצת אף פעילות, כלומר כמות הימים החופשיים של אותו מורה. לדוגמה, במערכת שעות של 6 ימים, אם ברצוננו שלמורה יהיה יום פנוי אחד, אנו נגדיר מקסימום של 5 ימים מנוצלים לאותו מורה, דבר שישאיר יום אחד פנוי. אם היינו רוצים שני ימים חופשיים, היינו קובעים את המקסימום ל-4, וכן הלאה.

כדי להגדיר את כמות הימים המנוצלים של מורים, נבחר תחילה ב-"ימים מנוצלים" בחלק העליון של חלון האילוצים ואז נלחץ על כפתור המורה. לבסוף, נקליד את כמות ימי העבודה (ימים מנוצלים) המקסימלית של כל מורה בעמודה "מקס.", כך שסך מספר הימים בשבוע מינוס מספר ימי העבודה יהיה שווה למספר הימים החופשיים המבוקש:

Const occupied days shabetz8.png

אחרי הלחיצה על "פתור הכל" אנו יכולים לראות כי התוכנה הזיזה את הפעילויות של המורה מאחד מימי העבודה לימים האחרים כך שכעת יום אחד נותר פנוי כפי שביקשנו:

Const occupied days resolved shabetz8.png

כיצד להכריח את התוכנה לשבץ פעילות רק בימים או שיעורים ספציפיים?

כאשר קיימת פעילות (או מקצוע) שאותה יש צורך לשבץ רק בימים או בשיעורים ספציפיים, נוכל להשתמש בחסימות על מנת להגביל את הזמינות של אותה פעילות רק למשבצות המדוברות. זכרו שבאותה מידה שקיימת מערכת שעות שבועית של קבוצה או מורה, קיימת גם מערכת שעות שבועית של פעילות ושל מקצוע. תוכלו להציג אותה על-ידי לחיצה על כפתור הפעילות או המקצוע בסרגל הניווט שמעל למערכת. אם תלחצו על כפתור הפעילות, תוכלו לסמן כל פעילות בחלון הפעילויות כדי להציג את המערכת של אותה פעילות. ובאותה מידה שניתן לחסום משבצות במערכת של קבוצה או מורה, ניתן באותה הקלות גם לחסום משבצות במערכת של פעילות. הדבר מגדיר לתוכנה שלא ניתן יהיה לשבץ את הפעילות באותן משבצות שחסמתם, ובכך מכריח את התוכנה לשבץ אותה רק במשבצות האחרות הלא חסומות.

הבה נתבונן בדוגמה. נניח שיש לנו פעילות שאותה ברצוננו לשבץ רק בימים ראשון, שלישי וחמישי, אחרי השיעור החמישי בלבד. במקרה כזה, אנו נחסום את כל שאר המשבצות של הפעילות, דהיינו את הימים שני, רביעי ושישי וגם את כל המשבצות עד השיעור החמישי. בצורה כזאת, כאשר נריץ את הבנייה האוטומטית, התוכנה תהיה מוכרחת לשבץ את הפעילות רק במשבצות שהשארנו לא חסומות:

Const activity blocks shabetz8.png

תזכורת: כדי לחסום משבצות עליכם להימצא במצב האינטראקטיבי של בניית המערכת מכיוון שחסימות נלקחות בחשבון הן בשיבוץ האינטראקטיבי והן בשיבוץ האוטומטי.

כיצד לשבץ פעילות באותו שיעור בכל הימים?

לעיתים, לא חשוב לנו באיזה שיעור בדיוק תשובץ פעילות כלשהי, כל עוד יהיה זה שיעור זהה לאורך כל הימים שבהם היא משובצת. לדוגמה, ייתכן שנרצה ששיעור הנגינה, אשר פתוח למבקרים, יהיה משובץ באותו השיעור בכל יום על מנת שלמבקרים תהיה שעה קבועה שבה יוכלו להגיע ולהיות נוכחים בחזרות.

מה שנעשה במקרה כזה, הוא להשתמש באילוץ "שיעורים מנוצלים" כדי להגביל את מספר השיעורים שהפעילות "מנצלת" למקסימום של 1. בכך, אנו בעצם אומרים לתוכנה שכל המשבצות של הפעילות חייבות להיות משובצות באותה שעה (כי אחרת היא תנצל יותר משיעור אחד לרוחב).

כדי להזין אילוץ זה, נבחר ב-"שיעורים מנוצלים" בחלק העליון של חלון האילוצים, ואז נלחץ על כפתור הפעילות. כעת נמצא את פעילות הנגינה ברשימה ונקליד "!1" בעמודה "מקס." (אנו משתמשים בסימן הקריאה ב-"!1" כדי להגדיר לתוכנה שאילוץ זה הינו חובה):

Const occupied periods shabetz8.png

לאחר הלחיצה על פתור הכל, התוכנה סידרה מחדש את המערכת כך שהפעילות שלנו משובצת כעת באותה השעה בכל יום:

Const occupied periods resolved shabetz8.png

כיצד לוודא שמקצוע מסויים לא ישובץ בימים עוקבים?

במיוחד כאשר למקצוע כלשהו יש רק 2 או 3 משבצות במשך השבוע, קרוב מאוד לוודאי שאנו לא נרצה שהמשבצות הללו יופיעו בימים עוקבים. במקום זאת, אנו נשאף לכך שהן יפוזרו במרחק של לפחות יום אחד או שניים אחת מהשניה. למשל, כאשר לקבוצה יש שתי פעילויות חינוך גופני במשך השבוע, אנו נרצה כנראה שהן ישובצו ביום ראשון ורביעי, או אולי בשני וחמישי - כל עוד הן במרחק של 2 ימים. כדי להגדיר דרישה זו, אנו נשתמש באילוץ "מרווח של ימים" עבור מקצועות.

תחילה, נסמן את האילוץ "מרווח של ימים" בחלק העליון של חלון האילוצים. לאחר מכן, נלחץ על כפתור המקצוע כדי להציג רשימה של מקצועות. כעת, ליד כל מקצוע רלוונטי (חינוך גופני במקרה זה), נקליד "2" בעמודה "מינ.". הדבר אומר לתוכנה שהמספר המינימלי של ימים פנויים (שבהם חינוך גופני לא משובץ) בין כל שני ימים מנוצלים (שבהם חינוך גופני כן משובץ) צריך להיות לפחות 2:

Const gap of days shabetz8.png

אפשר לראות שאחרי הלחיצה על פתור הכל התוכנה סידרה מחדש את המערכת כך ששתי המשבצות הן כעת במרחק הימים שביקשנו:

Const gap of days resolved shabetz8.png

הפרק הבא: שינויים.

  יש לכם שאלה? שלחו לנו דואר אלקטרוני אל SUPPORT@LANTIV.CO.IL