MATLAB/Simulink code update
This commit is contained in:
parent
d2179071db
commit
d6b69acb17
28 changed files with 956 additions and 266 deletions
86
Matlab_scripts/casadi_gp_mpc.m
Normal file
86
Matlab_scripts/casadi_gp_mpc.m
Normal file
|
@ -0,0 +1,86 @@
|
|||
clear all
|
||||
close all
|
||||
clc
|
||||
|
||||
%% Import CasADi
|
||||
addpath('/home/radu/Media/MATLAB/casadi-linux-matlabR2014b-v3.5.5')
|
||||
import casadi.*
|
||||
|
||||
load("gpr_model.mat")
|
||||
%% Initialize casadi callback
|
||||
cs_model = gpCallback('model');
|
||||
|
||||
T_set = 20;
|
||||
N_horizon = 5;
|
||||
n_states = 7;
|
||||
|
||||
|
||||
COP = 5; %cooling
|
||||
EER = 5; %heating
|
||||
Pel = 6300; % Electric Power Consumption of the HVAC
|
||||
|
||||
u_min = - COP * Pel;
|
||||
u_max = EER * Pel;
|
||||
|
||||
J = 0; % optimization objective
|
||||
g = []; % constraints vector
|
||||
|
||||
% Set up the symbolic variables
|
||||
U = MX.sym('U', N_horizon, 1);
|
||||
W = MX.sym('W', N_horizon, 2);
|
||||
x0 = MX.sym('x0', 1, n_states - 3);
|
||||
|
||||
% setup the first state
|
||||
wk = W(1, :);
|
||||
uk = U(1); % scaled input
|
||||
xk = [wk, Pel*uk, x0];
|
||||
yk = cs_model(xk);
|
||||
J = J + (yk - T_set).^2;
|
||||
|
||||
% Setup the rest of the states
|
||||
for idx = 2:N_horizon
|
||||
wk = W(idx, :);
|
||||
uk_1 = uk; uk = U(idx);
|
||||
xk = [wk, Pel*uk, Pel*uk_1, yk, xk(5:6)];
|
||||
yk = cs_model(xk);
|
||||
J = J + (yk - T_set).^2;
|
||||
end
|
||||
|
||||
p = [vec(W); vec(x0)];
|
||||
|
||||
nlp_prob = struct('f', J, 'x', vec(U), 'g', g, 'p', p);
|
||||
|
||||
opts = struct;
|
||||
%opts.ipopt.max_iter = 5000;
|
||||
opts.ipopt.max_cpu_time = 15*60;
|
||||
opts.ipopt.hessian_approximation = 'limited-memory';
|
||||
%opts.ipopt.print_level =1;%0,3
|
||||
opts.print_time = 0;
|
||||
opts.ipopt.acceptable_tol =1e-8;
|
||||
opts.ipopt.acceptable_obj_change_tol = 1e-6;
|
||||
|
||||
solver = nlpsol('solver', 'ipopt', nlp_prob,opts);
|
||||
|
||||
real_x0 = [0, 23, 23, 23];
|
||||
real_W = [[57.9261000000000;54.9020333333334;73.8607000000000;76.0425333333333;64.9819666666667], [22; 22; 22; 22; 22]];
|
||||
|
||||
real_p = vertcat(vec(DM(real_W)), vec(DM(real_x0)));
|
||||
|
||||
|
||||
res = solver('p', real_p, 'ubx', EER, 'lbx', -COP);
|
||||
%% Interpret the optimization result
|
||||
x = Pel * full(res.x);
|
||||
X = [real_W, x, [real_x0; zeros(N_horizon -1, size(real_x0, 2))]];
|
||||
|
||||
X(2:end, 4) = X(1:end-1, 3);
|
||||
|
||||
for idx=2:N_horizon
|
||||
X(idx, 5) = full(cs_model(X(idx - 1, :)));
|
||||
X(idx, 6:7) = X(idx - 1, 5:6);
|
||||
end
|
||||
T_horizon = cs_model(X');
|
||||
|
||||
|
||||
figure; hold on;
|
||||
plot(1:N_horizon, full(T_horizon));
|
||||
plot(1:N_horizon, T_set*ones(1, N_horizon));
|
Loading…
Add table
Add a link
Reference in a new issue