Реализация модели прогнозирующего управления в Simulink с помощью скрипта
Я должен реализовать MPC в Simulink, и я хочу использовать файл.m. Для этого я использую команду "sim" в цикле for, определяющую начальное и конечное время симуляции [Ti Tf]
, В момент времени Tf я звоню Fmincon
что должно минимизировать x(1) (fuel)
с учетом нелинейной функции ограничения. В этой функции я помещаюtwin
"Модель Simulink, какой параметр должен быть минимизирован для того же рабочего условия первой модели. После завершения минимизации я смогу загрузить оптимальный результат и продолжать цикл. Однако он работает так, как я не помещаю Функция линейного ограничения. Любое предложение? Спасибо в авансах Ура:)
Вот код:
clear all
clc
% Define simulation steps
Tfinal=86400; % Simulation lenght
Ts=3600; % Sampling time
n=Tfinal/Ts; % number of steps
% Start simulation
set_param('GB_MPC2','LoadInitialState','off')
set_param('GB_MPC2','SaveFinalState','off');
set_param('GB_MPC2','SaveFinalState','on','FinalStateName',...
'myOperPoint','SaveCompleteFinalSimState','on');
sim('GB_MPC2',[0 Ts]);
set_param('GB_MPC2','SaveFinalState','off');
for i=1:(n-1)
Ti=i*Ts;
Tf=(i+1)*Ts;
Th=(i+2)*Ts;
set_param('GB_MPC2','LoadInitialState','on','InitialState',...
'myOperPoint');
set_param('GB_MPC2','SaveFinalState','on','FinalStateName',...
'myOperPoint','SaveCompleteFinalSimState','on');
sim('GB_MPC2',[Ti Tf]);
set_param('GB_MPC2','SaveFinalState','off');
% optimisation
tic
fun=@(x)(x(1));
x0 = [0.005];
A = [];
b = [];
Aeq=[];
beq=[];
lb=[0];
ub=[0.025];
% Execute Fmincon solver
[finalResult,par,x1,x2]=fmincon(fun,x0,[],[],[],[],lb,ub,[])
toc
%setting pamaters on model values from Fmincon
set_param('GB_MPC2/Gain','Gain',num2str(finalResult));
end
function [c, ceq] = confun(x1,x2)
% Nonlinear inequality constraints
%Twin call
set_param('GB_MPC','LoadInitialState','off')
set_param('GB_MPC','SaveFinalState','off');
pctRunOnAll('load_system(''GB_MPC'')');
set_param('GB_MPC','LoadInitialState','on','InitialState',...
'myOperPoint');
[t par x1 x2]=sim('GB_MPC')
c = [275-x2];
% Nonlinear equality constraints
ceq = [];
end