MATLAB/Simulink code update
This commit is contained in:
parent
d2179071db
commit
d6b69acb17
28 changed files with 956 additions and 266 deletions
83
Matlab_scripts/gp_casadi_test.m
Normal file
83
Matlab_scripts/gp_casadi_test.m
Normal file
|
@ -0,0 +1,83 @@
|
|||
clear all
|
||||
close all
|
||||
clc
|
||||
%%%%%%%%%%%%
|
||||
addpath('/home/radu/Media/MATLAB/casadi-linux-matlabR2014b-v3.5.5')
|
||||
import casadi.*
|
||||
|
||||
%% Generate GP data
|
||||
size = 500; n_samples = 15;
|
||||
X = linspace(-2, 2, size);
|
||||
Y = 3 * X .^2;
|
||||
|
||||
% Add noise to the output
|
||||
mean = 0; std = 0.5;
|
||||
noise = mean + std.*randn(1, n_samples);
|
||||
|
||||
idx_samples = randperm(size, n_samples);
|
||||
|
||||
X_sampled = X(idx_samples);
|
||||
Y_sampled = Y(idx_samples);
|
||||
|
||||
Y_sampled = Y_sampled + noise;
|
||||
|
||||
figure; hold on;
|
||||
plot(X, Y);
|
||||
scatter(X_sampled, Y_sampled);
|
||||
|
||||
tbl_gpr_in = array2table([X_sampled', Y_sampled']);
|
||||
tbl_gpr_in.Properties.VariableNames = {'X', 'Y'};
|
||||
|
||||
tic;
|
||||
model = fitrgp(tbl_gpr_in, 'Y', 'KernelFunction', 'ardsquaredexponential', ...
|
||||
'FitMethod', 'sr', 'PredictMethod', 'fic', 'Standardize', 1);
|
||||
toc;
|
||||
|
||||
%% Predict stuff
|
||||
[yhat_test, sigma_test] = predict(model, X');
|
||||
std_test = sqrt(sigma_test);
|
||||
|
||||
% prepare it for the fill function
|
||||
x_ax = X';
|
||||
X_plot = [x_ax; flip(x_ax)];
|
||||
Y_plot = [yhat_test-1.96.*std_test; flip(yhat_test+1.96.*std_test)];
|
||||
|
||||
% plot a line + confidence bands
|
||||
figure(); hold on;
|
||||
title("GP performance on test data");
|
||||
plot(x_ax, Y, 'red', 'LineWidth', 1.2);
|
||||
plot(x_ax, yhat_test, 'blue', 'LineWidth', 1.2)
|
||||
fill(X_plot, Y_plot , 1,....
|
||||
'facecolor','blue', ...
|
||||
'edgecolor','none', ...
|
||||
'facealpha', 0.3);
|
||||
legend({'data','prediction_mean', '95% confidence'},'Location','Best');
|
||||
hold off
|
||||
|
||||
%% Save the model
|
||||
save('test_gpr_model.mat', 'model')
|
||||
|
||||
%% CasADi optimization problem
|
||||
cs_model = test_gpCallback('model');
|
||||
cs_x = MX.sym('x');
|
||||
cs_y = 2 * cs_model(cs_x) + 5;
|
||||
f = Function('f', {cs_x}, {cs_y});
|
||||
|
||||
|
||||
nlp_prob = struct('f', f(cs_x), 'x', cs_x);
|
||||
|
||||
|
||||
opts = struct;
|
||||
opts.ipopt.max_iter = 2000;
|
||||
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);
|
||||
|
||||
res = solver('lbx', -2, 'ubx', 2);
|
||||
|
||||
res
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue