שיתוף - מערכת מעליות חכמה בדפדפן!

@shaye

משתמש מקצוען
D I G I T A L
שבוע טוב!
ברצוני לשתף כאן פרויקט קטן שעשיתי לאחרונה: סימולציה שמדמה מערכת מעליות חכמה…
בין היתר, ה"מערכת" יודעת לבחור את המעלית הפנויה הכי קרובה לקומת המזמין בכל רגע נתון, כמו“כ יש לכל קומה ”מסך“ שמספק מידע חכם ועדכני למשתמשים (- זה מה שבעיקר רציתי להדגים), ועוד.
אפשר להוסיף ולהוריד קומות ומעליות לבנין בלי הגבלה!

elevator-system.png


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

הממשק בנוי עם Vue, אך רוב רובו של הלוגיקה שמפעילה את ה“מערכת“ נכתבה בתוך JS class בלתי תלוי, אפשר לראות את זה כאן בגיטהאב.
 

א.ש. אמיתי

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

@shaye

משתמש מקצוען
D I G I T A L
אולי אפשר קצת להרחיב על הלוגיקה, כי לא כ"כ הבנתי למשל למה אם יש מעלית בקומת ק. ואני מזמין מעלית למעלה מקומה 2 הוא מוריד מעלית מקומה 8.
תודה על התגובה!
אני מניח שזה קרה בגלל שהמעלית בקומת קרקע היתה פתוחה... ז.א היא לא הייתה פנויה.
אי אפשר לשלוח את המעלית שנמצאת בקומת קרקע אם ההוא שהזמין את זה עדיין באמצע לבחור את היעד שלו... אחרי כמה שניות שלא מכניסים שום מספר, הדלתות נסגרות אוטומטי, ואז המעלית מוגדרת כפנויה...

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

רמיזא

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

צפה בקובץ המצורף 564448

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

הממשק בנוי עם Vue, אך רוב רובו של הלוגיקה שמפעילה את ה“מערכת“ נכתבה בתוך JS class בלתי תלוי, אפשר לראות את זה כאן בגיטהאב.
מדהים ומקצועי !!!!!!!
 

שתים

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

@shaye

משתמש מקצוען
D I G I T A L
אני יודעת שבראיונות יכולים לשאול על אלגוריתמים של ניהול מעליות.
תודה על התגובה!
למעשה האלגוריתם די פשוט, אנסה להסביר בקצרה (וחלקית) את הגישה שאני לקחתי, עם כמה קטעי קוד...

ה"מעליות" הם אלמנטים במערך, לכל מעלית יש properties שמכילים את כל המידע עליה:
elevator.png


עכשיו, כשיש הזמנה של מעלית לקומה X, יש למצוא את המעלית הפנויה הכי קרובה למטרה. זה מתבצע בשני שלבים:

1) קודם כל, סינון של המעליות הפנויות:
free.png


2) עכשיו שיש לנו מערך עם כל המעליות הפנויות, עלינו למצוא את המעלית הקרובה ביותר למטרה:
יש לסדר את המערך (()sort) שככל שהמרחק בין המעלית (-a,b) למטרה (-"toFloor") פחות - האיבר יהיה קודם במערך, ואז אפשר לבחור את האיבר הראשון:
best.png

ע"יMath.abs()s אפשר להחזיר את המרחק האבסולוטי שבין שני מספרים.

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

אח"כ "שולחים" את המעלית למטרה! כאן אפשר לראות את כל הקוד. כמו"כ אפשר להוריד את כל הפרוייקט מגיטהאב ולשחק עם הקוד...

אם יש שאלות אשמח לענות!
 

men770

משתמש פעיל
עיצוב גרפי
מוזיקה ונגינה
הנדסת תוכנה
D I G I T A L
תנסה להריץ את זה בקונסול ותראה איך המערכת קורסת..
קוד:
function clickAll() { let buttons = document.getElementsByClassName('call-button'); for (let j = 0; j < 15; j++) { setTimeout(clickAll, 2000); for (let i = 0; i < buttons.length; i++) { setTimeout(clickAll, 500); buttons[i].click(); } } } clickAll();
 

@shaye

משתמש מקצוען
D I G I T A L
תנסה להריץ את זה בקונסול ותראה איך המערכת קורסת..
:D :D :D
אתה בוודאי מתכוין ל"מערכת" של הדפדפן...
בצורה כזאת אפשר לגרום לכל דף לקרוס, וזה (כמעט) לא קשור למערכת של המעליות...
ואגב, אפשר למנוע את זה עם event.isTrusted!

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

men770

משתמש פעיל
עיצוב גרפי
מוזיקה ונגינה
הנדסת תוכנה
D I G I T A L
כשמריצים את זה המערכת עובדת יפה ולא מפספסת אף קומה,אבל יש המון שגיאות בקונסול.
קוד:
function clickAll() { let buttons = document.getElementsByClassName('call-button'); for (let j = 0; j < 15; j++) { for (let i = 0; i < buttons.length; i++) { buttons[i].click(); } } } clickAll();
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכו

א שִׁיר הַמַּעֲלוֹת בְּשׁוּב יי אֶת שִׁיבַת צִיּוֹן הָיִינוּ כְּחֹלְמִים:ב אָז יִמָּלֵא שְׂחוֹק פִּינוּ וּלְשׁוֹנֵנוּ רִנָּה אָז יֹאמְרוּ בַגּוֹיִם הִגְדִּיל יי לַעֲשׂוֹת עִם אֵלֶּה:ג הִגְדִּיל יי לַעֲשׂוֹת עִמָּנוּ הָיִינוּ שְׂמֵחִים:ד שׁוּבָה יי אֶת (שבותנו) שְׁבִיתֵנוּ כַּאֲפִיקִים בַּנֶּגֶב:ה הַזֹּרְעִים בְּדִמְעָה בְּרִנָּה יִקְצֹרוּ:ו הָלוֹךְ יֵלֵךְ וּבָכֹה נֹשֵׂא מֶשֶׁךְ הַזָּרַע בֹּא יָבוֹא בְרִנָּה נֹשֵׂא אֲלֻמֹּתָיו:
נקרא  54  פעמים

אתגר AI

הצבע הירוק • אתגר 23

לוח מודעות

למעלה