אופטימיזציית הגחלילית

אופטימיזציית הגחלילית (באנגלית: Firefly optimization) היא שיטה מטה-היוריסטית מתחום הבינה המלאכותית לאופטימיזציה של פונקציות המקבלת את השראתה מהתנהגותן של גחליליות בטבע. השיטה הוצעה על ידי קסין שי יאנג (אנ') בשנת 2008, והיא שימושית בתחומים רבים, לרבות בעיבוד תמונה, תזמון תהליכים, ניתוח מבני של חלבונים, קינימטיקה הפוכה ועוד. סיבוכיות האלגוריתם היא O ( t ) {\displaystyle O(t)} , כאשר t {\displaystyle t} הוא מספר האיטרציות שמבצע האלגוריתם. ערך מורחב – אופטימיזציה (מתמטיקה) בעיית אופטימיזציה היא בעיה מתמטית העוסקת במציאת ערך אופטימלי (מינימלי או מקסימלי) עבור פונקציה נתונה, תחת אילוצים נתונים. כל בעיית אופטימיזציה ניתנת לתיאור ע"י: optimize f ( x ) subject to x ∈ S {\displaystyle {\begin{aligned}&{\text{optimize}}&&f(x)\\&{\text{subject to}}&&\mathbf {x\in S} \\\end{aligned}}} כאשר S {\displaystyle {\text{S}}} היא קבוצת הפתרונות האפשריים לבעיה. s {\displaystyle s} הוא פתרון לבעיה אם ורק אם מתקיים s ∈ S {\displaystyle s\in S} וגם f ( x ) ≤ f ( s ) {\displaystyle f(x)\leq f(s)} לכל x ∈ S {\displaystyle x\in S} . ערך מורחב – גחליליות הגחלילית (שם מדעי: Lampyridae) היא זן של חיפושית לילית. הגחלילית משתמשת בהבזקי אור כאמצעי תקשורת עם בני המין השני במהלך תהליך החיזור. זכר גחלילית הנמצא בתהליך החיזור מפיק הבזקי אור בזמן מעופו. נקבת הגחלילית הנענית לחיזור מפיקה גם היא אותות מיוחדים על מנת לסמן לזכר המחזר את מיקומה. עוצמתם ותדירותם של הבזקי האור הזכריים מעידים על האיכות הגנטית שלו, ומשפיעים על תגובתה של הנקבה. הבזקי האור נוצרים בתהליך הביולומינסנציה המבוקר בעיקר על ידי החלבון לוציפראז. ניתן לראות את תהליך החיזור הכולל של נחיל גחליליות כמעין תהליך חיפוש המשלב אקראיות, חיפוש מקומי וחיפוש גלובלי (אלגוריתם מטה-היוריסטי). בהינתן מספר איטרציות מרבי t m a x {\displaystyle t_{max}} , ניתן לתאר את האלגוריתם בצורה הכללית הבאה: אתחל אוכלוסייה אקראית x 1 , . . . , x n {\displaystyle x_{1},...,x_{n}} של n {\displaystyle n} גחליליות על פני פונקציית מטרה f ( x ) {\displaystyle f(x)} ב- d {\displaystyle d} ממדים, כאשר f ( x i ) {\displaystyle f(x_{i})} היא עוצמת ההארה של גחלילית x i {\displaystyle x_{i}} . לכל זוג גחליליות x i , x j {\displaystyle x_{i},x_{j}} , אם גחלילית x i {\displaystyle x_{i}} בהירה יותר מגחלילית x j {\displaystyle x_{j}} , הזז את גחלילית x j {\displaystyle x_{j}} לכיוון גחלילית x i {\displaystyle x_{i}} על פי משוואת התנועה: x i t + 1 = x i t + β exp ⁡ [ − γ r i j 2 ] ( x j t − x i t ) + α t ϵ t {\displaystyle \mathbf {x} _{i}^{t+1}=\mathbf {x} _{i}^{t}+\beta \exp[-\gamma r_{ij}^{2}](\mathbf {x} _{j}^{t}-\mathbf {x} _{i}^{t})+\alpha _{t}{\boldsymbol {\epsilon }}_{t}} כאשר t {\displaystyle t} מייצג נקודה בזמן,   x i , x j {\displaystyle \ x_{i},x_{j}} הן מיקום הגחליליות i , j {\displaystyle i,j} בהתאמה, α t {\displaystyle \alpha _{t}} הוא מקדם אקראיות ו- ϵ t {\displaystyle {\boldsymbol {\epsilon }}_{t}} הוא וקטור מספרים אקראיים המתפלגים נורמלית בזמן t {\displaystyle t} . אחרת, הזז את הגחלילית x j {\displaystyle x_{j}} באופן אקראי. עדכן את תאורת הגחליליות ואת מידת המשיכה בין הגחליליות ע"פ המיקומים והמרחקים החדשים שהתקבלו. חזור על שלבים (2) ו- (3) למשך t m a x {\displaystyle t_{max}} פעמים. בסיום, הגחלילית המוארת ביותר היא קירוב לפתרון הבעיה. בבעיות למציאת מקסימום, יתקיים I ∝ f ( x ) {\displaystyle I\propto f(\mathbf {x} )} ובבעיות למציאת מינימום יתקיים I ∝ f − 1 ( x ) {\displaystyle I\propto f^{-1}(x)} . Begin Generate a random population of n fireflies x_1, x_2, ..., x_n While (t < MaxGeneration) update distances update lights intensities update attractiveness for i = 1 : n for j = 1 : n if (I_j > I_i), move firefly i to j end if end for j end for i set s as the firefly with the optimal light intensity. end while return s as solution end האלגוריתם מבוסס על אידיאליזצית תכונות ההארה של מאור הגחליליות. הגחלילית, בקרב מרבית זני הגחליליות בטבע, משתמשת בהארה על מנת למשוך אליה פרטי להקה אחרים לצורכי זיווג. התכונות האידיאליות הן כדלקמן: כל גחלילית נמשכת לגחליליות אחרות, ללא קשר למינן. מידת המשיכה של גחלילית a {\displaystyle a} כלפי גחלילית b {\displaystyle b} היא ביחס ישר למידת ההארה של גחלילית b {\displaystyle b} (אנלוגיה להתנהגותן הטבעית של הגחליליות). עוצמת האור שגחלילית a {\displaystyle a} קולטת מגחלילית b {\displaystyle b} היא ביחס הפוך למרחק בין גחלילית a {\displaystyle a} לבין גחלילית b {\displaystyle b} (אנלוגיה לחוק ריבוע המרחק ההופכי, לפיו עוצמת האור נחלשת ביחס ריבועי הפוך למרחק ממקור האור). עוצמת ההארה של הגחלילית נקבעת ע"פ ערכה של פונקציית המטרה f ( x ) {\displaystyle f(x)} . על פי תכונות (2) ו- (3), ניתן לגזור את משוואת המשיכה בין שתי גחליליות, כפונקציה מעריכית של המרחק ביניהן: β = β 0 e − γ r 2 {\displaystyle \beta =\beta _{0}e^{-\gamma r^{2}}} כאשר β 0 {\displaystyle \beta _{0}} הוא קבוע, γ {\displaystyle \gamma } הוא מקדם התפשטות האור באוויר, β {\displaystyle \beta } היא עוצמת המשיכה בין שתי גחליליות ו- r {\displaystyle r} הוא המרחק הגאומטרי בין שתי הגחליליות. תנועתה של גחלילית i {\displaystyle i} מושפעת מגחלילית בהירה יותר j {\displaystyle j} באופן הבא: x i t + 1 = x i t + β exp ⁡ [ − γ r i j 2 ] ( x j t − x i t ) + α t ϵ t {\displaystyle \mathbf {x} _{i}^{t+1}=\mathbf {x} _{i}^{t}+\beta \exp[-\gamma r_{ij}^{2}](\mathbf {x} _{j}^{t}-\mathbf {x} _{i}^{t})+\alpha _{t}{\boldsymbol {\epsilon }}_{t}} כאשר t {\displaystyle t} מייצג נקודה בזמן,   x i , x j {\displaystyle \ x_{i},x_{j}} הן מיקום הגחליליות i , j {\displaystyle i,j} בהתאמה, α t {\displaystyle \alpha _{t}} הוא מקדם אקראיות ו- ϵ t {\displaystyle {\boldsymbol {\epsilon }}_{t}} הוא וקטור מספרים אקראיים המתפלגים נורמלית בזמן t {\displaystyle t} . עבור β 0 = 0 {\displaystyle \beta _{0}=0} מתקבלת תנועה אקראית פשוטה, ועבור γ = 0 {\displaystyle \gamma =0} מתקבלת משוואת תנועת חלקיקים של אופטימיזציית הנחיל. במקרים רבים, אלגוריתם הגחליליות יעיל יותר מאלגוריתמים רבים אחרים מתחום בינת הנחיל. סיבה עיקרית לכך היא תופעת החלוקה האוטומטית. האלגוריתם מבוסס על כך שאטרקטיביות של פתרון פוחתת עם עליית המרחק, ולכן, נוצר מצב שבו האוכלוסייה מופרדת באופן אוטומטי לתתי-קבוצות, כאשר כל תת-קבוצה מרוכזת סביב אופטימום מקומי שונה. עבור אוכלוסייה הגדולה מאוד ממספר מוקדי האופטימום המקומיים, חלוקה זו מאפשרת למצוא את כל המוקדים המקומיים בו-זמנית. מבחינה מתמטית, γ − 1 {\displaystyle {\sqrt {\gamma }}^{-1}} מאפיין את המרחק הממוצע בין שתי קבוצות גחליליות סמוכות. מכאן, כל אוכלוסייה נחלקת לתתי קבוצות סמוכות בעלות מרחק ממוצע קבוע. עובדה זו מאפשרת התמודדות עם בעיות שאינן ליניאריות. קל לזהות את תופעת החלוקה האוטומטית בהרצת האלגוריתם על הפונקציה התלת-מימדית הבאה: f ( x , y ) = e − x 2 − y 2 ( | x | + | y | ) {\displaystyle f(x,y)=e^{-x^{2}-y^{2}}({\left|x\right|}+{\left|y\right|})} לפונקציה f ( x , y ) {\displaystyle f(x,y)} ישנן ארבע נקודות מקסימום ( ± 0.5 , ± 0.5 ) {\displaystyle (\pm 0.5,\pm 0.5)} . האלגוריתם מאפשר את מציאת הקטבים על ידי 25 {\displaystyle 25} גחליליות ו- 20 {\displaystyle 20} איטרציות. הסכימה הבאה מתארת את מיקומן האקראי של הגחליליות (כנקודות) בתחילתה של ריצת האלגוריתם (משמאל) ואת מיקומן בסיום ריצת האלגוריתם: שני המרכיבים העיקריים בכל שיטה מטה-היוריסטית הם התמקדות והתרחבות. התמקדות - חיפוש מקומי ממוקד בתחום שבו קיים פתרון אופטימלי מקומי. מידת התמקדות גבוהה נוטה להגדיל את קצב ההתכנסות של האלגוריתם, אך עשויה לגרום להתכנסות מקומית בלתי רצויה. התרחבות - חיפוש גלובלי הבוחן את כל הפתרונות האפשריים, תוך הימנעות מהתכנסות לפתרון אופטימלי מקומי. מידת התרחבות גבוהה נוטה להקטין את קצב ההתכנסות של האלגוריתם, אך מעלה משמעותית את ההסתברות למציאת אופטימום גלובלי. אלגוריתם המחלק את פעולתו להתמקדות והתרחבות נקרא אלגוריתם חיפוש-לסירוגין. רמות ההתמקדות וההתרחבות של האלגוריתם, וכמו כן מידת האיזון בין שני המרכיבים, נקבעות על ידי מידת האקראיות וערכי הפרמטרים. יעילותו ודיוקו של האלגוריתם תלוי ביחס ההתמקדות-התרחבות Q {\displaystyle Q} : Q = τ a τ b {\displaystyle Q={\frac {\tau _{a}}{\tau _{b}}}} כאשר τ a {\displaystyle \tau _{a}} ו- τ b {\displaystyle \tau _{b}} הם פרקי הזמן המנוצלים לתהליך ההתמקדות ולתהליך ההתרחבות, בהתאמה. חשיבותו של יחס התמקדות-התרחבות מוביל לפיתוח המודל התאורטי הבא, עבור המקרים הדו-ממדיים והתלת-ממדיים: אלגוריתם חיפוש המתמקד במרחב פתרונות קטן בעל רדיוס a {\displaystyle a} הנמצא במרחב פתרונות שרדיוסו b {\displaystyle b} , כאשר a ≪ b {\displaystyle a\ll b} , ניתן למידול על ידי תהליך דיפוזיבי איטי המתואר על ידי מערכת המשוואות הסטוכסטיות הדיפרנציאליות הבאות: { D ∇ r 2 t 1 + 1 2 π τ a ∫ 0 2 π [ t 2 ( r ) − t 1 ( r ) ] d θ + 1 = 0 u ∇ r t 2 ( r ) − 1 τ b [ r 2 ( r ) − t 1 ( r ) ] + 1 = 0 {\displaystyle \left\{{\begin{matrix}D\nabla _{r}^{2}t_{1}+{\frac {1}{2\pi \tau _{a}}}\int _{0}^{2\pi }\left[t_{2}(r)-t_{1}(r)\right]d\theta +1=0\\\\u\nabla _{r}t_{2}(r)-{\frac {1}{\tau _{b}}}\left[r_{2}(r)-t_{1}(r)\right]+1=0\end{matrix}}\right.} כאשר D {\displaystyle D} הוא קבוע הדיפוזיה, τ a {\displaystyle \tau _{a}} ו- τ b {\displaystyle \tau _{b}} הם תוחלות הזמן שנוצלו לתהליך ההתמקדות ולתהליך ההתרחבות, בהתאמה, t 1 {\displaystyle t_{1}} ו- t 2 {\displaystyle t_{2}} הם תוחלות זמני ההגעה למטרה בתהליך ההתמקדות ובתהליך ההתרחבות, בהתאמה, ו- u {\displaystyle u} הוא קצב החיפוש הממוצע. תחת ההנחה שקצב החיפוש u {\displaystyle u} זהה בכל הצעדים, פרק הזמן המינימלי הדרוש לכל אחד מהשלבים הוא: τ a m i n ≈ D 2 u 2 ⋅ ln 2 ⁡ b a 2 ln ⁡ b a − 1 τ b m i n ≈ a u ln ⁡ b a − 1 2 {\displaystyle \tau _{a}^{\mathrm {min} }\approx {\frac {D}{2u^{2}}}\cdot {\frac {\ln ^{2}{\frac {b}{a}}}{2\ln {\frac {b}{a}}-1}}\quad \quad \tau _{b}^{\mathrm {min} }\approx {\frac {a}{u}}{\sqrt {\ln {\frac {b}{a}}-{\frac {1}{2}}}}} כאשר u → ∞ {\displaystyle u\rightarrow \infty } , מתקבל יחס ההתמקדות-התרחבות האופטימלי: ( 1 ) Q o p t i m a l = τ a τ b 2 ≈ D a 2 1 [ 2 − 1 ln ⁡ b a ] 2 {\displaystyle (1)\quad Q_{\mathrm {optimal} }={\frac {\tau _{a}}{\tau _{b}^{2}}}\approx {\frac {D}{a^{2}}}{\frac {1}{\left[2-{\frac {1}{\ln {\frac {b}{a}}}}\right]^{2}}}} התוצאות לעיל קבילות עבור המקרה הדו-מימדי, ושלא קיימות תוצאות כלליות עבור יותר מ-3 ממדים. נדגים את חישוב יחס ההתמקדות-התרחבות במקרה דו-ממדי של הילוך אקראי איזוטרופי, כלומר, במצב שבו מתקיים: D ≈ s 2 2 {\displaystyle D\approx {\frac {s^{2}}{2}}} כאשר D {\displaystyle D} הוא קבוע הדיפוזיה ו- s {\displaystyle s} הוא אורך הצעד של המהלך בכל איטרציה. במקרה שבו b / a → ∞ {\displaystyle b/a\rightarrow \infty } נקבל מתוצאה (1): Q o p t i m a l = τ a τ b 2 ≈ 1 8 {\displaystyle Q_{\mathrm {optimal} }={\frac {\tau _{a}}{\tau _{b}^{2}}}\approx {\frac {1}{8}}} מכאן ניתן להסיק שבמקרה זה, יש להשקיע זמן רב יותר בשלב ההתרחבות מאשר בשלב ההתמקדות. נדגים את חישוב יחס ההתמקדות-התרחבות במקרה של פונקציית גל-עומד: f ( x ) = 1 + { exp ⁡ [ − ∑ i = 1 d ( x i β ) 10 ] − 2 exp ⁡ [ − ∑ i = 1 d ( x i − π ) 2 ] } ⋅ ∏ i = 1 d cos 2 ⁡ x i {\displaystyle f(x)=1+\left\{\exp \left[-\sum _{i=1}^{d}\left({\frac {x_{i}}{\beta }}\right)^{10}\right]-2\exp \left[-\sum _{i=1}^{d}\left(x_{i}-\pi \right)^{2}\right]\right\}\cdot \prod _{i=1}^{d}\cos ^{2}x_{i}} פונקציה זו מאופיינת במספר גדול של נקודות קיצון מקומיות, ובעלת מינימום גלובלית יחידה f m i n = 0 {\displaystyle f_{\mathrm {min} }=0} בנקודה ( π , π , … , π ) {\displaystyle (\pi ,\pi ,\dots ,\pi )} בתחום − 20 ≤ x i ≤ 20 {\displaystyle -20\leq x_{i}\leq 20} כאשר i = 1 , 2 , … , d {\displaystyle i=1,2,\dots ,d} ו- β = 15 {\displaystyle \beta =15} . נקבע ש- α = π / 2 {\displaystyle \alpha =\pi /2} , ומכיוון ש- b = 20 {\displaystyle b=20} , נובע ש- b / a = 12.7 {\displaystyle b/a=12.7} , ועבור d = 2 {\displaystyle d=2} נקבל: Q o p t i m a l ≈ 1 2 [ 2 − ln ⁡ ( b a ) ] 2 ≈ 0.19 {\displaystyle Q_{\mathrm {optimal} }\approx {\frac {1}{2\left[2-\ln \left({\frac {b}{a}}\right)\right]^{2}}}\approx 0.19} מכאן ניתן להסיק, שבהפעלת האלגוריתם על פונקציית גל-עומד, על האלגוריתם להשקיע 80% מזמן החיפוש בהתרחבות ו- 20% מזמן החיפוש בהתמקדות, על מנת לבצע את החישוב בזמן אופטימלי. הטבלה הבאה מתארת רצף של חמישה ניסויים, בהם מופעל אלגוריתם הגחליליות למציאת מינימום עבור פונקציית גל-עומד, כאשר n = 15 {\displaystyle n=15} , t = 1000 {\displaystyle t=1000} , x ∈ [ − 20 , 20 ] n {\displaystyle x\in [-20,20]^{n}} , β = 15 {\displaystyle \beta =15} ו- Q {\displaystyle Q} משתנה. קל להבחין שהתוצאה המדויקת ביותר מתקבלת כאשר Q = 0.2 {\displaystyle Q=0.2} - הבחנה אמפירית המתלכדת עם הטענה התאורטית. אלגוריתם החיפוש-לסירוגין אשר הוצע על ידי בניצ'ו אטאל עבור ממדים גבוהים יותר, מתבסס על היחסים האסימפטוטיים הבאים, המתקבלים באמצעות אקסטרפולציה: τ a τ b 2 ∼ O ( D a 2 ) τ m ∼ O ( b u ( b a ) d − 1 ) {\displaystyle {\frac {\tau _{a}}{\tau _{b}^{2}}}\sim O\left({\frac {D}{a^{2}}}\right)\quad \quad \tau _{m}\sim O\left({\frac {b}{u}}\left({\frac {b}{a}}\right)^{d-1}\right)} כאשר τ m {\displaystyle \tau _{m}} הוא זמן החיפוש הכולל הממוצע. הודגם אמפירית כי בממדים גבוהים, אלגוריתם הגחליליות יעיל בהרבה מן האלגוריתם הנ"ל, אך לא נמצא מודל תאורטי המסביר את תוצאות הניסוי. מקדם האקראיות α t {\displaystyle \alpha _{t}} מווסת את מידת האקראיות של מהלכי הגחליליות. כיוון שהפחתה הדרגתית של מידת האקראיות תאפשר מניעה של התכנסות לאופטימום מקומי, התכנסות מהירה תתקבל עבור α t = a 0 δ t {\displaystyle \alpha _{t}=a_{0}\delta ^{t}} כאשר δ ∈ [ 0 , 1 ] {\displaystyle \delta \in [0,1]} ו- a 0 {\displaystyle a_{0}} הוא מקדם אקראיות התחלתי. סימולציות מראות שהתכנסות יעילה במיוחד מתקבלת עבור γ = 1 / L {\displaystyle \gamma =1/{\sqrt {L}}} , n ∈ [ 25 , 40 ] {\displaystyle n\in [25,40]} , a 0 = 0.01 L {\displaystyle a_{0}=0.01L} , כאשר L {\displaystyle L} הוא סדר הגודל הממוצע של פתרונות הבעיה. סיבוכיות האלגוריתם היא O ( n 2 t ) {\displaystyle O(n^{2}t)} , כאשר t {\displaystyle t} הוא מספר האיטרציות ו- n {\displaystyle n} הוא מספר הגחליליות. עבור n {\displaystyle n} גדול יחסית, ניתן להחליף את הלולאה הכפולה בלולאה יחידה, ולמיין את מידת המשיכה של הגחליליות באמצעות אלגוריתם מיון השוואתי. במקרה זה, סיבוכיות האלגוריתם היא O ( n t log ⁡ n ) {\displaystyle O(nt\log {n})} . בשני המקרים, הסיבוכיות ליניארית ב- t {\displaystyle t} . להלן מספר האיטרציות שנדרשו לפתרון בעיות אופטימיזציה עבור שלוש פונקציות מרכזיות, בטווח נתון, וכתלות במספר הממדים של הפונקציה ( n {\displaystyle n} ). Sphere ( x ) = ∑ i = 1 n x i 2 [ − 100 , 100 ] n {\displaystyle {\textrm {Sphere}}({\boldsymbol {x}})=\sum _{i=1}^{n}x_{i}^{2}\quad \quad [-100,100]^{n}} Ackley ( x ) = − 20 exp ⁡ [ − 1 5 1 n ∑ i = 1 n x i 2 ] − exp ⁡ [ 1 n ∑ i = 1 n cos ⁡ ( 2 π x i ) ] + 20 + e [ − 30 , 30 ] n {\displaystyle {\textrm {Ackley}}({\boldsymbol {x}})=-20\exp \left[-{\frac {1}{5}}{\sqrt {{\frac {1}{n}}\sum _{i=1}^{n}{x_{i}^{2}}}}\right]-\exp \left[{\frac {1}{n}}\sum _{i=1}^{n}{\cos(2\pi x_{i})}\right]+20+e\quad \quad [-30,30]^{n}} Rosenbrock ( x ) = ∑ i = 1 n − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] [ − 30 , 30 ] n {\displaystyle {\textrm {Rosenbrock}}({\boldsymbol {x}})=\sum _{i=1}^{n-1}\left[100\left(x_{i+1}-x_{i}^{2}\right)^{2}+\left(x_{i}-1\right)^{2}\right]\quad \quad [-30,30]^{n}} בעיבוד תמונה, קוונטיזצייה וקטורית המשמשת לדחיסה דיגיטלית של תמונות ורגיסטרציה של תמונות קשיחות. במתמטיקה, אופטימיזציית ערכים עצמיים של מערכות איזו-ספקטרליות ואופטימיזצייה פרמטרית עבור מכונת וקטורים תומכים. בשידור, תכנון אנטנות. בהנדסת מבנים, אופטימיזציית בבעיות מרובות משתנים. במדעי המחשב, פתרון יעיל לבעיית הסוכן הנוסע ולבעיות תחביר סמנטיות. בכימיה, ניתוח מצבי שיווי משקל. בביולוגיה, ניבוי של מבני חלבונים. אופטימיזציית הנחיל בינה מלאכותית אלגוריתם קן הנמלים תנועה בראונית Yang, X. S. (2008). Nature-Inspired Metaheuristic Algorithms. Frome: Luniver Press. ISBN 1-905986-10-6 Yang, X. S. (2009). "Firefly algorithms for multimodal optimization". Stochastic Algorithms: Foundations and Applications, SAGA 2009. Lecture Notes in Computer Sciences 5792. pp. 169–178. arXiv:1003.1466. Google Code Archive - Long-term storage for Google Code Project Hosting., code.google.com מימוש לאלגוריתם הגחליליות ב- Python מימוש לאלגוריתם הגחליליות ב- C מימוש לאלגוריתם הגחליליות ב- Mathlab