Điều khiển tối ưu

**Lý thuyết điều khiển tối ưu** là một phần mở rộng của phép tính biến phân, là một phương pháp tối ưu hóa cho các lý thuyết điều khiển phát sinh. Phương pháp này phần lớn là do công lao đóng góp của Lev Pontryagin và các cộng tác viên của ông ở Liên Xô cũng như Richard Bellman tại Hoa Kỳ. Điều khiển tối ưu có thể được xem như là một chiến lược điều khiển trong lý thuyết điều khiển tự động.

## Phương pháp chung
Điều khiển tối ưu giải quyết bài toán tìm kiếm một quy luật điều khiển cho một hệ thống cho trước như là một tiêu chuẩn tối ưu định đã đạt được. Một bài toán điều khiển bao gồm một hàm chi phí đó là một hàm của trạng thái và các biến điều khiển. Một **điều khiển tối ưu** là một tập hợp các phương trình vi phân mô tả đường đi của các biến điều khiển cực tiểu hóa hàm chi phí. Điều khiển tối ưu có thể được bắt nguồn từ việc sử dụng nguyên lý cực đại Pontryagin (một điều kiện cần còn được biết đến đó là nguyên lý cực tiểu Pontryagin hoặc chỉ đơn giản là nguyên lý Pontryagin), hoặc bằng cách giải phương trình Hamilton-Jacobi-Bellman (điều kiện đủ).

Chúng ta bắt đầu với một ví dụ đơn giản. Hãy xem xét một chiếc xe đi trên một đường thẳng qua một con đường nhấp nhô. Câu hỏi đặt ra là, người lái xe phải đạp ga như thế nào để tối thiểu hóa tổng thời gian đi lại? Rõ ràng trong ví dụ này, thuật ngữ *luật điều khiển *chỉ để xác định cách thức trong đó người lái xe tăng ga và chuyển hộp số. *Hệ thống *bao gồm cả xe và đường, và *tiêu chuẩn tối ưu *là* *tối thiểu hóa tổng thời gian đi lại. Các bài toán điều khiển thường bao gồm các ràng buộc bổ sung. Ví dụ, lượng nhiên liệu sẵn có thể bị giới hạn, bàn đạp ga không thể bị đạp xuyên qua sàn xe hơi, tốc độ bị giới hạn,...

Một hàm chi phí thích hợp là một công thức toán học đưa ra thời gian đi lại như một hàm của tốc độ, các xem xét hình học, và các điều kiện ban đầu của hệ thống. Ta thường gặp trường hợp các hạn chế là có thể hoán đổi cho nhau được với hàm chi phí.

Một bài toán khiển tối ưu khác là phải tìm ra cách để lái xe để giảm thiểu mức tiêu thụ nhiên liệu của nó, cho rằng nó phải hoàn thành một khóa học được đưa ra không quá một thời gian xác định. Tuy nhiên, một bài toán điều khiển khác là để giảm thiểu tổng số tiều phải chi để hoàn thành chuyến đi, giá tiền giả định đưa ra cho thời gian và nhiên liệu.

Một khung trừu tượng hơn diễn ra như sau. Tối thiểu hóa hàm chi phí thời gian liên tục
: J=\Phi\,[\,\textbf{x}(t_0),t_0,\textbf{x}(t_f),t_f\,] + \int_{t_0}^{t_f} \mathcal{L}\,[\,\textbf{x}(t),\textbf{u}(t),t\,] \,\operatorname{d}t
tùy theo các giới hạn động học bậc một (**phương trình trạng thái**)
:  \dot{\textbf{x}}(t) = \textbf{a}\,[\,\textbf{x}(t),\textbf{u}(t),t\,],
các *giới hạn đường *đại số
:  \textbf{b}\,[\,\textbf{x}(t),\textbf{u}(t),t\,] \leq \textbf{0},
và các điều kiện biên
: \boldsymbol{\phi}\,[\,\textbf{x}(t_0),t_0,\textbf{x}(t_f),t_f\,] = 0
trong đó \textbf{x}(t) là trạng thái, \textbf{u}(t) là *điều khiển*, t là biến độc lập (thường được nói là thời gian), t_0 là thời gian ban đầu, và t_f là thời gian cuối. Thuật ngữ \Phi và \mathcal{L} được gọi tương ứng là *chi phí điểm cuối *và *Lagrangian*.Hơn nữa, cần lưu ý rằng những đường hạn chế là nằm trong các hạn chế bất phương trình nói chung và do đó có thể không hoạt động (tức là, bằng không) ở giải pháp tối ưu.Cũng cần lưu ý rằng các bài toán điều khiển tối ưu như đã nêu ở trên có thể có nhiều lời giải (tức là, lời giải có thể không phải là duy nhất).Do đó, trường hợp thường xuyên nhất mà bất kỳ lời nào [\textbf{x}^*(t^*),\textbf{u}^*(t^*),t^*] đối với bài toán điều khiển tối ưu là *tối thiểu hóa cục bộ*.

## Điều khiển tối ưu bình phương tuyến tính
Một trường hợp đặc biệt của bài toán điều khiển tối ưu phi tuyến chung được đưa ra trong phần trước là bài toán điều khiển tối ưu *tuyến tính bậc hai* (LQ). Bài toán LQ được phát biểu như sau. Cực tiểu hóa hàm chi phí thời gian liên tục thời gian *bậc hai*
: J=\tfrac{1}{2} \mathbf{x}^{\top}(t_f)\mathbf{S}_f\mathbf{x}(t_f) + \tfrac{1}{2} \int_{t_0}^{t_f} [\,\mathbf{x}^{\top}(t)\mathbf{Q}(t)\mathbf{x}(t) + \mathbf{u}^{\top}(t)\mathbf{R}(t)\mathbf{u}(t)\,]\, \operatorname{d}t
Chịu sự ràng buộc động *tuyến tính *bậc nhất
: \dot{\mathbf{x}}(t)=\mathbf{A}(t) \mathbf{x}(t) + \mathbf{B}(t) \mathbf{u}(t), 
và điều kiện ban đầu
:  \mathbf{x}(t_0) = \mathbf{x}_0
Một hình thức đặc biệt của bài toán LQ mà phát sinh trong nhiều bài toán thống điều khiển là *bộ điiều chỉnh toàn phương tuyến tính* (LQR), nơi tất cả các ma trận (tức là \mathbf{A}, \mathbf{B}, , \mathbf{Q}, và \mathbf{R}) là *không đổi, *thời gian ban đầu được đặt tùy ý tới zero, và thời gian cuối được lấy từ giới hạn t_f\rightarrow\infty (giả thiét cuối cùng này được gọi là đường *chân trời vô tận*). Bài toán LQR được phát biểu như sau. Tối thiểu hóa hàm chi phí thời gian liên tục bậc hai đường chân trời vô hạn
: J=\tfrac{1}{2} \int_{0}^{\infty}[\,\mathbf{x}^{\top}(t)\mathbf{Q}\mathbf{x}(t) + \mathbf{u}^{\top}(t)\mathbf{R}\mathbf{u}(t)\,]\, \operatorname{d}t
Chịu sự ràng buộc động học bậc nhất tuyến tính bất biến theo thời gian 
: \dot{\mathbf{x}}(t)=\mathbf{A} \mathbf{x}(t) + \mathbf{B} \mathbf{u}(t), 
Và điều kiện ban đầu
:  \mathbf{x}(t_0) = \mathbf{x}_0
Trong trường hợp đường chân trời giới hạn, các ma trận bị giới hạn trong \mathbf{Q} và \mathbf{R} tương ứng là nửa xác định dương và xác định dương. Trong trường hợp đường chân trời vô hạn, tuy nhiên ma trận \mathbf{Q} và \mathbf{R} không chỉ là tương ứng với nửa xác định dương và xác định dương, mà còn là *hằng số*. Những giới hạn thêm vào trên \mathbf{Q} và \mathbf{R} trong trường hợp đường chân trời vô hạn được thực thi để đảm bảo rằng hàm chi phí vẫn dương.Hơn nữa, để đảm bảo hàm chi phí là được bao, hạn chế bổ sung được áp đặt mà cặp (\mathbf{A},\mathbf{B}) là có thể điều khiển được. Lưu ý rằng hàm chi phí LQ hoặc LQR có thể được nghĩ một cách vật lý như là cố gắng để giảm thiểu* năng lượng điều khiển* (đo như một dạng bậc hai).

Bài toán đường chân trời vô hạn (tức là, LQR) có vẻ quá hạn chế và cơ bản vô dụng vì nó cho rằng người vận hành đang điều khiển hệ tới trạng thái zero và do đó đang lái đầu ra của hệ thống về không. Đây thực sự là chính xác. Tuy nhiên bài toán lái đầu ra đến một mức độ khác không mong muốn có thể được giải quyết sau khi một đầu ra zero được giải. Trong thực tế, nó có thể được chứng minh rằng bài toán LQR thứ cấp này có thể được giải quyết một cách rất đơn giản. Nó đã được chỉ ra trong lý thuyết điều khiển tối ưu cổ điển rằng điều khiển tối ưu LQ (hoặc LQR) có dạng phản hồi
: \mathbf{u}(t)=-\mathbf{K}(t)\mathbf{x}(t)
trong đó \mathbf{K}(t) là ma trận có chiều hợp lý, cho bởi
: \mathbf{K}(t)=\mathbf{R}^{-1}\mathbf{B}^{\top}\mathbf{S}(t),
và \mathbf{S}(t)  là lời giải của phương trình vi phân Riccati. Phương trình vi phân Riccati có dạng
: \dot{\mathbf{S}}(t) = -\mathbf{S}(t)\mathbf{A}-\mathbf{A}^{\top}\mathbf{S}(t)+\mathbf{S}(t)\mathbf{B}\mathbf{R}^{-1}\mathbf{B}^{\top}\mathbf{S}(t)-\mathbf{Q}
Đối với bài toán LQ đường chân trời hữu hạn, phương trình Riccati được tích hợp ngược lại trong thời gian sử dụng điều kiện biên cuối
: \mathbf{S}(t_f) = \mathbf{S}_f
Đối với bài toán LQR đường chân trời vô hạn, phương trình vi phân Riccati được thay thế bằng phương trình Riccati đại số (ARE) như sau
: \mathbf{0} = -\mathbf{S}\mathbf{A}-\mathbf{A}^{\top}\mathbf{S}+\mathbf{S}\mathbf{B}\mathbf{R}^{-1}\mathbf{B}^{\top}\mathbf{S}-\mathbf{Q}
Hiểu rằng ARE phát sinh từ bài toán đường chân trời vô hạn, các ma trận \mathbf{A}, \mathbf{B}, \mathbf{Q}, và \mathbf{R} tất cả đều *là hằng số*. Nói chung có nhiều cách giải cho phương trình đại số Riccati và lời giải xác định dương (hoặc nửa xác định dương) là một lời giải trong đó được sử dụng để tính toán độ lợi phản hồi. Bài toán LQ (LQR) đã được giải quyết một cách tao nhã bởi Rudolf Kalman.

## Các phương pháp số cho điều khiển tối ưu
Các bài toán điều khiển tối ưu thường là phi tuyến và do đó, thường không có lời giải phân tích (ví dụ như bài toán điều khiển tối ưu tuyến tính bậc hai). Kết quả là, cần phải áp dụng các phương pháp số để giải các bài toán điều khiển tối ưu. Trong những năm đầu của điều khiển tối ưu (khoảng những năm 1950 tới 1980) hướng tiếp cận ưa thích đối với các bài toán điều khiển tối ưu là các *phương pháp gián tiếp*. Trong một phương pháp gián tiếp, phép tính biến phân được sử dụng để có được các điều kiện tối ưu bậc nhất.  Những điều kiện này đạt được trong một bài toán giá trị-biên hai điểm (hoặc, trong trường hợp của một bài toán phức, đa điểm). Bài toán giá trị-biên này thực sự có một cấu trúc đặc biệt bởi vì nó phát sinh từ việc lấy đạo hàm của một hàm Hamilton. Vì vậy, kết quả là hệ thống động học là một hệ thống Hamilton có dạng
: \begin{array}{lcl} \dot{\textbf{x}} & = & \partial H/\partial\boldsymbol{\lambda} \\ \dot{\boldsymbol{\lambda}} & = & -\partial H/\partial\textbf{x} \end{array}
Trong đó
: H=\mathcal{L}+\boldsymbol{\lambda}^{\text{T}}\textbf{a}-\boldsymbol{\mu}^{\text{T}}\textbf{b}
là *Hamilton tăng cường *và trong một phương pháp gián tiếp, bài toán giá trị-biên sẽ được giải (sử dụng biên thích hợp hoặc các điều kiện *gác ngang*). Vẻ đẹp của việc sử dụng một phương pháp gián tiếp là trạng thái và liên hợp (cụ thể, \boldsymbol{\lambda}) sẽ được giải và lời giải cuối cùng sẽ được kiểm tra để trở thành quỹ đạo cực trị. Nhược điểm của các phương pháp gián tiếp là bài toán giá trị-biên thường rất khó để giải (đặc biệt đối với các bài toán mở rộng trong khoảng thời gian lớn hoặc các bài toán với các giới hạn điểm bên trong). Một chương trình phần mềm nổi tiếng thực hiện các phương pháp gián tiếp đó là BNDSCO.

Cách tiếp cận này đã làm tăng sự nổi bật trong điều khiển tối ưu phương pháp số hơn hai thập kỷ qua (tức là, từ những năm 1980 đến nay) của cái gọi là các *phương pháp trực tiếp*. Trong một phương pháp trực tiếp, trạng thái và/hoặc điều khiển được xấp xỉ bằng cách sử dụng một xấp xỉ hàm thích hợp (ví dụ, xấp xỉ đa thức hoặc thông số hóa hằng số từng mảnh). Đồng thời, chi phí chức năng được xấp xỉ như là một hàm chi phí. Sau đó, các hệ số của các xấp xỉ hàm được xử lý như các biến tối ưu hóa và bài toán này được "sao chép lại" cho một bài toán tối ưu hóa phi tuyến có dạng:

Cực tiểu hóa
:  F(\textbf{z})\,
tùy theo các ràng buộc đại số
:  \begin{array}{lcl} \textbf{g}(\textbf{z}) & = & \textbf{0} \\ \textbf{h}(\textbf{z}) & \leq & \textbf{0} \end{array} 
Tùy thuộc vào loại phương pháp trực tiếp nào được áp. áp dụng, kích thước của bài toán tối ưu hóa phi tuyến có thể khá nhỏ (ví dụ, trong phương pháp xấp xỉ tuyến tính hóa hoặc direct shooting), trung bình (ví dụ điều khiển tối ưu pseudospectral) hoặc có có thể khá lớn (Ví dụ, phương pháp sắp xếp trực tiếp). Trong trường hợp cuối cùng (ví dụ, là một phương pháp sắp xếp), bài toán tối ưu hóa phi tuyến có nghĩa là hàng ngàn đến hàng chục ngàn biến và hạn chế. Do kích thước của nhiều NLP phát sinh từ một phương pháp trực tiếp, có vẻ phần nào khác thường để giải bài toán tối ưu hóa phi tuyến là dễ hơn so với giải bài toán giá trị-biên. Tuy nhiên, thực tế NLP dễ giải hơn bài toán giá trị-biên.Để giảm bớt tính toán, đặc biệt là phương pháp sắp xếp trực tiếp, NLP là rất ít và rất nhiều các chương trình phần mềm nổi tiếng tồn tại (ví dụ, SNOPT) để giải các bài toán NLP lớn. Kết quả là phạm vi của các bài toán có thể được giải quyết thông qua các phương pháp trực tiếp (đặc biệt là các phương pháp sắp xếp trực tiếp là rất phổ biến hiện nay) là lớn hơn đáng kể so với phạm vi của các bài toán có thể được giải bằng các phương pháp gián tiếp. Trong thực tế, các phương pháp trực tiếp đã trở nên quá phổ biến hiện nay đến nỗi nhiều người đã viết các chương trình phần mềm phức tạp sử dụng những phương pháp này. Đặc biệt, rất nhiều các chương trình như vậy bao gồm *DIRCOL*, SOCS, OTIS, GESOP/ASTOS, DITAN. và PyGMO/PyKEP. Những năm gần đây, do sự ra đời của ngôn ngữ lập trình MATLAB, phần mềm điều khiển tối ưu trong MATLAB đã trở nên phổ biến hơn. Ví dụ về phát triển hàn lâm các công cụ cho phần mềm MATLAB đang triển khai thực hiện các phương pháp trực tiếp bao gồm*[http://www.schwartz-home.com/RIOTS/ RIOTS]*,*DIDO*, *DIRECT*, và *[http://gpops.sourceforge.net GPOPS] ,* một ví dụ công cụ công nghiệp được phát triển cho MATLAB là PROPT. Những công cụ phần mềm này đã tăng đáng kể cơ hội cho mọi người khám phá những bài toán điều khiển tối ưu phức tạp cả cho nghiên cứu hàn lâm và cả công nghiệp. Cuối cùng, cần ghi nhận rằng các môi trường tối ưu hóa MATLAB đa năng như TOMLAB đã thực hiện mã hóa bài toán điều khiển tối ưu phức tạp dễ dàng hơn đáng kể so với các ngôn ngữ như C, FORTRAN trước đây.

## Điều khiển tối ưu thời gian rời rạc
Các ví dụ như vậy đến nay đã cho thấy các hệ thống thời gian liên tục và các giải pháp điều khiển. Trong thực tế, như các giải pháp điều khiển tối ưu hiện nay thường được thực hiện bằng kỹ thuật số, lý thuyết điều khiển hiện đại hiện nay chủ yếu là liên quan với các hệ thống và giải pháp thời gian rời rạc. Lý thuyết Xấp xỉ Vững quy định những điều kiện theo các lời giải với tới một loạt bài toán điều khiển tối ưu rời rạc hóa tăng độ chín xác hội tụ về lời giải của bài toán thời gian liên tục, nguyên thủy. Không phải tất cả các. phương pháp rời rạc hóa đều có tính chất này, ngay cả đối với những phương pháp dễ hình dung. Ví dụ, sử dụng một biến làm tròn theo bước để tích hợp các phương trình động học của bài toán đó có thể tạo ra một gradient không hội tụ về zero (hoặc điểm trong hướng dương) như cách giải muốn hướng đến. Phương pháp trực tiếp *[http://www.schwartz-home.com/RIOTS RIOTS]* dựa trên Lý thuyết về Xấp xỉ Bền vững.

## Các ví dụ
Một chiến thuật trong nhiều bài toán điều khiển tối ưu để giải gần đúng (đôi khi được gọi là shadow price) \lambda(t). Tóm tắt trong một số giá trị biên độ của biến trạng thái mở rộng hoặc thu gọn ở lần tiếp theo. Giá trị biên độ này không chỉ là độ lợi tích lũy cho lần kế tiếp mà còn liên quan tới thời gian thực hiện của chương trình. Thật tuyệt khi \lambda(t) có thể được giải bằng giải tích, nhưng thường ta chỉ có thể mô tả nó đủ tốt để trực giác có thể nắm bắt được tính chất của lời giải và một chương trình giải phương trình có thể giải bằng phương pháp số cho các giá trị.

Khi đã đạt được \lambda(t), giá trị tối ưu lần thứ t cho điều khiển có thể thường được giải như là một phương trình vi phân có điều kiện đã biết về \lambda(t). Một lần nữa khá ít khi, đặc biệt trong các bài toán thời gian liên tục, ta thu được giá trị của điều khiển hoặc trạng thái một cách rõ ràng. Thường chiến thuật này là để giải các ngưỡng và vùng mà mô tả điều khiển tối ưu và sử dụng một chương trình giải bằng phương pháp số để cô lập các giá trị được chọn thực tế theo thời gian.

### Thời gian hữu hạn
Xem xét bài toán một chủ mỏ, người phải quyết định phải đãi quặng từ mỏ của mình tại phần trăm nào. Ông ta nắm quyền đối với lượng quặng nói trên từ ngày 0 đến ngày T. Tại ngày 0 có x_0 lượng quặng dưới mặt đất, và lượng quặng tức thời là x(t) suy giảm tỉ lệ chủ mỏ trích xuất nó u(t). Chủ mỏ trích xuất qựng tại chi phí u(t)^2/x(t) và bán quặng tại một giá không đổi p. Ông ta không tính giá trị quặng nằm lại dưới mặt đất tại thời điểm T (không có "giá trị bỏ đi" ở đây). Ông ta chọn tốc độ trích xuất theo thời gian u(t) để tối đa hóa lợi nhuận trong thời kỳ làm chủ với thời gian chiết khấu bằng không.

## Xem thêm

## Tham khảo

## Đọc thêm

## Liên kết ngoài
* Khóa học trực tuyến điều khiển tối ưu
* Dr. Benoît CHACHUAT: Automatic Control Laboratory – Quy hoạch phi tuyến, Phép tính biến phân và Điều khiển Tối ưu.
* DIDO - Công cụ MATLAB dành cho điều khiển tối ưu 
* GESOP – Graphical Environment for Simulation and OPtimization
* GPOPS-II –Phần mềm Đa mục đích MATLAB điều khiển tối ưu
* PROPT – Phần mềm MATLAB điều khiển tối ưu
* Elmer G. Wiens: Optimal Control – Applications of Optimal Control Theory Using the Pontryagin Maximum Principle with interactive models.
* Minh họa nguyên lý Pontryagin của bằng các ví dụ 
* B àn về điều khiển tối ưu bởi Yu-Chi Ho
* Pseudospectral optimal control: Part 1
* Pseudospectral optimal control: Part 2