rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
SQP_algorithm.m
1 function solution = SQP_algorithm(model,data,varargin)
2 %function solution = SQP_algorithm(model,data,varargin)
3 %
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.
6 %
7 % input
8 % model: the porsche_model
9 % data: reduced_data or model_data
10 %
11 % output
12 % solution: cell, containing information about the optimization-process
13 %
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)
17 %
18 %
19 %
20 % Oliver Zeeb, 30.05.11
21 
22 tic;
23 
24 %initialize some values
25 nr_constr = model.optimization.nr_constraints;
26 
27 % (S.0) Startwerte setzen
28 k = 0; % Nr of SQP iterations
29 l_eq = zeros(nr_constr,1);
30 
31 mu = get_mu(model);
32 
33 mu_save = mu;
34 mu_diff = zeros(length(model.mu_names),1);
35 l_eq_diff = zeros(size(l_eq));
36 
37 
38 %(S.1)
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)
44 
45 
46 while ~SQP_kkt_check(grad_J, H, grad_H, l_eq)
47  %(S.2)
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))];
51  b=[-grad_J';-H'];
52 
53  Dmu_lambda= A\b;
54 
55  %Lösung des LGS aufteilen in Lagrangemultiplikatoren
56  Dmu = Dmu_lambda(1 : length(mu));
57  l_eq = Dmu_lambda(length(mu)+1 : end);
58  %mu update
59  mu = mu + Dmu;
60 
61  mu_save(:,k+2) = mu;
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)];
65 
66 
67 
68  %(S.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)
74 
75 
76  % (S.3)
77  k=k+1;
78 % if mod(k,15)==0
79 % keyboard
80 % %break
81 % end
82 end
83 
84 solution.obj_function = model.optimization.objective_function(model,data);
85 
86 % save the solution
87 solution.nr_iterations=k;
88 solution.mu_opt = mu;
89 solution.x_opt = mu(1);
90 solution.y_opt = mu(2);
91 solution.mu_k = mu_save;
92 solution.l_eq = l_eq;
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)
Definition: optimize.m:17