אבולוציה דיפרנציאלית של SciPy

Bwlwzyh Dyprnzy Lyt Sl Scipy



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

מהי אבולוציה דיפרנציאלית של SciPy בשפת Python?

Scipy היא ספרייה שטחית, חינמית ומובנת המשמשת לפתרון בעיות מדעיות ומתמטיות. SciPy היא תיבת אוצר למפתחים מכיוון שהספרייה שלה מלאה במודולים יקרים. SciPy מרחיב את הפונקציונליות של NumPy עם אשכול חשוב של אלגוריתמים. לספריית SciPy יש חבילות משנה שניתן להשתמש בהן לחישובים, כמו scipy.io, scipy.optimize וכו'. SciPy מייצרת פונקציית 'אבולוציה דיפרנציאלית' ופונקציות רבות עוצמה בחבילת scipy.optimize. ה-scipy.optimize משמש לאופטימיזציה ביישומי Python.

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







תחביר של פונקציית אבולוציה דיפרנציאלית

פונקציית האבולוציה הדיפרנציאלית קיימת ב-Python תוך שימוש בפונקציה differential_evolution (). התחביר של פונקציית האבולוציה הדיפרנציאלית מוצג להלן:





בואו נעבור על פרמטרי הפונקציה:





הפונקציה חייבת להיות ניתנת להקראה עם f(x,*args); bounds מתייחס לרצף המשתנים שניתן לציין בשתי דרכים: האסטרטגיה היא אופציונלית או מחרוזת עם ערך ברירת המחדל 'best1bin'; maxiter הוא אופציונלי או ערך int; popsize הוא int או אופציונלי; tol הוא int או אופציונלי; ערך המוטציה הוא בצוף או אופציונלי; ערך הקומבינציה הוא בצוף או אופציונלי; הזרע הוא none, int, NumPy ו-Random.

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



דוגמה 1

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

יְבוּא רדום כפי ש לְמָשָׁל
מ מצומצם יְבוּא לייעל
מ מצומצם. לייעל יְבוּא אבולוציה_דיפרנציאלית
יְבוּא matplotlib. pyplot כפי ש py
מ matplotlib יְבוּא ס'מ

def func ( ע ) :

עם , איקס = ע

ח = לְמָשָׁל sqrt ( עם ** 4 + x ** 4 )

לַחֲזוֹר לְמָשָׁל sqrt ( ח )


DE_bounds = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

מילואים = אבולוציה_דיפרנציאלית ( func , DE_bounds )

הדפס ( מילואים )

ייבאנו ספריות כמו SciPy ו-NumPy לחישובים מספריים של מערך. ייבאנו את הפונקציה differential_evolution מהמודול scipy.optimize. לאחר מכן, עם מילת המפתח 'def', אנו מגדירים את פונקציית המטרה הניתנת להתקשרות ומעבירים את הפרמטר 'p'. אנו מגדירים בהצלחה את הפונקציה שמוצאת את השורש הריבועי של תוספת המשתנים NumPy, שהוא z, x. ערך השורש הריבועי מאוחסן במשתנה 'h'. נחזיר את ערך השורש הריבועי בפונקציה המוגדרת. זה מוחזר כטיעון.

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

Differential_evolution() מראה שהערך המינימלי של הפונקציה מוצג בנקודה (0, 0).

דוגמה 2

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

יְבוּא רדום כפי ש לְמָשָׁל
מ מצומצם יְבוּא לייעל
מ מצומצם. לייעל יְבוּא אבולוציה_דיפרנציאלית

def object_func ( ד ) :
לַחֲזוֹר ( ד [ 1 ] - 1.2 ) / 2 + 0.5 [ 0 ] * 1.3 * ( ד [ 1 ] + 0.5 ) ** 3

_גבולות = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

disp = אבולוציה_דיפרנציאלית ( object_func , _גבולות , קופץ = 80 , פולני = שֶׁקֶר )

הדפס ( disp )

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

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

דוגמה 3

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

יְבוּא רדום כפי ש לְמָשָׁל
מ מצומצם יְבוּא לייעל
מ מצומצם. לייעל יְבוּא אבולוציה_דיפרנציאלית

def obj_func ( אופר ) :
לַחֲזוֹר 3 ** 9 / 0.2 + 6 / 3 * 2 ** עשרים

גְבוּל = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]

הַחוּצָה = אבולוציה_דיפרנציאלית ( obj_func , גְבוּל , פולני = נָכוֹן )

הדפס ( 'הפלט הוא:' , הַחוּצָה )

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

כמו בצילום המסך הקודם, הערך המינימלי של הפונקציה הוא [0.29236931, 0.16808904]. אתה יכול גם להפעיל דוגמאות אלה בסביבה שלך כדי להבין טוב יותר את מושג הפונקציה differential_evolution.

סיכום

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