MATLAB Examples

# Uncsontrained, 2-DV, Quadratic Objective - Haftka Example 4.2.1

Haftka, R. T. and Z. Gurdal (1992), Elements of Structural Optimization, Kluwer Academic Publishers

## Initialize starting point and options

x0=[-1; -2] %#ok<*NOPTS>
options=optimset('HessUpdate','steepdesc','Display','iter',...
'TolFun',1e-4,'TolX',1e-4,...
'MaxIter',100,'MaxFunEvals',500,'LargeScale','off');
x0 =

-1
-2

## Steepest Descent (slow) with Finite Difference

[x_SD,~,~,outSD]=fminunc(@fHaftka4p2p1,x0,options)
First-order
Iteration  Func-count       f(x)        Step-size       optimality
0           3                2                             4
1           9          1.51923      0.0480769           2.62
2          15          1.14302            0.1            3.4
3          24         0.798154      0.0432764           1.85
4          30         0.533847       0.112452           2.61
5          39         0.331281      0.0432764           1.42
6          45         0.176032       0.112452              2
7          54        0.0570482      0.0432764           1.08
8          60       -0.0341418       0.112452           1.53
9          69        -0.104031      0.0432764          0.831
10          75        -0.157594       0.112452           1.17
11          84        -0.198645      0.0432764          0.637
12          90        -0.230107       0.112452          0.899
13          99         -0.25422      0.0432764          0.488
14         105          -0.2727       0.112452          0.689
15         114        -0.286864      0.0432764          0.374
16         120        -0.297719       0.112451          0.528
17         129        -0.306038      0.0432764          0.287
18         135        -0.312414       0.112451          0.405
19         144        -0.317301      0.0432764           0.22
First-order
Iteration  Func-count       f(x)        Step-size       optimality
20         150        -0.321046       0.112451           0.31
21         159        -0.323916      0.0432765          0.168
22         165        -0.326116       0.112451          0.238
23         174        -0.327802      0.0432765          0.129
24         180        -0.329094       0.112451          0.182
25         189        -0.330084      0.0432766         0.0989
26         195        -0.330843        0.11245           0.14
27         204        -0.331425      0.0432766         0.0758
28         210        -0.331871        0.11245          0.107
29         219        -0.332212      0.0432767         0.0581
30         225        -0.332474       0.112449          0.082
31         234        -0.332675      0.0432768         0.0445
32         240        -0.332829       0.112448         0.0629
33         249        -0.332947      0.0432769         0.0341
34         255        -0.333037       0.112447         0.0482
35         264        -0.333106      0.0432771         0.0262
36         270        -0.333159       0.112446         0.0369
37         279          -0.3332      0.0432774         0.0201
38         285        -0.333231       0.112444         0.0283
39         294        -0.333255      0.0432777         0.0154
First-order
Iteration  Func-count       f(x)        Step-size       optimality
40         300        -0.333273       0.112441         0.0217
41         309        -0.333287      0.0432782         0.0118
42         315        -0.333298       0.112438         0.0166
43         324        -0.333306      0.0432786        0.00903
44         330        -0.333313       0.112435         0.0127
45         339        -0.333317       0.043279        0.00692
46         345        -0.333321       0.112431        0.00976
47         354        -0.333324      0.0432798         0.0053
48         360        -0.333326       0.112426        0.00748
49         369        -0.333328      0.0432809        0.00407
50         375        -0.333329       0.112417        0.00574
51         384         -0.33333      0.0432825        0.00312
52         390        -0.333331       0.112405         0.0044
53         399        -0.333331      0.0432845        0.00239
54         405        -0.333332       0.112385        0.00337
55         414        -0.333332      0.0432873        0.00183

Local minimum possible.

fminunc stopped because the size of the current step is less than
the selected value of the step size tolerance.

x_SD =

-0.3339
-0.5010

outSD =

iterations: 55
funcCount: 414
stepsize: 1.7122e-04
lssteplength: 0.0433
firstorderopt: 0.0018
algorithm: 'quasi-newton'
message: 'Local minimum possible....'

## SLP with Trust Region Strategy (not as slow)

x_SLP=slp_trust(@fHaftka4p2p1,x0,options,[],[],@gHaftka4p2p1)

Sequential Linear Programming Iteration History
Iteration      Objective MaxConstraint    Index   Step-size   Merit      MoveLimit  TrustRatio
0              2   -1.798e+308      1           0           2
1           2.08   -1.798e+308      1         0.4           2        0.2       -0.04  Rejected
2           1.52   -1.798e+308      1         0.2        1.52        0.1        0.48
3           1.04   -1.798e+308      1         0.2        1.04        0.1      0.9231
4           0.32   -1.798e+308      1         0.4        0.32        0.2      0.8182
5           1.12   -1.798e+308      1         0.4        0.32        0.4     -0.7143  Rejected
6           0.24   -1.798e+308      1         0.2        0.24        0.2      0.1429
7           0.96   -1.798e+308      1         0.4        0.24        0.2     -0.5294  Rejected
8           0.08   -1.798e+308      1         0.2        0.08        0.1      0.2353
9           0.24   -1.798e+308      1         0.2        0.08        0.1     -0.4445  Rejected
10       0.030001   -1.798e+308      1         0.1        0.03       0.05      0.2778
11      -0.079999   -1.798e+308      1         0.1       -0.08       0.05      0.9167
12          -0.24   -1.798e+308      1         0.2       -0.24        0.1         0.8
13          -0.32   -1.798e+308      1         0.4       -0.32        0.2      0.3333
14           1.52   -1.798e+308      1         0.4       -0.32        0.2      -7.667  Rejected
15       0.080002   -1.798e+308      1         0.2       -0.32        0.1      -3.333  Rejected
16          -0.25   -1.798e+308      1         0.1       -0.32       0.05      -1.167  Rejected
17        -0.3175   -1.798e+308      1        0.05       -0.32      0.025    -0.08335  Rejected
18       -0.32688   -1.798e+308      1       0.025     -0.3269     0.0125      0.4583
19          -0.33   -1.798e+308      1       0.025       -0.33     0.0125      0.8333
20        -0.3025   -1.798e+308      1        0.05       -0.33      0.025      -5.499  Rejected
21       -0.32438   -1.798e+308      1       0.025       -0.33     0.0125       -2.25  Rejected
22       -0.32922   -1.798e+308      1      0.0125       -0.33    0.00625     -0.6248  Rejected
23       -0.33012   -1.798e+308      1     0.00625     -0.3301   0.003125      0.1876
24       -0.33078   -1.798e+308      1     0.00625     -0.3308   0.003125      0.9444
25       -0.33188   -1.798e+308      1      0.0125     -0.3319    0.00625       0.875
26       -0.33312   -1.798e+308      1       0.025     -0.3331     0.0125      0.6667
27       -0.32563   -1.798e+308      1       0.025     -0.3331     0.0125      -11.99  Rejected
28       -0.33141   -1.798e+308      1      0.0125     -0.3331    0.00625      -5.497  Rejected
29       -0.33277   -1.798e+308      1     0.00625     -0.3331   0.003125      -2.249  Rejected
30       -0.33308   -1.798e+308      1    0.003125     -0.3331   0.001563     -0.6243  Rejected
31       -0.33313   -1.798e+308      1    0.001562     -0.3331  0.0007813      0.1878
32       -0.33317   -1.798e+308      1    0.001562     -0.3332  0.0007813      0.9444
33       -0.33324   -1.798e+308      1    0.003125     -0.3332   0.001563       0.875
34       -0.33332   -1.798e+308      1     0.00625     -0.3333   0.003125      0.6666
35       -0.33285   -1.798e+308      1     0.00625     -0.3333   0.003125      -11.98  Rejected
36       -0.33321   -1.798e+308      1    0.003125     -0.3333   0.001563      -5.489  Rejected
37        -0.3333   -1.798e+308      1    0.001562     -0.3333  0.0007813      -2.244  Rejected
38       -0.33332   -1.798e+308      1   0.0007812     -0.3333  0.0003906     -0.6222  Rejected
39       -0.33332   -1.798e+308      1   0.0003906     -0.3333  0.0001953      0.1889
40       -0.33332   -1.798e+308      1   0.0003906     -0.3333  0.0001953      0.9444
41       -0.33333   -1.798e+308      1   0.0007812     -0.3333  0.0003906       0.875
42       -0.33333   -1.798e+308      1    0.001562     -0.3333  0.0007813      0.6666
43        -0.3333   -1.798e+308      1    0.001562     -0.3333  0.0007813      -11.91  Rejected
44       -0.33333   -1.798e+308      1   0.0007812     -0.3333  0.0003906      -5.456  Rejected
45       -0.33333   -1.798e+308      1   0.0003906     -0.3333  0.0001953      -2.228  Rejected
46       -0.33333   -1.798e+308      1   0.0001953     -0.3333  9.766e-05      -0.614  Rejected
47       -0.33333   -1.798e+308      1   9.766e-05     -0.3333  4.883e-05       0.193  Bound
----------  ------------         ----------
Criteria      0.0001         1e-06             0.0001
SLP converged. Final objective function value = -0.33333

x_SLP =

-0.3329
-0.4991

## BFGS Quasi-Newton (theoretically converges in 3 iterations) Finite Diff.

options=optimset(options,'HessUpdate','BFGS');
x_BFGS=fminunc(@fHaftka4p2p1,x0,options)
First-order
Iteration  Func-count       f(x)        Step-size       optimality
0           3                2                             4
1           9          1.51923      0.0480769           2.62
2          15        -0.241374             10          0.583
3          18        -0.333333              1       2.98e-08

Local minimum found.

Optimization completed because the size of the gradient is less than
the selected value of the function tolerance.

x_BFGS =

-0.3333
-0.5000

x_SQP=sqp(@fHaftka4p2p1,[-1; -2],options,[],[],@gHaftka4p2p1)

Termination Criteria
1e-06        0.0001    0.0001
-----------------------------------
f-CNT         FUNC      STEP NAC     max{g}  j        KTO    max(S)
1            2         0   0  -1.8e+308  1         20         4
4       1.5192    0.0481   0  -1.8e+308  1       8.55      3.02
6     -0.33333     0.433   0  -1.8e+308  1          0  1.11e-15
Optimization Terminated Successfully from sqp

x_SQP =

-0.3333
-0.5000

## Source code

% Function evaluation
% (N.B., MATLAB optimization toolbox 2nd output is gradient,
% instead of 2nd output being a dummy constraint vector like this one.)
type fHaftka4p2p1

% (N.B., MATLAB optimization toolbox has separate function
% a second function for gradients of objective and constraints
% like this one, which has a dummy constraint for use with SQP.)
type gHaftka4p2p1
function [f,g] = fHaftka4p2p1( x )
% Haftka Example 4.2.1 objective evaluation
f = 12*x(1)^2 + 4*x(2)^2 - 12*x(1)*x(2) + 2*x(1); % Eq.(4.2.18)
g = -realmax;
end