آموزش کنترل پیشبین مدل (MPC) — راهنمای جامع با مثالهای قابل اجرا در MATLAB
آموزش کنترل پیشبین مدل (MPC) — راهنمای جامع با مثالهای قابل اجرا در MATLAB
کنترل پیشبین مدل (Model Predictive Control — MPC) یکی از قدرتمندترین روشهای کنترلی است که در صنایع فرایند، انرژی، هوافضا و سیستمهای پیچیده امروزی کاربرد وسیع دارد. برخلاف کنترلکنندههای کلاسیک مانند PID، MPC بهطور صریح از یک مدل دینامیکی برای پیشبینی رفتار آینده سیستم استفاده میکند و با حل یک مسئله بهینهسازی کوتاهمدت، سیگنال کنترلی را تعیین مینماید. این رویکرد امکان در نظر گرفتن قیدهای فیزیکی (محدودیتهای ورودی/خروجی) و وزندهی دقیق به تغییرات کنترلی را فراهم میآورد، بنابراین برای سیستمهای چندمتغیره و سیستمهایی که محدودیت و اشباع دارند، عملکردی برتر ارائه میدهد.
در این راهنما شما با مبانی نظری MPC، انواع مرسوم (مثل DMC، GPC، Explicit MPC و NMPC)، نکات مهم مدلسازی و تنظیم پارامترها آشنا میشوید و در دو مثال عملی کدنویسی MATLAB/Simulink را خواهید دید. در انتهای مقاله کدهای کامل قابل دانلود و یک فرم سفارش پروژه قرار دارد تا در صورتی که نیاز به پیادهسازی اختصاصی یا مشاوره دارید، بتوانید بهراحتی با ما در ارتباط باشید.
این مطلب مناسب دانشجویان، محققان و مدیران فنی است که میخواهند یا MPC را یاد بگیرند و یا آن را در قالب یک پروژه واقعی پیادهسازی نمایند.
نیاز به پیادهسازی اختصاصی یا مشاوره برای پروژه MPC دارید؟
تاریخچه و تکامل کنترل پیشبین مدل (Model Predictive Control)
کنترل پیشبین مدل امروزه یکی از مهمترین و پرکاربردترین روشهای کنترل پیشرفته در صنایع فرایند، انرژی، هوافضا، خودرو و سیستمهای چندمتغیره است؛ اما مسیر تکامل آن طی بیش از چهار دهه شکل گرفته است. ریشههای MPC به دهه ۱۹۷۰ بازمیگردد؛ زمانی که صنایع شیمیایی با مسئلهی کنترل فرایندهای بزرگ، کند، چندمتغیره و همراه با محدودیتهای شدید روبهرو بودند. روشهای کلاسیک مانند PID نمیتوانستند محدودیتها، تعاملات بین متغیرها و پاسخ دینامیکی پیچیده را بهطور مؤثر مدیریت کنند. همین مسئله زمینهی تولد کنترلهای پیشبین را فراهم کرد.
۱. نسل اول: Dynamic Matrix Control (DMC) — دهه 1970
شرکت Shell نخستین پیادهسازی صنعتی کنترل پیشبین را با روش DMC معرفی کرد. در این رویکرد، از مدل پاسخ پله برای پیشبینی رفتار آینده سیستم استفاده میشد و یک مسأله کمینهسازی مربعات وزندار، سیگنال کنترلی را تعیین میکرد. سادگی مدل و امکان اعمال مستقیم محدودیتها باعث شد DMC به سرعت در پالایشگاهها و صنایع شیمیایی فراگیر شود.
۲. نسل دوم: Generalized Predictive Control (GPC) — دهه 1980
در دهه ۱۹۸۰، الگوریتم GPC توسط Clarke و همکاران معرفی شد. برخلاف DMC که بر مدل تجربی تکیه داشت، GPC از مدلهای خطی ARX/ARIMAX بهره میبرد. این الگوریتم بهدلیل فرم بسته و تحلیلپذیر، راه را برای استفاده دانشگاهی و توسعه نظری MPC هموار کرد. بسیاری از ساختارهای MPC امروزی هنوز بر پایه مفاهیم GPC توسعه یافتهاند.
۳. رشد تئوری MPC — دهههای 1990 و 2000
با گسترش قدرت محاسباتی، مسائل مهمی مانند تحلیل پایداری، تضمین قیود سخت/نرم، استفاده از مدلهای حالت، و طراحی تابع هزینهی بهینه مورد توجه قرار گرفت. نتایج مهمی مانند مفهوم «افق لغزان» (Receding Horizon) و استفاده از تابع لیاپانوف برای تضمین پایداری، پایههای تئوری MPC مدرن را شکل داد.
۴. ظهور Explicit MPC — دهه 2000
یکی از چالشهای MPC همواره «حل مسئله بهینهسازی در هر نمونهبرداری» بود. روش MPC صریح (Explicit MPC) این چالش را برطرف کرد: با پیشمحاسبه تمامی نواحی کنترل و نگهداری آنها در قالب یک نقشه Piecewise-Affine، کنترلکننده میتواند در زمان واقعی بدون حل بهینهسازی اجرا شود. این روش سالها در صنعت خودرو و سیستمهای تعبیهشده (Embedded Systems) رایج بود.
۵. عصر جدید: Nonlinear MPC (NMPC) و MPC با یادگیری ماشین
امروزه بسیاری از سیستمهای واقعی ماهیت غیرخطی دارند، بنابراین روشهای NMPC با مدلهای حالت غیرخطی، حلگرهای بهینهسازی پیشرفته و منابع محاسباتی سریع بهکار گرفته میشوند. همچنین با ظهور یادگیری ماشین، توسعه مدلهای شناساییشده (Data-Driven MPC)، MPC عصبی (Neural MPC) و MPC مبتنی بر مدلهای یادگیری تقویتی (RL-MPC) روند روبهرشد دارد.
جمعبندی تاریخی:
MPC از یک کنترلکنندهی ساده مبتنی بر پاسخ پله در دهه ۱۹۷۰، به یک چارچوب پیشرفته با مدلهای خطی، غیرخطی، صریح، دادهمحور و مبتنی بر یادگیری ماشین تبدیل شده است. این تکامل، دلیل اصلی استفاده گسترده آن در صنایع و همچنین محبوبیت آن در پروژههای دانشگاهی است.
سایت متلبی با مجریان فرهیخته در زمینه انجام پروژه کنترل پیش بین با نرم افزار متلب فعالیت می کند.
بخش سوم — مفاهیم بنیادی در کنترل پیشبین مدل (MPC)
۳. مفاهیم بنیادی در MPC
کنترل پیشبین مدل بر پایه مجموعهای از مفاهیم کلیدی بنا شده است که درک دقیق آنها برای طراحی یک کنترلکننده پایدار و کارآمد ضروری است. این مفاهیم عبارتاند از: افق پیشبینی، افق کنترل، مدل پیشبینیکننده، تابع هزینه، وزندهیها، محدودیتها و استراتژی افق لغزان. در ادامه هریک را با جزئیات بررسی میکنیم.
۳.۱ افق پیشبینی (Prediction Horizon, (N_p))
افق پیشبینی تعداد گامهایی است که کنترلکننده رفتار آینده سیستم را پیشبینی میکند. هرچه (N_p) بزرگتر باشد، کنترلکننده آیندهنگرتر است و قادر است رفتار بلندمدت سیستم را بهتر مدیریت کند.
نکات طراحی:
- (N_p) باید به اندازه کافی بزرگ باشد تا اثر دینامیک سیستم مستهلک شود.
- برای سیستمهای سریع، (N_p) کوچکتر انتخاب میشود.
- افزایش بیش از حد (N_p) محاسبات QP را سنگین میکند بدون اینکه بهبود قابلتوجهی ایجاد کند.
۳.۲ افق کنترل (Control Horizon, (N_c))
افق کنترل تعداد گامهایی است که متغیرهای ورودی آزاد هستند و بهعنوان متغیر بهینهسازی در QP شرکت میکنند؛ پس از آن ورودی ثابت یا مطابق یک قانون از پیش تعیینشده فرض میشود. پس از (N_c)، ورودی ثابت فرض میشود.
رابطه مهم:
معمولاً (N_c < N_p)
دلایل:
- سادهسازی مسئله
- جلوگیری از تغییرات کنترل بیش از حد
- کاهش بار محاسباتی
۳.۳ مدل پیشبینیکننده (Predictive Model)
قلب MPC مدل سیستم است. دقت مدل = کیفیت پیشبینی = کیفیت کنترل.
سه نوع مدل رایج برای MPC:
الف) مدل فضای حالت (State-Space)
بهصورت خطیشده یا کامل استفاده میشود:
x(k+1) = Ax(k) + Bu(k)
y(k) = Cx(k) + Du(k)
مزایا: مناسب برای سیستمهای چندمتغیره، طراحی دقیق، امکان استفاده در NMPC.
ب) مدلهای ARX / ARMAX
برای سیستمهای دادهمحور و شناساییشده مناسباند.
مزایا:
ساده، سریع، ایدهآل برای MPC مرتبه بالا با داده کافی.
ج) مدل پاسخ پله (Step Response Model یا DMC)
در صنعت بسیار رایج است.
بدون نیاز به شناسایی پیچیده.
۳.۴ تابع هزینه (Cost Function)
در MPC هدف یافتن دنباله ورودیای است که تابع هزینه را کمینه کند:

اجزای تابع هزینه:
- عبارت اول: کمینه کردن خطای دنبالسازی
- عبارت دوم: جلوگیری از تغییرات سریع کنترل
۳.۵ وزندهیها (Q و R)
- (Q): اهمیت دنبالسازی خروجی
- (R): اهمیت جلوگیری از تغییرات شدید کنترل
- تنظیم مناسب این وزنها مستقیماً بر رفتار سیستم (نرم یا تهاجمی) اثر میگذارد.
نکته حرفهای:
در پروژههای صنعتی، اولین تنظیمات Q و R به ندرت جواب بهینه میدهد؛ معمولاً چندین تنظیم تجربی لازم است.
۳.۶ محدودیتها (Constraints)
یکی از مهمترین مزایای MPC امکان اعمال محدودیتهای ورودی / خروجی است.
انواع محدودیتها:
- قیود سخت (Hard Constraints): نباید نقض شوند
- قیود نرم (Soft Constraints): امکان نقض با هزینه در تابع هزینه
نمونه قیود:
- محدودیت اشباع کنترل:
umin≤u(k)≤umax - محدودیت نرخ تغییر کنترل
- محدودیت خروجی (مثلاً دما نباید از مقدار مشخصی بالاتر برود)
۳.۷ استراتژی افق لغزان (Receding Horizon Strategy)
هسته عملیاتی MPC به این صورت است:
- پیشبینی خروجی در افق (N_p)
- محاسبه ورودی بهینه در افق (N_c)
- اعمال فقط اولین مقدار ورودی
- بهروزرسانی مدل با وضعیت جدید
- تکرار کل فرآیند در لحظه بعدی
مزیت:
کنترلکننده همواره با آخرین وضعیت سیستم تصمیم میگیرد.
چند تا پروژه کنترل پیش بین ببینیم و دانلود کنیم:
- یک استراتژی تطبیقی چند مدل کاربردی برای کنترل پیش بین تک حلقه
- مدل کنترل پیش بین مبدل تقویت کننده DC/DC با یادگیری تقویتی
- کنترل پیش بین مدل مبتنی بر استراتژی تضعیف میدان برای کشش خودرو الکتریکی مورد استفاده موتور القایی
نمودار مفهومی
+-------------------------------+
| Reference (r) |
+-------------------------------+
|
v
+------------------+
| Predictive Model|
+------------------+
|
+----------------------------------------+
| Prediction over Np steps |
+----------------------------------------+
|
v
+--------------------+
| Optimization (QP) |
| Minimizing J(Q,R) |
+--------------------+
|
+----------------------------------------+
| Control sequence (u1, u2, ..., uNc) |
+----------------------------------------+
|
v
Apply u1 only
|
v
+------------------+
| Real System |
+------------------+
|
v
New State
|
v
Repeat (Receding Horizon)
اگر نیاز به انجام پروژه متلب دارین, متلبی با سالها تجربه در کنار شماست تا بدون دغدغه و به صورت حرفه ای و با کیفیت سفارش شما را انجام دهد.
4. مدلسازی موردنیاز برای پیادهسازی کنترل پیشبین مدل (MPC)
طراحی کنترل پیشبین مدل به یک مدل دینامیکی دقیق از سیستم وابسته است. انتخاب نوع مدل، میزان دقت کنترل، سرعت شبیهسازی و توانایی پیشبینی رفتار آینده سیستم را بهطور مستقیم تحت تأثیر قرار میدهد. در این بخش، رایجترین مدلهایی که در پیادهسازی MPC مورد استفاده قرار میگیرند را بررسی میکنیم.
4.1 مدل فضای حالت (State-Space Model)
مدل فضای حالت رایجترین ساختار مورد استفاده در الگوریتمهای MPC است، زیرا:
- امکان نمایش رفتار دینامیکی سیستم در حالتهای مختلف را فراهم میکند.
- مستقیماً در فرمولبندی مسائل بهینهسازی MPC به کار میرود.
- برای سیستمهای SISO و MIMO قابل استفاده است.
- در متلب، Toolbox کنترل پیشبین بهصورت پیشفرض با مدل فضای حالت کار میکند.
فرم کلی مدل فضای حالت:
از چپ به راست:

از راست به چپ:

بهدلیل ساختار ماتریسی و امکان توصیف دینامیک MIMO، مدل فضای حالت رایجترین و قابلاتکاترین گزینه برای MPC است.
4.2 مدل انتقال تابعی (Transfer Function Model)
مدل تابع انتقال بیشتر برای تحلیل سیستمها رایج است اما در طراحی MPC نیز کاربرد دارد، بهویژه زمانی که:
- مدل سیستم در حوزه لاپلاس در دسترس باشد.
- بخواهیم سیستمهای خطی SISO را سریعاً مدلسازی و شبیهسازی کنیم.
- مدل سادهای برای تبدیل به فضای حالت لازم باشد.
برای استفاده در MPC معمولاً ابتدا مدل تابع انتقال به فرم فضای حالت تبدیل میشود:
مثال کلی:
متلب بهسادگی آن را به مدل فضای حالت تبدیل میکند:
sys = tf([b0 b1],[1 a1 a2]);
sys_ss = ss(sys);
4.3 مدلهای دادهمحور ARX / ARMAX / OE / BJ
در بسیاری از پروژههای کنترل پیشبین، مدل فیزیکی سیستم موجود نیست. در این حالت، مدلسازی مبتنی بر داده انتخاب میشود. پرکاربردترین ساختارها:
ARX
مدل ساده، سریع و کاربردی در شناسایی سیستم.
ARMAX
دقیقتر از ARX، مناسب برای سیستمهایی با نویز قابل توجه.
OE (Output Error)
مناسب سیستمهایی با دینامیک غالب و نویز کم.
BJ (Box-Jenkins)
عمومیترین و دقیقترین ساختار مدلهای دادهمحور.
این مدلها با دستورهای زیر در متلب شناسایی میشوند:
model = arx(data,[na nb nk]);
model = armax(data,[na nb nc nk]);
model = oe(data,[nb nf nk]);
model = bj(data,[nb nc nd nf nk]);
4.4 تفاوت SISO و MIMO در مدلسازی MPC
کنترل SISO
- سادهتر
- ماتریسها ابعاد کوچکتری دارند
- طراحی محدودیتها و پیشبینیها آسانتر است
- برای کاربردهای صنعتی کوچک و متوسط مناسب است
کنترل MIMO
- مناسب سیستمهای چندمتغیره و با تعامل داخلی
- نیازمند مدل فضای حالت دقیقتر است
- طراحی قیدها پیچیدهتر است
- در پروژههای صنعتی (شیمی، نفت، رباتیک) بسیار رایج است
MPC ذاتاً برای سیستمهای MIMO طراحی شده و مزیت آن نسبت به کنترلرهای کلاسیک، کنترل همزمان چند ورودی و خروجی با وجود محدودیتها است.
4.5 نکات کلیدی در انتخاب مدل برای شبیهسازی MPC در متلب
برای داشتن عملکرد پایدار و دقیق، رعایت نکات زیر ضروری است:
1) خطی یا غیرخطی بودن
- اگر سیستم خطی باشد: مدل فضای حالت یا تابع انتقال کافی است.
- اگر سیستم غیرخطی یا پیچیده باشد: از Nonlinear MPC یا شناسایی سیستمی پیشرفته استفاده کنید.
2) گسستهسازی مدل
MPC با مدل گسسته کار میکند، بنابراین باید:
sys_d = c2d(sys, Ts);
3) دقت مدل روی افق پیشبینی
مدل باید بهویژه در ناحیه کاری و در بازه زمانی هممرتبه با افق پیشبینی، رفتار دینامیکی سیستم واقعی را با دقت مناسب بازتولید کند.
4) پایداری مدل
مدلی با قطبهای ناپایدار یا معیوب، عملکرد MPC را بهشدت خراب میکند.
5) سرعت شبیهسازی
مدلهای با ابعاد بالا (High-order) باعث کند شدن حلگر میشوند.
بهتر است مدل مینیمالریالیزیشن باشد:
sys_min = minreal(sys);
6) نوع کاربرد شما
- سیستمهای رباتیک → مدل فضای حالت MIMO
- فرآیندهای صنعتی → مدل دادهمحور ARMAX یا BJ
- پروژههای آموزشی → ARX یا TF ساده
چند تا پروژه کنترل پیش بین ببینیم و دانلود کنیم:
- مدل کنترل پیش بین برای ربات سایز کوچک همه جهته با محدودیت موتور و عدم لغزش
- کنترل امنیتی مبتنی بر رویداد پویا برای سامانههای کنترل شبکهای تحت حملات سایبری: رویکردی بر پایه کنترل پیشبین مدلمبنا
- کنترل پیشبینی مدل حداقل حداکثری خود راهانداز مقاوم برای سیستمهای غیرخطی زمان گسسته
4.6 مثال عملی MATLAB برای مدلسازی و استفاده در کنترل پیشبین مدل (MPC)
در این مثال یک سیستم ناشناخته را با دادههای ورودی–خروجی شناسایی میکنیم، مدل آن را به فرم فضای حالت تبدیل میکنیم و آن را برای طراحی کنترلر MPC به کار میبریم. این روند عیناً مشابه فرآیندی است که در پروژههای صنعتی و دانشگاهی استفاده میشود.
%% 1) مدل ناشناخته واقعی (فقط برای تولید داده)
G = tf([0.5 1], [1 1.2 1]);
%% 2) تولید داده ورودی–خروجی
Ts = 0.1;
t = 0:Ts:50;
u = idinput(length(t),'PRBS'); % ورودی شبهتصادفی
y = lsim(G, u, t); % خروجی سیستم واقعی
data = iddata(y, u, Ts);
figure
plot(data)
title('داده ورودی–خروجی تولید شده برای شناسایی')
grid on
%% 3) شناسایی مدل ARX
na = 2; nb = 2; nk = 1;
model_arx = arx(data, [na nb nk]);
model_arx
%% 4) تبدیل به فضای حالت
sys_ss = ss(model_arx);
sys_ss = minreal(sys_ss); % حذف حالتهای قابل حذف (اختیاری)
% مدل ARX گسسته است → نیازی به c2d نیست
sys_d = sys_ss;
%% 5) ساخت کنترلر MPC
mpcobj = mpc(sys_d);
mpcobj.PredictionHorizon = 20;
mpcobj.ControlHorizon = 5;
mpcobj.Weights.OutputVariables = 1;
mpcobj.Weights.ManipulatedVariablesRate = 0.1;
%% 6) اعمال محدودیتها
mpcobj.MV.Min = -1;
mpcobj.MV.Max = 1;
mpcobj.OV.Min = -2;
mpcobj.OV.Max = 2;
%% 7) شبیهسازی کنترلر MPC
simTime = 200;
r = ones(simTime,1);
[Y, T, U] = sim(mpcobj, simTime, r);
%% 8) نمایش پاسخ
figure
plot(T, Y)
title('پاسخ سیستم ناشناخته تحت کنترل MPC')
xlabel('زمان (ثانیه)')
ylabel('خروجی سیستم')
grid on
خروجی سیستم با کنترل پیش بین:
توضیح خط به خط و بلوکبهبلوک
بلوک ۱ — تعریف «پلانت» واقعی برای تولید داده
G = tf([0.5 1], [1 1.2 1]);
tf(num, den)یک مدل تابعِانتقال (transfer function) میسازد.- در اینجا پلانت فرضی (G(s)=\frac{0.5 s + 1}{s^2 + 1.2 s + 1}) تعریف شده تا دادهٔ شناسایی قابل تولید شود.
- هدف: داشتن «سیستم واقعنما» برای تولید دادههای ورودی–خروجی بدون نیاز به دستگاه واقعی.
بلوک ۲ — تنظیم زمان نمونه و بردار زمان
Ts = 0.1;
t = 0:Ts:50;
Tsزمان نمونه (در ثانیه) است؛ برای MPC دیجیتال لازم است مدل بهصورت گسسته باشد یا با نمونهبرداری مناسب کار شود.tبردار زمان از 0 تا 50 ثانیه با گامTsاست؛ طول داده برابرlength(t)خواهد شد.
بلوک ۳ — تولید ورودی شناسایی و شبیهسازی خروجی
u = idinput(length(t),'PRBS'); % ورودی شبهتصادفی
y = lsim(G, u, t); % خروجی سیستم واقعی
idinput(N,'PRBS')یک سیگنال شبهتصادفی باینری (Pseudo Random Binary Sequence) به طولNتولید میکند؛ مناسب برای شناسایی زیرا انرژی در بسامدهای متعدد دارد.lsim(G,u,t)پاسخ پیوستهٔ زمان به ورودیuرا برای سیستمGبرمیگرداند؛yخروجیِ شبیهسازیشده است.- نکته عملی: برای دادهگیرهای صنعتی ممکن است لازم باشد سطح و دامنهی
uرا تنظیم کنید تا در بازهٔ کاری واقعی عملگر قرار گیرد.
بلوک ۴ — ساخت دادهٔ شناسایی (iddata) و نمایش نمودار
data = iddata(y, u, Ts);
figure
plot(data)
title('داده ورودی–خروجی تولید شده برای شناسایی')
grid on
iddata(y,u,Ts)یک شیء دادهٔ شناسایی میسازد که توابع جعبهابزار شناسایی متلب (System Identification Toolbox) از آن استفاده میکنند.- نمایش
plot(data)خروجی و ورودی را در یک شکل نشان میدهد؛ این قدم مهم برای بررسی کیفیت داده (سر و صدا، سیر زمانی، نوسان) است.
بلوک ۵ — شناسایی مدل ARX
na = 2; nb = 2; nk = 1;
model_arx = arx(data, [na nb nk]);
model_arx
- پارامترها:
na= مرتبهی چندجملهایِ مخرج (تعداد ضرایب A)nb= مرتبهی چندجملهایِ صورت (تعداد ضرایب B)nk= تاخیرِ خاندان (input delay) به صورت نمونهای
arx(data,[na nb nk])مدل ARX را براساس داده تخمین میزند. ARX انتخاب خوب و سریع برای شروع است.- دستور
model_arxدر خط بعدی ساختار و پارامترهای مدل تخمینزده را چاپ میکند (نمایش مختصر مدل).
بلوک ۶ — تبدیل مدل ARX به فضای حالت و مینیمالریالیزیشن
sys_ss = ss(model_arx);
sys_ss = minreal(sys_ss); % حذف حالتهای قابل حذف (اختیاری)
% مدل ARX گسسته است → نیازی به c2d نیست
sys_d = sys_ss;
ss(model_arx)مدل شناساییشده ARX را به فرم فضای حالت تبدیل میکند؛ فرم فضای حالت برای کنترل عددی و MPC مناسب است.minreal(sys_ss)حالتهای حذفی/تکراری را حذف میکند تا مدل سادهتری بهدست آید و حلگر سریعتر کار کند.- نکتهٔ کلیدی: مدلهای شناساییشده با
arxمعمولاً گسسته هستند (دارای زمان نمونه مساویTs)؛ لذا فراخوانیc2dمجدد خطا میدهد — به همین دلیلsys_d = sys_ssکافی است.
بلوک ۷ — ایجاد شئ MPC و تنظیم افقها و وزنها
mpcobj = mpc(sys_d);
mpcobj.PredictionHorizon = 20;
mpcobj.ControlHorizon = 5;
mpcobj.Weights.OutputVariables = 1;
mpcobj.Weights.ManipulatedVariablesRate = 0.1;
mpc(sys_d)یک شیء کنترلکننده MPC میسازد که از مدل گسستهsys_dاستفاده میکند (نیاز به Control System Toolbox و Model Predictive Control Toolbox).PredictionHorizon(N_p) تعیین میکند MPC تا چند گام آینده را پیشبینی کند. مقدار 20 معقول برای مثال آموزشی است؛ در عمل بستگی به زمانهای مرده و دینامیک سیستم دارد.ControlHorizon(N_c) تعداد گامهایی است که ورودیها در آن بهینه میشوند؛ معمولاً کمتر ازN_pانتخاب میشود.Weights.OutputVariablesوWeights.ManipulatedVariablesRateوزنهای تابع هزینه را مشخص میکنند (Q و R). وزن خروجی برابر 1 و وزن جریمه تغییر ورودی 0.1 انتخاب شده — این تنظیم باعث تعادل بین دنبالسازی مرجع و کاهش حرکت عملگر میشود.
بلوک ۸ — تعیین محدودیتهای ورودی و خروجی
mpcobj.MV.Min = -1;
mpcobj.MV.Max = 1;
mpcobj.OV.Min = -2;
mpcobj.OV.Max = 2;
MVمخفف Manipulated Variable (ورودی کنترل) وOVمخفف Output Variable (خروجی) است.- با
MV.Min/Maxمحدودهٔ مجاز عملگر را تعیین میکنیم؛ این یک مزیت کلیدی MPC است—قابلیت اعمال قیدها بهصورت صریح. در این مثال ورودی بین −1 و +1 محدود شده است. OV.Min/Maxقید خروجی را مشخص میکند؛ در مثال مقدار خروجی محدود شده بین −2 و +2 است.- نکتهٔ عملی: اگر بخواهید قیدها نرم (soft) باشند، باید در تابع هزینه جریمه اضافه کنید یا از گزینههای toolbox برای قیدهای کشسان استفاده کنید.
بلوک ۹ — شبیهسازی کنترلکننده MPC برای دنبالسازی مرجع
simTime = 200;
r = ones(simTime,1);
[Y, T, U] = sim(mpcobj, simTime, r);
simTimeتعداد گامهای شبیهسازی است (نمونهها). باTs=0.1وsimTime=200، زمان واقعی شبیهسازی 20 ثانیه خواهد بود.r = ones(simTime,1)بردار مرجع (reference)؛ در اینجا مرجع ثابت 1 انتخاب شده تا رفتار دنبالسازی بررسی شود.- فرم تابع
simبرای شیء MPC:[Y,T,U] = sim(mpcobj, N, r)که خروجیها (Y)، محور زمان (T) و سیگنال کنترل (U) را بازمیگرداند. این قالب با نسخههای مختلف MATLAB سازگار است.
بلوک ۱۰ — رسم و آنالیز نتایج
figure
plot(T, Y)
title('پاسخ سیستم ناشناخته تحت کنترل MPC')
xlabel('زمان (ثانیه)')
ylabel('خروجی سیستم')
grid on
plot(T,Y)خروجی سیستم را برحسب زمان رسم میکند. اگر سیستم چندخروجی باشد،Yماتریسی است و متلب هر ستون را بهصورت جداگانه رسم میکند.- برچسبگذاری محورها و عنوان برای گزارش و انتشار در وب مهم است؛ نمودارها را میتوانید با
legend،subplotیا ذخیرهٔ تصویر باprintزیباتر کنید.
چند تا پروژه کنترل پیش بین ببینیم و دانلود کنیم:
- استفاده از کنترل پیشبین مدل محدود برای کنترل دو کوادروتور که یک محموله معلق با کابل را حمل میکنند
- کنترل پیشبین مدل مبتنی بر رویداد مقاوم برای سیستمهای فیزیکی سایبری تحت حملهٔ Dos
- ردیابی نقطه بیشینه توان ( MPPT ) در سیستمهای فتوولتائیک با استفاده از کنترلر پیش بین ( MPC )
نکات عملی و خطایابی (چه چیزهایی ممکن است پیش بیاید)
- اگر خطای
The "c2d" command cannot be used for discrete modelsدریافت کردید یعنی مدل شناساییشده از ابتدا گسسته است — پسc2dلازم نیست. - اگر
simخطا داد که تعداد آرگومانها اشتباه است، فرمت[Y,T,U] = sim(mpcobj, simTime, r)را امتحان کنید (نسخههای قدیمی ممکن است تفاوت داشته باشند). - برای دادههای واقعی، پیشپردازش (فیلتر کردن نویز، حذف روند، نرمالسازی) قبل از شناسایی معمولاً ضروری است.
- اگر سیستم دارای نویز زیاد است، از
armaxیاbjاستفاده کنید (دقت مدل بالاتر میرود). - برای پروژههای صنعتی، پارامترهای
PredictionHorizonوWeightsرا با شبیهسازی حساسیتسنجی (sensitivity analysis) پیدا کنید.
خروجی این مثال چه چیزی را نشان میدهد؟
با اجرای این مثال، نتایج زیر را داریم:

دادههای ورودی–خروجی سیستم برای شناسایی

پاسخ پله سیستم با کنترلکننده MPC
- MPC حتی روی سیستمهای ناشناخته (بدون مدل فیزیکی) عملکرد بسیار خوبی دارد.
- کنترلر میتواند قیدهای ورودی و خروجی را رعایت کند.
- پاسخ سیستم صاف، پایدار و بدون نوسان اضافه خواهد بود.
- فرایند طراحی بسیار سادهتر از کنترلرهای کلاسیک (PID) است.
بخش ۵: انتخاب و تنظیم افقهای MPC (Prediction & Control Horizons)
در کنترل MPC، دو پارامتر کلیدی نقش تعیینکنندهای در پایداری، کیفیت دنبالسازی و محاسبات دارند:
- Prediction Horizon — افق پیشبینی (Np)
- Control Horizon — افق کنترل (Nc)
۵.۱ مفهوم افق پیشبینی (Prediction Horizon)
افق پیشبینی (Np) تعداد گامهایی است که کنترلر MPC رفتار آینده سیستم را پیشبینی میکند.
- هر چه Np بزرگتر → پیشبینی دقیقتر از مسیر آینده
- اما:
- افزایش Np → افزایش سنگینی محاسبات
- افزایش Np بیش از حد → اثرگذار نبودن پیشبینیهای دورتر
توصیه عملی (برای پروژههای واقعی و متلب):
- برای سیستمهای کند:
Np = 20 تا 40 - برای سیستمهای میانسرعت:
Np = 10 تا 20 - برای سیستمهای خیلی سریع:
Np = 5 تا 10
۵.۲ مفهوم افق کنترل (Control Horizon)
افق کنترل (Nc) تعداد گامهایی است که کنترلر اجازه دارد ورودی کنترل را تغییر دهد.
- معمولاً Nc خیلی کوچکتر از Np انتخاب میشود.
- بعد از Nc، تغییرات ورودی ثابت فرض میشوند.
مزایا:
- کاهش محاسبات بهطور چشمگیر
- جلوگیری از رفتارهای نامنظم یا پرنوسان ورودی
توصیه عملی:
Nc بین 2 تا 5 برای اغلب سیستمها کافی است.
۵.۳ انتخاب Np و Nc در MATLAB
در متلب این دو مقدار بهصورت زیر تنظیم میشوند:
mpcobj.PredictionHorizon = 20;
mpcobj.ControlHorizon = 5;
نکته حرفهای:
اگر مقدار Prediction Horizon خیلی کم یا خیلی زیاد انتخاب شود:
- کم → کنترلر رفتار آینده را خوب پیشبینی نمیکند → Overshoot
- زیاد → محاسبات سنگین و زمان اجرای زیاد → مناسب برای شبیهسازی است اما نه پیادهسازی واقعی
این موضوع برای پروژههای صنعتی بسیار مهم است و دلیل میشود چرا MPC در صنعت نیاز به مودل دقیق دارد.
۵.۴ نسبت مناسب بین Np و Nc
بهتر است از یک نسبت مشخص استفاده کنیم:
Np ≈ 4 تا 10 برابر Nc
مثالهایی از انتخاب اصولی:
| سیستم | Np | Nc |
|---|---|---|
| کوره صنعتی با پاسخ کند | 40 | 5 |
| سیستم مکانیکی میانسرعت | 20 | 4 |
| کنترل دما یا فشار | 15 | 3 |
| کنترل سروو موتور سریع | 8 | 2 |
۵.۵ اثر Np و Nc بر پایداری و عملکرد
| پارامتر | مقدار زیاد | مقدار کم |
|---|---|---|
| Np | پیشبینی بهتر، محاسبات سنگین | رفتار غیر دقیق، Overshoot |
| Nc | کنترل نرمتر، محاسبات سنگین | ورودی پرنوسان، رفتار نامنظم |
۵.۶ اثر افقها بر بهینهسازی (QP Problem)
کنترل پیشبین مدل در هر لحظه یک مسئله QP حل میکند:
minimize (J)
subject to Ax ≤ b
و اندازه این QP مستقیماً به Np و Nc وابسته است:
- اندازه ماتریسها برای Np=40 و Nc=5 چند برابر بزرگتر از Np=10 و Nc=2 است.
- زمان اجرا برای پردازندههای واقعی (PLC, DCS, microcontroller) حساس است.
۵.۷ نکات تخصصی انتخاب افقها (Advanced MPC Tuning Rules)
انتخاب افقها در MPC یک موضوع ساده نیست و به رفتار دینامیکی سیستم، اهداف کنترلی و حتی محدودیتهای محاسباتی بستگی دارد. در این زیربخش قوانین پیشرفته و مبتنی بر تجربه صنعتی ارائه میشود.
۵.۷.۱ انتخاب افق پیشبینی بر اساس زمان سکون (Settling Time Rule)
یکی از معتبرترین قوانین در صنایع فرایندی:
Np ≈ (2 تا 4) × (Ts / زمان پاسخ سیستم)
یا به شکل دقیقتر:
Np ≈ (Ts × 4) / Tsettling
مثال:
اگر سیستم 4 ثانیه طول بکشد تا در ۲ درصد نهایی آرام شود (Settling Time = 4s)
و زمان نمونهبرداری Ts = 0.1 باشد:
Np = (0.1 × 4) / 4 = 40
نتیجه:
Np = 40 مقدار بسیار مناسب برای سیستمهای کند است.
۵.۷.۲ انتخاب Np بر اساس Pole Dominant سیستم
اگر سیستم مدل فضای حالت یا انتقال تابعی دارد، میتوان از قطب غالب استفاده کرد:
Np ≈ 1 / (1 - |p_dominant|)
مثال:
اگر قطب غالب سیستم:
p = 0.92
باشد:
Np ≈ 1 / (1 - 0.92) = 12.5 → 12 یا 15 انتخاب میکنیم
این روش برای سیستمهای کنترل حرکت (Motion Control) فوقالعاده دقیق است.
۵.۷.۳ قانون تجربی صنعتی (Honeywell / AspenTech Rule)
شرکتهای Honeywell و AspenTech در DCS/PLC میگویند:
Prediction Horizon = 10 تا 20
Control Horizon = 2 تا 4
حتی اگر سیستم کند باشد.
هدف این قانون کاهش بار پردازش در CPUهای صنعتی است.
۵.۷.۴ انتخاب Nc بر اساس نرخ تغییر ورودی سیستم
قانون کلاسیک:
Nc ≈ (10% تا 25%) Np
به عنوان مثال:
| Np | Nc مناسب |
|---|---|
| 40 | 4 – 10 |
| 20 | 2 – 5 |
| 10 | 1 – 3 |
هر چه ورودی سیستم حساستر باشد، Nc باید کوچکتر انتخاب شود.
مثلاً ولوهای صنعتی یا کنترل حرارتی معمولاً Nc کوچک میگیرند.
۵.۷.۵ روش مبتنی بر پاسخ پله (Step Response Coverage)
برای سیستمهای SISO رایجترین قانون این است:
Np باید آنقدر بزرگ باشد که ۹۰٪ پاسخ پله در داخل آن قرار گیرد.
مثلاً اگر 90% پاسخ پله سیستم در 5 ثانیه اول رخ میدهد:
Np = 5 / Ts
اگر Ts= 0.1 باشد:
Np = 50
این روش پایه در تمام MPCهای مبتنی بر مدل دینامیکی است.
۵.۷.۶ روش اقتصادی (Economic MPC Tuning)
برای MPCهای صنعتی که هدف کمینهسازی مصرف انرژی، کاهش هزینه سوخت یا بهینهسازی اقتصادی است:
- Np باید بزرگ انتخاب شود: پیشبینی بلندمدت موردنیاز است.
- Nc باید کوچک باشد: برای جلوگیری از تغییرات زیاد در اکچویتورها.
قانون:
Np = 5 تا 10 برابر زمان پاسخ اقتصادی (Economic Time Constant)
Nc = 2 تا 4
مثال واقعی در فرآیندهای نفت و گاز:
Np = 80
Nc = 3
۵.۷.۷ محدودیت زمان پردازش (Real-Time CPU Constraint)
اگر کنترلر روی سختافزار واقعی اجرا میشود (مثلاً PLC, ARM, DSP):
- زمان محاسبه QP باید کمتر از Ts باشد.
- بنابراین یک قانون بسیار مهم صنعتی:
اگر CPU ضعیف باشد → Np و Nc را تا حد ممکن کم کنید.
قانون سختافزاری:
Np × Nc ≤ 200 (برای PLCهای استاندارد)
Np × Nc ≤ 80 (برای microcontroller)
این قانون در بسیاری از پروژههای صنعتی رعایت میشود.
۵.۷.۸ MPC در سیستمهای ناپایدار
در سیستمهایی که یک یا چند قطب در سمت راست صفحه s یا روی مرز پایداری قرار دارند، باید:
- Np خیلی بزرگ باشد
- Nc بسیار کوچک باشد
چون:
- Np بزرگ → خطا و اغتشاش آینده بهتر دیده میشود
- Nc کوچک → جلوگیری از اعمال ورودی تهاجمی یا انفجاری
قانون پیشنهادی:
Np = 30 – 50
Nc = 2 یا 3
۵.۷.۹ جدول خلاصه انتخاب افقها
| نوع سیستم | Np | Nc | توضیح |
|---|---|---|---|
| سیستم کند | 30–60 | 3–6 | فرایندی، شیمیایی، حرارتی |
| سیستم میانسرعت | 15–30 | 2–5 | رباتیک، مکانیک، سروو |
| سیستم سریع | 5–15 | 1–3 | رباتهای دقیق، Motion Control |
| سیستم ناپایدار | 30–50 | 2–3 | نیاز به پیشبینی بلندمدت |
| MPC اقتصادی | 50–100 | 2–4 | پالایشگاه، انرژی |
| CPU ضعیف | Np×Nc ≤ 80 | — | سختافزار محدود |
۵.۷.۱۰ انتخاب افقها در MATLAB (راهکار عملی)
اگر مدل فضای حالت داریم:
damp(sys_d)
step(sys_d)
سپس:
- زمان پاسخ را ببین
- مقدار مناسب Np را تعیین کن
- Nc را به اندازه معمولا کوچک انتخاب کن
6. قیدها در کنترل پیشبین مدل (MPC Constraints)
وجود قیدها (Constraints) همان نقطهای است که MPC را از سایر کنترلکنندهها متمایز میکند. در بسیاری از فرایندهای واقعی، ورودیها، خروجیها و حتی حالتها دارای محدودیت فیزیکی یا ایمنی هستند. MPC برخلاف PID یا LQR، بهصورت درونساختاری این محدودیتها را مدیریت میکند و از ابتدا آنها را وارد مسئله بهینهسازی مینماید.
6.1 انواع قیدها در MPC
در کنترل کننده MPC، محدودیتها معمولاً در چهار دسته اصلی قرار میگیرند:
6.1.1 قیدهای ورودی (Input Constraints)
این محدودیتها شامل مواردی هستند که مستقیماً بر متغیرهای کنترلی (u) اعمال میشوند.
نمونههای رایج:
- محدودیت دامنه ولتاژ موتور:
−10 V ≤ u ≤ 10 V - محدودیت باز و بسته شدن شیر (Valve Position):
0% ≤ u ≤ 100% - محدودیت گشتاور مؤثر روی عملگر:
علت اهمیت این محدودیتها:
- جلوگیری از آسیب به عملگر
- جلوگیری از ورود سیستم به نقاط غیرایمن
- پایبندی به محدودیتهای طراحی سختافزار
6.1.2 قید نرخ تغییر ورودی (Input Rate Constraints)
در بسیاری از سیستمها مهم است که ورودی ناگهان تغییر نکند:
Δu_min ≤ u(k) − u(k−1) ≤ Δu_max
دلایل نیاز:
- جلوگیری از تکان شدید در ربات
- جلوگیری از پدیده water hammer در خطوط لوله
- حفاظت از پانلهای قدرت در تجهیزات الکتریکی
این محدودیت نقش بسیار مهمی در صاف بودن فرمان کنترل و پایداری عملگر دارد.
6.1.3 قید خروجیها (Output Constraints)
گاهی خروجی سیستم نباید از محدودهای خارج شود. مثالها:
- دما نباید از 80°C بیشتر شود
- ارتفاع پهپاد نباید پایینتر از 2 متر بیاید
- موقعیت بازوی ربات نباید وارد منطقه برخورد شود
در MPC این محدودیتها روی y(k) اعمال میشود:
y_min ≤ y(k) ≤ y_max
6.1.4 قید روی حالتها (State Constraints)
در مدلهای فضای حالت x(k)، ممکن است بخواهیم حالتها نیز محدود باشند. مثال:
- محدودیت سرعت خودرو
- محدودیت جریان در سیستمهای الکترونیک قدرت
- محدودیت شتاب یا زاویه ربات
MPC میتواند مستقیماً محدودیتهایی از نوع:
x_min ≤ x(k) ≤ x_max
را اعمال کند.
این نوع قیدها معمولاً در مدلهای MIMO پیچیده یا سیستمهای ایمنی-حساس استفاده میشوند.
6.2 نقش اصلی MPC در مدیریت محدودیتها
هسته اصلی MPC دقیقاً در این است که میتواند در هر گام زمانی، قبل از اعمال ورودی، مسئله زیر را حل کند:
- پیشبینی رفتار آینده سیستم
- بررسی اینکه هر ورودی پیشنهادی از قیدها عبور نمیکند
- پیدا کردن بهترین ورودی ممکن که:
- تابع هزینه را کمینه کند
- همه محدودیتها را رعایت کند
به همین دلیل است که MPC در صنعت محبوب شده است؛ چون:
- PID هیچ درکی از محدودیتها ندارد.
- LQR محدودیتها را بهطور طبیعی پشتیبانی نمیکند.
- روشهای کلاسیک وقتی ورودی اشباع میشود، رفتار غیرقابل پیشبینی پیدا میکنند.
در مقابل:
MPC از همان ابتدا محدودیتها را در زمان طراحی در نظر میگیرد.
6.3 مثال کاربردی: اشباع عملگرها (Actuator Saturation)
مثال صنعتی: کنترل دما در یک بویلر شیمیایی
فرض کنید ولتاژ ورودی هیتر بین 0 تا 230 ولت محدود است، اما برای رسیدن به دمای مطلوب، کنترلکننده ممکن است بخواهد ورودی را 400 ولت افزایش دهد؛ کاری که از نظر فیزیکی ممکن نیست.
در PID:
- فرمان 400 ولت تولید میشود
- اما عملگر فقط 230 ولت اعمال میکند
- نتیجه: overshoot شدید، ناپایداری یا رفتار غیرخطی
در MPC:
- در هنگام حل بهینهسازی، ولتاژ 400 ولت رد میشود
- الگوریتم نزدیکترین ورودی معتبر (مثلاً 230 ولت) را انتخاب میکند
- خروجی کنترل شده، بدون رفتار ناخواسته و کاملاً پایدار خواهد بود
بنابراین MPC بهترین گزینه برای سیستمهایی است که محدودیتهای فیزیکی در آنها مهم است.
7. انواع الگوریتمهای کنترل پیشبین مدل (Advanced MPC Algorithms)
MPC تنها یک روش نیست؛ بلکه خانوادهای بزرگ از الگوریتمها است که برای شرایط و کاربردهای مختلف توسعه یافتهاند. شناخت صحیح این انواع به دانشجویان و پژوهشگران کمک میکند بهترین کنترلر را برای پروژه خود انتخاب کنند.
در این بخش، مهمترین شکلهای MPC را همراه با:
- فرم ریاضی
- کاربردها
- مزایا و معایب
بهصورت کاملاً طبقهبندیشده ارائه میکنیم.
7.1 کنترل کننده MPC ماتریسی دینامیکی (DMC – Dynamic Matrix Control)
قدیمیترین و پایهایترین نسخه MPC که در دهه ۸۰ در صنایع فرآیندی معرفی شد.
فرم ریاضی
مدل مورد استفاده: مدل پاسخ پله / پاسخ ضربه (step/impulse response model)
پیشبینی خروجی:
ŷ(k+i) = ∑ g(j) Δu(k+i−j)
تابع هزینه:
J = Σ (ŷ(k+i) – r(k+i))² + λ Σ Δu²
کاربردها
- صنایع نفت، پتروشیمی، پالایش
- فرآیندهای دمایی و شیمیایی
- سیستمهایی با پویایی کند
مزایا
- پیادهسازی بسیار ساده
- بدون نیاز به مدل فضای حالت
- مناسب برای MIMO بزرگ
معایب
- عملکرد ضعیف روی سیستمهای سریع
- مناسب نبودن برای سامانههای غیرخطی
7.2 کنترل پیشبین تعمیمیافته (GPC – Generalized Predictive Control)
GPC نسخه پیشرفته DMC است که از مدل CARIMA استفاده میکند.
فرم ریاضی
مدل:
A(q⁻¹) y(k) = B(q⁻¹) u(k−d) + C(q⁻¹) e(k)
پیشبینی خروجی:
Ŷ = F y(k) + Φ ΔU
تابع هزینه:
J = (Ŷ – R)ᵀ (Ŷ – R) + λ ΔUᵀ ΔU
کاربردها
- سیستمهای تکورودی–تکخروجی
- کنترل فرآیند با رفتار پیچیده
مزایا
- دقت پیشبینی بالا
- در ادبیات آکادمیک بسیار شناختهشده
معایب
- نسبت به DMC محاسبات پیچیدهتر
- حساسیت به تخمین پارامتر
7.3 کنترل MAC / PFC / IMC-based MPC
این خانواده برای سادهسازی محاسبات MPC طراحی شده است.
فرم ریاضی (IMC-based)
u(k) = (Q / (1 − Q)) [r(k) – ŷ(k)]
که Q فیلتر پایدار است.
کاربردها
- صنعت نفت
- کورهها و دیگهای بخار
- پلتفرمهایی که نیاز به تنظیم آسان دارند
مزایا
- سادهترین پیادهسازی در صنعت
- مناسب برای مهندسان غیرمتخصص در پیشبینی
معایب
- بهینه نیست
- مدیریت قیدها ضعیفتر از MPC استاندارد
7.4 MPC خطی فضای حالت (Standard State-Space MPC)
پرکاربردترین شکل MPC.
فرم ریاضی
مدل فضای حالت گسسته:
x(k+1) = A x(k) + B u(k)
y(k) = C x(k)
پیشبینی خروجی:
Ŷ = 𝛥X + Υ ΔU
تابع هزینه:
J = Σ ||ŷ(k+i) − r(k+i)||²_Q + Σ ||Δu(k+i)||²_R
کاربردها
- رباتیک
- پهپاد
- سیستمهای MIMO
- کنترل موتور، پوزیشن، سرعت
مزایا
- پشتیبانی کامل از قیدها
- پایداری تضمینی
- سازگار با Simulink و Model Predictive Control Toolbox
معایب
- فقط برای سیستمهای خطی دقیق است
7.5 کنترل پیشبین غیرخطی (NMPC – Nonlinear MPC)
مناسب سیستمهایی که رفتارشان با مدل خطی قابل تقریب نیست.
فرم ریاضی
مسئله بهینهسازی غیرخطی:
Minimize J(x,u)
Subject to
x(k+1) = f(x(k),u(k))
y(k) = g(x(k),u(k))
Constraints: h(x,u) ≤ 0
کاربردها
- رباتهای دوپا
- سیستمهای شیمیایی غیرخطی
- خودروهای خودران
- پهپادهای آکروباتیک
مزایا
- دقیقترین کنترلر
- پیشبینی واقعگرایانه
معایب
- محاسبات سنگین
- نیاز به solverهای NLP (مثل fmincon)
7.6 کنترل پیشبین تطبیقی (Adaptive MPC)
زمانی استفاده میشود که پارامترهای سیستم در طول زمان تغییر کنند.
روشها
- مدل LPV
- Multiple Models
- Online Identification + MPC
مزایا
- مناسب برای سیستمهای وابسته به شرایط
- پایداری بهتر نسبت به MPC ثابت
معایب
- تنظیم سختتر
- پیادهسازی پیچیدهتر
کاربردها
- هوافضا
- خودرو (Vehicle Dynamics)
- فرایندهای با تغییر بار
7.7 کنترل پیشبین مقاوم (Robust MPC)
مناسب شرایطی که مدل دقیق نیست یا نویز شدید وجود دارد.
فرم ریاضی
Minimize: Worst-case J(x,u)
Subject to:
A ΔU ≤ b for all model uncertainty Δ
رویکردها
- Tube MPC
- Min–Max MPC
- Robust Constraints Tightening
مزایا
- تضمین عملکرد تحت عدمقطعیت
- مناسب سیستمهای حیاتی
معایب
- محاسبات سنگین
- طراحی پیچیدهتر
کاربردها
- هوافضا
- رباتهای صنعتی
- کنترل پایدار نیروگاه
7.8 کنترل پیشبین صریح (Explicit MPC)
در Explicit MPC کنترل بهصورت offline حل میشود.
خروجی
u(k) = Kᵢ x + cᵢ
در ناحیه i از فضا
مزایا
- فوقسریع
- مناسب سختافزار real-time، FPGA، میکروکنترلر
معایب
- مناسب سیستمهای کمبعد
- حافظه زیاد برای تعداد زیاد region
کاربردها
- پهپاد
- رباتهای بازو کوچک
- کنترل فرکانس موتور
7.9 MPC هوشمند (Neural MPC – RL-MPC – Learning-based MPC)
جدیدترین نسل MPC که با هوش مصنوعی ترکیب شده است.
روشها
- Neural Network Model + MPC
- RL-based MPC (تقویت یادگیری)
- Koopman MPC (MPC بر پایه مدلهای خطیشده یادگیریشده)
مزایا
- دقت بالا در مدلسازی
- قابلیت کار با داده زیاد
- عملکرد بهتر در سیستمهای ناشناخته
معایب
- تضمین پایداری سختتر
- نیاز به داده بسیار زیاد
- پیچیدگی محاسباتی بالا
کاربردها
- خودروهای خودران
- رباتهای انساننما
- سیستمهای انرژی هوشمند
در ادامه بخش هشتم: پیادهسازی کامل MPC در MATLAB و Simulink را بهصورت حرفهای، آموزشمحور، سئوشده و دقیق آماده کردهام. این بخش یکی از مهمترین قسمتهای مقاله است زیرا مخاطب عملیاتی شما (دانشجو – پژوهشگر – صنعت) دقیقاً به چنین محتوایی نیاز دارد.
این نسخه نسبت به مطالب رقبا کاملتر، مفصلتر، کاربردیتر و تکنیکیتر است.
8. پیادهسازی کامل کنترل پیشبین مدل در MATLAB
در این بخش یک مسیر گامبهگام و کاملاً عملی برای پیادهسازی MPC ارائه میکنیم. این مسیر شامل:
- ساخت مدل
- ایجاد کنترلر MPC
- تنظیم افقها و وزنها
- اعمال محدودیتها
- شبیهسازی در MATLAB
- نکات کلیدی برای جلوگیری از خطاها
8.1 گام اول: ساخت مدل دینامیکی
مدل میتواند از سه روش به دست بیاید:
- مدلسازی فیزیکی (first principles)
- انتقال تابعی (tf)
- شناسایی سیستم (ARX/ARMAX/SS)
در این مثال از مدل انتقال تابعی استفاده میکنیم:
G = tf([1], [1 2 1]);
Ts = 0.1;
sys_d = c2d(G, Ts);
توضیح:
- مدل بسیار ساده انتخاب شده تا روند آموزش روشنتر باشد.
- با c2d مدل به حالت گسسته تبدیل میشود، زیرا MPC در حوزه گسسته عمل میکند.
8.2 گام دوم: ایجاد کنترلر MPC
mpcobj = mpc(sys_d);
MATLAB بهصورت خودکار:
- ماتریسهای پیشبینی
- مدل داخلی
- ساختار QP
را ایجاد میکند.
8.3 گام سوم: تنظیم افق پیشبینی و افق کنترل
mpcobj.PredictionHorizon = 20;
mpcobj.ControlHorizon = 5;
نکتههای مهم:
- افق پیشبینی بزرگ → دقت بیشتر، اما محاسبات سنگین
- افق کنترل کوچک → سادهتر، پایدارتر
8.4 گام چهارم: تنظیم وزندهیها (Tuning Weights)
mpcobj.Weights.OutputVariables = 1;
mpcobj.Weights.ManipulatedVariablesRate = 0.1;
نکته:
- وزن خروجی (Q) هرچه بزرگتر → دنبالکردن مرجع بهتر
- وزن نرخ ورودی (dR) هرچه بزرگتر → ورودی نرمتر
8.5 گام پنجم: اعمال محدودیتها (Constraints)
mpcobj.MV.Min = -1;
mpcobj.MV.Max = 1;
mpcobj.OV.Min = -2;
mpcobj.OV.Max = 2;
یادآوری:
MPC برتری اصلی خود را از توانایی مدیریت قیدها به دست میآورد.
8.6 گام ششم: شبیهسازی در MATLAB
simTime = 200;
r = ones(simTime,1);
[Y, T, U] = sim(mpcobj, simTime, r);
خروجیها:
- Y: خروجی سیستم
- U: ورودیهای بهینه شده MPC
- T: محور زمان
8.7 گام هفتم: ترسیم نمودارها
1) نمودار خروجی سیستم
figure
plot(T, Y, 'LineWidth', 1.5)
title('پاسخ خروجی سیستم تحت کنترل MPC')
xlabel('زمان (ثانیه)')
ylabel('خروجی')
grid on
2) نمودار ورودی کنترل (فرمان MPC)
figure
plot(T(1:end-1), U, 'LineWidth', 1.5)
title('ورودی کنترلی تولید شده توسط MPC')
xlabel('زمان (ثانیه)')
ylabel('ورودی کنترل')
grid on
8.9 نکات کلیدی برای جلوگیری از خطاهای رایج در MPC
نکته 1 – مدل باید گسسته باشد
اگر مدل شما tf یا ss پیوسته باشد، باید:
sys_d = c2d(sys, Ts);
نکته 2 – کنترلکننده MPC فقط سیستم رابطهدار را میپذیرد
سیستمهای بدون B یا با مرتبه صفر مشکل ایجاد میکنند.
نکته 3 – طول افقها باید کمتر از ۱۰۰ باشد
افقهای بسیار بزرگ باعث خطای حافظه میشوند.
نکته 4 – در MIMO حتماً وزنها را تنظیم کنید
در غیر این صورت ورودیها رفتار رقابتی ایجاد میکنند.
نکته 5 – اگر ورودی اشباع شود، MPC بهترین راهحل است
اما:
- وزنها
- محدودیتها
- و افقها
باید درست انتخاب شوند.
کد کامل و یکجا — مثال MPC ساده با مدل G(s)=1/(s²+2s+1)
% mpc_example.m
% مثال کامل MPC ساده با مدل G(s) = 1/(s^2 + 2s + 1)
clear; clc; close all;
%% 1) تعریف مدل پیوسته
G = tf([1], [1 2 1]); % تابع تبدیل پیوسته (سیستم یکپارچه درجه دوم)
%% 2) تبدیل به مدل گسسته
Ts = 0.1; % زمان نمونه
sys_d = c2d(G, Ts); % گسسته سازی با روش پیشفرض (ZOH)
disp('مدل گسسته:');
sys_d
%% 3) ساخت کنترلر MPC
mpcobj = mpc(sys_d, Ts); % ساخت MPC روی مدل گسسته
mpcobj.PredictionHorizon = 20;
mpcobj.ControlHorizon = 5;
% وزنها
mpcobj.Weights.OutputVariables = 1;
mpcobj.Weights.ManipulatedVariablesRate = 0.1;
% قیود ورودی (اختیاری)
mpcobj.MV.Min = -1;
mpcobj.MV.Max = 1;
%% 4) تعریف مرجع شبیهسازی
N_sim = 100; % تعداد نمونه شبیهسازی
r = ones(N_sim,1); % مرجع پله (۱)
%% 5) اجرای شبیهسازی MPC
[Y, T, U] = sim(mpcobj, N_sim, r);
%% 6) رسم نتایج
figure;
plot(T, Y, 'LineWidth', 1.4);
title('خروجی سیستم تحت MPC');
xlabel('زمان (ثانیه)'); ylabel('y');
grid on;
figure;
plot(T(1:length(U)), U, 'LineWidth', 1.4);
title('سیگنال کنترل u(k)');
xlabel('زمان (ثانیه)'); ylabel('u');
grid on;
این کد دقیقاً چه میکند؟
- یک سیستم ساده
G(s) = 1 / (s² + 2s + 1)
تعریف میکند. - آن را با Ts=0.1 ثانیه گسسته میکند.
- یک کنترلر MPC میسازد با:
- افق پیشبینی = ۲۰
- افق کنترل = ۵
- محدودیت ورودی u ∈ [-1, 1]
- یک مرجع پله تعریف میکند.
- سیستم را شبیهسازی میکند.
- خروجی و ورودی کنترل را رسم میکند.
بسیار خب، بخش نهم یعنی تنظیم پارامترهای MPC (MPC Tuning)، مرحلهای است که کاربر را از یک طراحی پایه به یک کنترل دقیق و بهینه هدایت میکند. این بخش به شکلی طراحی میشود که هم آموزشی باشد و هم کاربرپسند، و مثال MATLAB هم همراه دارد.
۹. تنظیم پارامترهای MPC (Tuning)
۹.۱ اثر افق پیشبینی (Prediction Horizon)
- تعریف: تعداد نمونههای آینده که MPC برای بهینهسازی در نظر میگیرد.
- اثر:
- افق کوتاه → پاسخ سریع ولی حساس به نویز و اغتشاش
- افق بلند → کنترل نرم و پایدار ولی محاسبات سنگینتر
- نکته عملی: معمولاً 10 تا 50 نمونه انتخاب میشود، بسته به زمان پاسخ سیستم و سرعت نمونهبرداری.
۹.۲ اثر وزنها (Weights)
- وزن خروجی (Q): مشخص میکند MPC چقدر دنبال رسیدن به مرجع باشد.
- وزن ورودی (R): تغییرات ورودی را محدود میکند تا سیستم نرم عمل کند.
- وزن نرخ تغییر ورودی (ΔR): جریمهای برای تغییر سریع ورودیهاست؛ برای جلوگیری از پرشها و ساییدگی عملگرها مفید است.
- اثر: وزنهای بزرگ روی خروجی → کنترل دقیق ولی ممکن است ورودی سریع تغییر کند؛ وزنهای زیاد روی ΔR → حرکت ورودی نرمتر ولی پاسخ کندتر.
۹.۳ روش انتخاب خودکار وزنها
- MPC Toolbox MATLAB ابزار
mpctoolوMPC Designerاجازه میدهد وزنها را با شبیهسازی و مشاهده پاسخ، بهصورت گرافیکی تنظیم کنید. - توصیه: ابتدا وزنها را از تجربه قبلی یا مقالات مرجع انتخاب کنید، سپس با شبیهسازی اصلاح نمایید.
۹.۴ توصیههای عملی برای سیستمهای واقعی
- ابتدا افق پیشبینی را بر اساس دینامیک سیستم تعیین کنید.
- وزنها را طوری انتخاب کنید که هم پاسخ دقیق باشد و هم تغییرات ورودی نرم.
- محدودیتهای ورودی و خروجی را به دقت اعمال کنید تا از آسیب به عملگرها جلوگیری شود.
- قبل از پیادهسازی واقعی، شبیهسازی با سناریوهای اغتشاش و نویز را انجام دهید.
- از MPC تطبیقی برای سیستمهای غیرخطی یا متغیر در زمان استفاده کنید.
مثال MATLAB: تأثیر افق پیشبینی و وزنها
clc; clear; close all;
%% مدل ساده
G = tf([1], [1 2 1]); % سیستم واقعی
Ts = 0.1;
sys_d = c2d(G, Ts); % تبدیل به مدل گسسته
%% طراحی MPC
mpcobj = mpc(sys_d);
mpcobj.PredictionHorizon = 30; % افق پیشبینی
mpcobj.ControlHorizon = 5; % افق کنترل
%% وزنها
mpcobj.Weights.OutputVariables = 1; % وزن خروجی
mpcobj.Weights.ManipulatedVariables = 0.1; % وزن ورودی
mpcobj.Weights.ManipulatedVariablesRate = 0.05; % وزن نرخ تغییر ورودی
%% محدودیتها
mpcobj.MV.Min = -2; mpcobj.MV.Max = 2;
%% شبیهسازی
simTime = 100;
r = ones(simTime,1); % مرجع ثابت
[Y, T, U] = sim(mpcobj, simTime, r);
%% نمایش پاسخ
figure
plot(T, Y, 'LineWidth',1.5)
hold on
plot(T, r, '--r','LineWidth',1)
title('اثر افق پیشبینی و وزنها در MPC')
xlabel('زمان (ثانیه)')
ylabel('خروجی')
legend('خروجی MPC','مرجع')
grid on
- با تغییر مقدار
PredictionHorizonو وزنها (Weights.OutputVariables,Weights.ManipulatedVariablesRate) میتوانید رفتار سیستم را مشاهده و بهینهسازی کنید. - این تمرین دقیقاً نشان میدهد که چرا تنظیم پارامترها در MPC از اهمیت بالایی برخوردار است.
بسیار خب، بخش دهم یعنی مقایسه MPC با سایر کنترلکنندهها. هدف این بخش این است که کاربران و دانشجویان درک کنند چرا MPC در بسیاری از کاربردهای صنعتی و تحقیقاتی ارجح است و چه تفاوتهایی با کنترلکنندههای رایج دیگر دارد.
۱۰. مقایسه MPC با سایر کنترلکنندهها
۱۰.۱ MPC vs PID
| ویژگی | PID | MPC |
|---|---|---|
| پیشبینی آینده | ندارد | دارد (Prediction Horizon) |
| محدودیتها | سخت | ورودی و خروجی و نرخ تغییر را محدود میکند |
| سیستمهای چند متغیره | محدود | چند متغیره (MIMO) را به راحتی کنترل میکند |
| واکنش به اغتشاش | محدود | بهینه و به صورت پیشبینی شده |
| پیچیدگی پیادهسازی | ساده | پیچیدهتر، نیازمند مدل و حل بهینهسازی |
نتیجه: PID مناسب سیستمهای ساده و خطی است، اما MPC برای سیستمهای پیچیده، چند متغیره و با محدودیتها برتری دارد.
۱۰.۲ MPC vs LQR
| ویژگی | LQR | MPC |
|---|---|---|
| پیشبینی آینده | بهینه سازی حالتها، پیشبینی محدود | پیشبینی آینده با افق مشخص |
| محدودیتها | به سختی اعمال میشود | به راحتی محدودیتهای ورودی و خروجی اعمال میشوند |
| انعطافپذیری | خطی و با مدل فضای حالت | خطی و غیرخطی، MIMO، محدودیتها، تغییر وزنها |
| کاربرد صنعتی | کمتر در سیستمهای واقعی با محدودیت | بسیار رایج در صنایع نفت، شیمی، خودرو و هوافضا |
نتیجه: MPC همانند LQR عمل بهینهسازی میکند اما با امکان اعمال محدودیتها و پیشبینی، برای کاربردهای صنعتی واقعی مناسبتر است.
۱۰.۳ MPC vs SMC (Sliding Mode Control)
| ویژگی | SMC | MPC |
|---|---|---|
| پیشبینی آینده | ندارد | دارد |
| محدودیتها | محدود | قابل اعمال است |
| غیرخطی بودن سیستم | خوب عمل میکند | هم خطی و هم غیرخطی (NMPC) |
| پایداری در حضور اغتشاش | بسیار مقاوم | مقاوم، ولی بسته به طراحی وزنها و مدل |
نتیجه: SMC مقاوم در برابر اغتشاش است، اما MPC کنترل دقیقتر و مدیریت محدودیتها را ارائه میدهد.
۱۰.۴ MPC vs Adaptive Control
| ویژگی | Adaptive Control | MPC |
|---|---|---|
| تغییر پارامتر سیستم | خودکار | میتوان تطبیقی کرد (Adaptive MPC) |
| پیشبینی آینده | ندارد | دارد |
| محدودیتها | سخت | قابل اعمال است |
| پیچیدگی طراحی | متوسط | بالا ولی انعطافپذیر |
نتیجه: MPC تطبیقی بهترین عملکرد را زمانی ارائه میدهد که سیستم غیرخطی یا متغیر در زمان باشد، ضمن حفظ محدودیتها و پیشبینی.
۱۰.۵ MPC vs Reinforcement Learning Controllers
| ویژگی | RL Controller | MPC |
|---|---|---|
| نیاز به مدل | کم یا بدون مدل | مدل دقیق نیاز دارد |
| پیشبینی آینده | ضمنی با یادگیری | صریح با Prediction Horizon |
| محدودیتها | محدود، نیازمند طراحی اضافی | به راحتی اعمال میشود |
| یادگیری و بهبود | خودآموز | ثابت، مگر Adaptive MPC باشد |
| پیادهسازی صنعتی | هنوز در حال تحقیق | بسیار رایج و قابل اعتماد |
نتیجه: RL کنترلکنندههای نوظهور هستند و میتوانند بدون مدل کار کنند، اما MPC با وجود نیاز به مدل، در صنایع واقعی بسیار پایدار، قابل پیشبینی و قابل اعتماد است.
این پست بروزرسانی خواهد شد.





دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.