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

בקרה אופטימלית היא ענף בתורת הבקרה, המבקש למצוא חוקי בקרה, שביצועיהם מביאים למקסימום או מינימום אינדקס ביצועים כלשהו. נתונה מערכת דינמית מאחד מהסוגים הבאים:   x ˙ = f ( x , u ) ,   x ( t 0 ) = x 0 {\displaystyle \ {\dot {x}}=f(x,u),\ x(t_{0})=x_{0}} או:   x ˙ = A x + B u ,   x ( t 0 ) = x 0 {\displaystyle \ {\dot {x}}=Ax+Bu,\ x(t_{0})=x_{0}} כאשר במערכת הזאת: x - וקטור המצב של המערכת. u - וקטור הבקרה, המנסה להביא את אינדקס הביצועים למקסימום או מינימום. וקטור הבקרה מקיים   u ∈ U {\displaystyle \ u\in U} וקטור המצב של המערכת תחום במרחב המצב, המושפע מתנאי ההתחלה של המערכת ומהמרחב המותר למאמץ הבקרה u. אינדקס הביצועים הוא פונקציונל, כלומר מיפוי של פונקציות אל הציר הממשי:   J : ( U , X ( U ) ) → R 1 {\displaystyle \ J:(U,X(U))\rightarrow R^{1}} הבעיה הבסיסית, לפיכך, היא למצוא את חוק הבקרה האופטימלי:   u ∗ [ t 0 , t f ] ∈ U ,   u ∗ = a r g m i n ( J ) {\displaystyle \ u^{*}[t_{0},t_{f}]\in U,\ u*=argmin(J)} הצמד   u ∗ [ t 0 , t f ] ,   x ∗ [ t 0 , t f ] {\displaystyle \ u^{*}[t_{0},t_{f}],\ x^{*}[t_{0},t_{f}]} נקרא מסלול אופטימלי. ברוב המקרים, לבעיה יש סט של אילוצים, היכולים להיות מהסוגים הבאים: מצב סופי קבוע נדרש:   x ( t f ) = x f {\displaystyle \ x(t_{f})=x_{f}} מניפה סופית:   x ( t f ) T x ( t f ) = r f 2 {\displaystyle \ x(t_{f})^{T}x(t_{f})=r_{f}^{2}} אילוצים קשיחים על המצב. למשל, חסימה של וקטור המצב שלא יברח מחוץ לגבול מסוים. מצב התחלתי חופשי. מניפה התחלתית:   x ( t 0 ) T x ( t 0 ) = r 0 2 {\displaystyle \ x(t_{0})^{T}x(t_{0})=r_{0}^{2}} זמן סופי חופשי. שינוי אינפיניטסימלי ב-x, שיסומן ב-   δ x {\displaystyle \ \delta x} יגרום לשינוי קטן בערך הפונקציה f, שיסומן ב-   δ f {\displaystyle \ \delta f} . כדי להגיע לנקודת קיצון, אנחנו רוצים ש-   δ f = 0 {\displaystyle \ \delta f=0} . תנאי זה מתקיים, במקרים בהם מוגדר אילוץ מהסוג   g ( x ) = 0 {\displaystyle \ g(x)=0} אם ורק אם: g(x)=0 בנקודה כלשהי x0.   f x = − λ g x {\displaystyle \ f_{x}=-\lambda g_{x}} בנקודה x0. תנאי זה מחייב קולינריות של הגרדיאנט של f והקו המשיק לאילוץ בנקודה x0. דרך אחרת להשתמש בכלל זה הוא השימוש בכופלי לגראנז', כלומר להגדיר לגראנז'יאן:   L ( x , λ ) = f ( x ) + λ g ( x ) {\displaystyle \ L(x,\lambda )=f(x)+\lambda g(x)} ואז לדרוש שהוא יהיה סטציונרי בנקודה x0 ביחס ל-x וביחס לכופלי הלגראנז'. אם יש מספר אילוצים, משתמשים בוקטור של כופלי לגראנז'. משתמשים בחשבון וריאציות בשביל לבחון את הבעיה הבאה:   min x ∈ X = ∫ t 0 t f Φ ( x , x ˙ , t ) d t {\displaystyle \ \min _{x\in X}=\int _{t_{0}}^{t_{f}}\Phi (x,{\dot {x}},t)dt} ניתן להוכיח שישנם שני תנאים המבטיחים את השגת המינימום: תנאי אוילר-לגראנז':   Φ x = d d t Φ x ˙ T {\displaystyle \ \Phi _{x}={\frac {d}{dt}}\Phi _{\dot {x}}^{T}} תנאי הניצבות:   [ Φ x ˙ T δ x ] t 0 t f = 0 {\displaystyle \ [\Phi _{\dot {x}}^{T}\delta x]_{t_{0}}^{t_{f}}=0} נגדיר את הבעיה הבאה: מעוניינים למזער את הערך של אינדקס הביצועים הבא:   m i n J = ∫ t 0 t f ϕ ( x , u , t ) d t + Θ [ x ( t f ) , t f ] {\displaystyle \ minJ=\int _{t_{0}}^{t_{f}}\phi (x,u,t)dt+\Theta [x(t_{f}),t_{f}]} תחת האילוצים של משוואת המצב:   x ˙ = f ( x , u , t ) {\displaystyle \ {\dot {x}}=f(x,u,t)} מגדירים לגראנז'יאן כזה:   L = J + ∫ t 0 t f λ T ( t ) ( f − x ˙ ) d t {\displaystyle \ L=J+\int _{t_{0}}^{t_{f}}\lambda ^{T}(t)(f-{\dot {x}})dt} כמו כן מגדירים המילטוניאן כך:   H = Φ + λ T f {\displaystyle \ H=\Phi +\lambda ^{T}f} וניתן להוכיח שהמשוואות הבאות פותרות את בעיית האופטימיזציה שתוארה קודם לכן:   H x = − λ ˙ {\displaystyle \ H_{x}=-{\dot {\lambda }}}   H λ = x ˙ {\displaystyle \ H_{\lambda }={\dot {x}}}   H u = 0 {\displaystyle \ H_{u}=0} יחד עם תנאי הקצה:   λ T ( t 0 ) δ x ( t 0 ) {\displaystyle \ \lambda ^{T}(t_{0})\delta x(t_{0})} - תנאי התחלה.   [ Θ x − λ ( t f ) ] T δ x ( t f ) {\displaystyle \ [\Theta _{x}-\lambda (t_{f})]^{T}\delta x(t_{f})} - תנאי הסיום.   [ H + Θ t f ] t f δ t f {\displaystyle \ [H+\Theta _{t_{f}}]_{t_{f}}\delta t_{f}} - במקרים בהם יש זמן חופשי. בקרה אופטימלית משמשת במגוון רחב של יישומים. להלן כמה יישומים אפשריים: בקרת מסלול של חלליות. הנחיה של טילים. אמידה של פרמטרים ומשתני מצב של גופים. פתרון בעיית הצריכה של פרט מייצג על פני זמן בכלכלה. המגבלות העיקריות של בקרה אופטימלית הן בעיקר העובדה שרוב הפתרונות מגדירים חוק בקרה התלוי בזמן ולא במשתני המצב של המערכת המבוקרת, כלומר בדרך כלל הפתרונות הם חוקי בקרה בחוג פתוח ולא בקרה בחוג סגור. לעיתים ניתן לקבל פתרונות שהם כן פתרונות בחוג סגור, בעיקר בבעיות ייחודיות המוגדרות כבעיות רגולטור ליניארי ריבועי (Linear Quadratic Regulator, LQR). בבעיות אלה ההגדרה היא כזו:   J = 1 2 ∫ t 0 t f ( x T Q x + u T R u ) d t + 1 2 x T ( t f ) S x ( t f ) {\displaystyle \ J={\frac {1}{2}}\int _{t_{0}}^{t_{f}}(x^{T}Qx+u^{T}Ru)dt+{\frac {1}{2}}x^{T}(t_{f})Sx(t_{f})}   x ˙ = A x + B u {\displaystyle \ {\dot {x}}=Ax+Bu}   x ( t 0 ) = x 0 {\displaystyle \ x(t_{0})=x_{0}}   S ≥ 0 {\displaystyle \ S\geq 0}   Q ≥ 0 {\displaystyle \ Q\geq 0}   R > 0 {\displaystyle \ R>0} הפתרון לבעיה זו נתון על ידי חוק הבקרה הבא:   u ∗ = − R − 1 B T P x {\displaystyle \ u^{*}=-R^{-1}B^{T}Px} כאשר: P הוא פתרון משוואת ריקאטי הדיפרנציאלית:   − P ˙ = P A + A T P − P B R − 1 B T P + Q {\displaystyle \ -{\dot {P}}=PA+A^{T}P-PBR^{-1}B^{T}P+Q}   P ( t f ) = S {\displaystyle \ P(t_{f})=S} בבעיות שונות לא ניתן או קשה מאוד לבצע אופטימיזציה בשיטות אנליטיות. בבעיות אלה משתמשים במספר שיטות חישוביות כדי לבצע אופטימיזציה באמצעים חישוביים, תוך הסתמכות על כוחו של המחשב. סעיף זה יפרט את השיטות המקובלות בעולם: אפשר לתאר את אינדקס הביצועים כמשטח רב-ממדי, בו מטרת הבקרה האופטימלית היא למצוא את הערך הנמוך ביותר של אינדקס זה. כלומר, תאורטית, אם מתקדמים "כלפי מטה", כמו מים במורד הזרימה, מגיעים למקום או לערך הנמוך ביותר של משטח זה. שיטת Steepest Descent פועלת בכיוון של הגרדיאנט המרבי ובכך מקרבת אותנו בכל פעם לפתרון. האלגוריתם לפיכך הוא: בחר נקודה x0. חשב את הגרדיאנט של פונקציית המחיר f בנקודה זו. חשב את הנקודה הבאה   x n + 1 = x n − f x ( x n ) ∗ s {\displaystyle \ x_{n+1}=x_{n}-f_{x}(x_{n})*s} , כאשר s הוא גודל הצעד, שאותו בוחרים. תנאי העצירה: כאשר ההפרש בין הערכים של הפונקציה בעקבות הצעד קטנים התכנסנו לנקודת המינימום. העיקרון בתכנות דינמי דיסקרטי הוא הליכה מתנאי הסיום של הבעיה אל תנאי ההתחלה, תוך התחשבות באילוצי הבעיה. אלגוריתם הפתרון הוא כזה: חלק את מרחב הבעיה הרציף בדרך כלל לנקודות דיסקרטיות במרחקים קטנים כרצונך (כמובן שככל שהרזולוציה משתפרת גדל העומס החישובי של הבעיה). צא מתנאי הסיום ועבור אל הנקודות שניתן להגיע אליהן לפי האילוצים וחשב את המחיר להגיע לנקודות אלה (דרך להגדיר אילוץ היא מחיר אינסופי) על פי המחיר לנקודה הקודמת + המחיר מהנקודה הקודמת לנקודה הנוכחית. בחר את הערך הנמוך ביותר להגיע אל כל נקודה ושמור את המסלול הזה כמסלול האופטימלי. חזור על הפעולות הקודמות עד שתגיע לתנאי ההתחלה של הבעיה. כתוצאה מהאלגוריתם מתקבל באופן מיידי הערך המינימלי של המסלול והמסלול עצמו. המסלול מגדיר את מאמצי הבקרה הנדרשים לביצוע המסלול.