Реализация модели прогнозирующего управления в 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

0 ответов

Другие вопросы по тегам