דלגו לתוכן
EN
בפיתוח2026-היוםמהנדס

Traffic Simulator

מושך כבישים אמיתיים של ערים מ-OpenStreetMap ומריץ עליהם אלפי מכוניות כדי לבדוק אסטרטגיות רמזורים

2,749נתיבים במודל של 4.2 קמ"ר במרכז תל אביב

מרכז תל אביב בזמן ריצה, עם כבישים שצבועים לפי עיכוב

הבעיה

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

מה בניתי

גוללים לכל מקום בעולם, לוחצים על כפתור אחד, והכלי מושך את רשת הכבישים מ-OpenStreetMap, מפרק אותה לנתיבים בודדים ולתנועות בצמתים, ומריץ עליה מכוניות. בלי מפתח API, בלי התקנה, בלי שום הגדרה. מרכז תל אביב יוצא 26,521 נתיבים ו-38,142 תנועות פנייה.

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

למה אפשר לסמוך על המודל

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

הציור

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

התנהגות הדיוק של ה-shader נבדקת ב-Node רגיל עם Math.fround, שזה בדיוק מה ש-GPU עושה ל-float, כך ששכבת כלי הרכב מכוסה בבדיקות שלא צריכות דפדפן בכלל.

הרתמה היא העיקר

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

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

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

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

רוצים לדבר על המוצר הזה?