1 function solution = SQP_algorithm(model,data,varargin)
2 %
function solution = SQP_algorithm(model,data,varargin)
4 % This funtion uses an SQP-Algorithm to
optimize the shape of the
5 % porsche_model. This Version was used in Oliver Zeeb
's Diploma-thesis.
8 % model: the porsche_model
9 % data: reduced_data or model_data
12 % solution: cell, containing information about the optimization-process
14 % needed fields in model:
15 % model.optimization.opt_mode: according to which data is given either
16 % 'detailed
' (mdoel_data) oder 'reduced
' (reduced_data)
20 % Oliver Zeeb, 30.05.11
24 %initialize some values
25 nr_constr = model.optimization.nr_constraints;
27 % (S.0) Startwerte setzen
28 k = 0; % Nr of SQP iterations
29 l_eq = zeros(nr_constr,1);
34 mu_diff = zeros(length(model.mu_names),1);
35 l_eq_diff = zeros(size(l_eq));
39 % needed for first SQP_kkt_check
40 grad_J = model.optimization.get_Jacobian(model,data);
41 hes_Lag = model.optimization.get_Hes_Lag(model,data,l_eq);
42 H = model.optimization.get_eq_constr(model);
43 grad_H = model.optimization.get_grad_eq_constr(model); %(entspricht B)
46 while ~SQP_kkt_check(grad_J, H, grad_H, l_eq)
48 %Lösen des SQP Teilproblems:
49 %Matrix aufstellen, vgl. Satz 1.4, bzw. Gleichung (2.28)
50 A=[hes_Lag, grad_H'; grad_H, zeros(size(grad_H,1))];
55 %Lösung des LGS aufteilen in Lagrangemultiplikatoren
56 Dmu = Dmu_lambda(1 : length(mu));
57 l_eq = Dmu_lambda(length(mu)+1 : end);
62 %mu_diff = [mu_diff, mu_save(:,k+2) - mu_save(:,k+1)];
63 l_eq_save(:,k+2) = l_eq(:);
64 %l_eq_diff = [l_eq_diff, l_eq_save(:,k+2) - l_eq_save(:,k+1)];
69 model=set_mu(model,mu);
70 grad_J = model.optimization.get_Jacobian(model,data);
71 hes_Lag = model.optimization.get_Hes_Lag(model,data,l_eq);
72 H = model.optimization.get_eq_constr(model);
73 grad_H = model.optimization.get_grad_eq_constr(model); %(entspricht B)
84 solution.obj_function = model.optimization.objective_function(model,data);
87 solution.nr_iterations=k;
89 solution.x_opt = mu(1);
90 solution.y_opt = mu(2);
91 solution.mu_k = mu_save;
93 solution.l_eq_k = l_eq_save;
94 solution.time_elapsed = toc;
function [ opt_data , model ] = optimize(model, model_data, detailed_data, reduced_data)
opt_data = optimize(model, model_data, detailed_data, reduced_data)