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

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

elevator-system.png


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

הממשק בנוי עם Vue, אך רוב רובו של הלוגיקה שמפעילה את ה“מערכת“ נכתבה בתוך JS class בלתי תלוי, אפשר לראות את זה כאן בגיטהאב.
 
  • הוסף לסימניות
  • #2
יפה מאוד!
אולי אפשר קצת להרחיב על הלוגיקה, כי לא כ"כ הבנתי למשל למה אם יש מעלית בקומת ק. ואני מזמין מעלית למעלה מקומה 2 הוא מוריד מעלית מקומה 8.
 
  • הוסף לסימניות
  • #3
אולי אפשר קצת להרחיב על הלוגיקה, כי לא כ"כ הבנתי למשל למה אם יש מעלית בקומת ק. ואני מזמין מעלית למעלה מקומה 2 הוא מוריד מעלית מקומה 8.
תודה על התגובה!
אני מניח שזה קרה בגלל שהמעלית בקומת קרקע היתה פתוחה... ז.א היא לא הייתה פנויה.
אי אפשר לשלוח את המעלית שנמצאת בקומת קרקע אם ההוא שהזמין את זה עדיין באמצע לבחור את היעד שלו... אחרי כמה שניות שלא מכניסים שום מספר, הדלתות נסגרות אוטומטי, ואז המעלית מוגדרת כפנויה...

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

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

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

הממשק בנוי עם Vue, אך רוב רובו של הלוגיקה שמפעילה את ה“מערכת“ נכתבה בתוך JS class בלתי תלוי, אפשר לראות את זה כאן בגיטהאב.
מדהים ומקצועי !!!!!!!
 
  • הוסף לסימניות
  • #7
יפה!
אני יודעת שבראיונות יכולים לשאול על אלגוריתמים של ניהול מעליות.
 
  • הוסף לסימניות
  • #8
אני יודעת שבראיונות יכולים לשאול על אלגוריתמים של ניהול מעליות.
תודה על התגובה!
למעשה האלגוריתם די פשוט, אנסה להסביר בקצרה (וחלקית) את הגישה שאני לקחתי, עם כמה קטעי קוד...

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


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

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


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

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

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

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

אם יש שאלות אשמח לענות!
 
  • הוסף לסימניות
  • #9
תנסה להריץ את זה בקונסול ותראה איך המערכת קורסת..
קוד:
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();
 
  • הוסף לסימניות
  • #10
תנסה להריץ את זה בקונסול ותראה איך המערכת קורסת..
:D :D :D
אתה בוודאי מתכוין ל"מערכת" של הדפדפן...
בצורה כזאת אפשר לגרום לכל דף לקרוס, וזה (כמעט) לא קשור למערכת של המעליות...
ואגב, אפשר למנוע את זה עם event.isTrusted!

נשאר לדעת (ולא לנסות...) מה יקרה במערכת אמיתית אם יהיו הרבה הזמנות באותו רגע ממש...
 
  • הוסף לסימניות
  • #11
כשמריצים את זה המערכת עובדת יפה ולא מפספסת אף קומה,אבל יש המון שגיאות בקונסול.
קוד:
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();
 

פרוגבוט

תוכן שיווקי
פרסומת

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

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


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה