בקרה אופטימלית

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

## הגדרת הבעיה
נתונה מערכת דינמית מאחד מהסוגים הבאים:

\ \dot{x}=f(x,u),\ x(t_0)=x_0 או:
\ \dot{x}=Ax+Bu,\ x(t_0)=x_0

כאשר במערכת הזאת:
* x - וקטור המצב של המערכת.
* u - וקטור הבקרה, המנסה להביא את אינדקס הביצועים למקסימום או מינימום. וקטור הבקרה מקיים \ u \in U

וקטור המצב של המערכת תחום במרחב המצב, המושפע מתנאי ההתחלה של המערכת ומהמרחב המותר למאמץ הבקרה u.
אינדקס הביצועים הוא פונקציונל, כלומר מיפוי של פונקציות אל הציר הממשי: 
\ J:(U,X(U)) \rightarrow R^1

הבעיה הבסיסית, לפיכך, היא למצוא את חוק הבקרה האופטימלי: \ u^*[t_0,t_f] \in U,\ u*=arg min(J)
הצמד \ u^*[t_0,t_f],\ x^*[t_0,t_f] נקרא מסלול אופטימלי.

ברוב המקרים, לבעיה יש סט של אילוצים, היכולים להיות מהסוגים הבאים:
* מצב סופי קבוע נדרש: \ x(t_f)=x_f
* מניפה סופית: \ x(t_f)^Tx(t_f)=r_f^2
* אילוצים קשיחים על המצב. למשל, חסימה של וקטור המצב שלא יברח מחוץ לגבול מסוים.
* מצב התחלתי חופשי.
* מניפה התחלתית: \ x(t_0)^Tx(t_0)=r^2_0
* זמן סופי חופשי.

## פתרון בעיות אופטימיזציה
### תנאי לנקודת קיצון
שינוי אינפיניטסימלי ב-x, שיסומן ב- \ \delta x יגרום לשינוי קטן בערך הפונקציה f, שיסומן ב-\ \delta f. כדי להגיע לנקודת קיצון, אנחנו רוצים ש- \ \delta f=0. תנאי זה מתקיים, במקרים בהם מוגדר אילוץ מהסוג \ g(x)=0 אם ורק אם:
* g(x)=0 בנקודה כלשהי x0.
* \ f_x=-\lambda g_x בנקודה x0. תנאי זה מחייב קולינריות של הגרדיאנט של f והקו המשיק לאילוץ בנקודה x0.

דרך אחרת להשתמש בכלל זה הוא השימוש בכופלי לגראנז', כלומר להגדיר לגראנז'יאן: \ L(x,\lambda)=f(x)+\lambda g(x) ואז לדרוש שהוא יהיה סטציונרי בנקודה x0 ביחס ל-x וביחס לכופלי הלגראנז'. אם יש מספר אילוצים, משתמשים בווקטור של כופלי לגראנז'.

### תנאי הניצבות
משתמשים בחשבון וריאציות בשביל לבחון את הבעיה הבאה:
\ \min_{x \in X}=\int ^{t_f}_{t_0} \Phi (x,\dot{x},t)dt 
ניתן להוכיח שישנם שני תנאים המבטיחים את השגת המינימום:
* תנאי אוילר-לגראנז': \ \Phi_x=\frac{d}{dt}\Phi^T_{\dot{x}}
* תנאי הניצבות: \ [\Phi^T_{\dot{x}}\delta x]^{t_f}_{t_0}=0

### ניסוח ההמילטוניאן
נגדיר את הבעיה הבאה:
מעוניינים למזער את הערך של אינדקס הביצועים הבא: \ min J=\int ^{t_f}_{t_0} \phi(x,u,t)dt + \Theta[x(t_f),t_f] תחת האילוצים של משוואת המצב: \ \dot{x}=f(x,u,t) 
מגדירים לגראנז'יאן כזה: \ L=J + \int ^{t_f}_{t_0} \lambda^T(t)(f-\dot{x})dt 
כמו כן מגדירים המילטוניאן כך:
\ H=\Phi+\lambda ^T f 
וניתן להוכיח שהמשוואות הבאות פותרות את בעיית האופטימיזציה שתוארה קודם לכן:
\ H_x=-\dot{\lambda}
\ H_{\lambda}=\dot{x}
\ H_u=0
יחד עם תנאי הקצה: 
* \ \lambda ^T(t_0)\delta x(t_0) - תנאי התחלה.
* \ [\Theta _x-\lambda(t_f)]^T\delta x(t_f) - תנאי הסיום.
* \ [H+\Theta_{t_f}]_{t_f}\delta t_f - במקרים בהם יש זמן חופשי.

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

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

לעיתים ניתן לקבל פתרונות שהם כן פתרונות בחוג סגור, בעיקר בבעיות ייחודיות המוגדרות כבעיות רגולטור ליניארי ריבועי (Linear Quadratic Regulator, LQR). בבעיות אלה ההגדרה היא כזו:
\ J=\frac{1}{2} \int ^{t_f}_{t_0}(x^TQx+u^TRu)dt+\frac{1}{2}x^T(t_f)Sx(t_f)
\ \dot{x}=Ax+Bu
\ x(t_0)=x_0

\ S\geq 0
\ Q\geq 0
\ R>0
הפתרון לבעיה זו נתון על ידי חוק הבקרה הבא: \ u^*=-R^{-1}B^TPx
כאשר: P הוא פתרון משוואת ריקאטי הדיפרנציאלית:
\ -\dot{P}=PA+A^TP-PBR^{-1}B^TP+Q
\ P(t_f)=S

## שיטות חישוביות
בבעיות שונות לא ניתן או קשה מאוד לבצע אופטימיזציה בשיטות אנליטיות. בבעיות אלה משתמשים במספר שיטות חישוביות כדי לבצע אופטימיזציה באמצעים חישוביים, תוך הסתמכות על כוחו של המחשב. סעיף זה יפרט את השיטות המקובלות בעולם:
### שיטת Steepest Descent
אפשר לתאר את אינדקס הביצועים כמשטח רב-ממדי, בו מטרת הבקרה האופטימלית היא למצוא את הערך הנמוך ביותר של אינדקס זה. כלומר, תאורטית, אם מתקדמים "כלפי מטה", כמו מים במורד הזרימה, מגיעים למקום או לערך הנמוך ביותר של משטח זה. שיטת Steepest Descent פועלת בכיוון של הגרדיאנט המרבי ובכך מקרבת אותנו בכל פעם לפתרון. האלגוריתם לפיכך הוא:
* בחר נקודה x0.
* חשב את הגרדיאנט של פונקציית המחיר f בנקודה זו.
* חשב את הנקודה הבאה \ x_{n+1}=x_n-f_x(x_n)*s, כאשר s הוא גודל הצעד, שאותו בוחרים.
* תנאי העצירה: כאשר ההפרש בין הערכים של הפונקציה בעקבות הצעד קטנים התכנסנו לנקודת המינימום.

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

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

## קישורים חיצוניים

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:חקר ביצועים
קטגוריה:תורת הבקרה
קטגוריה:אופטימיזציה רציפה