Multiobjective goal attainment optimization
This demo shows how the Optimization Toolbox can be used to solve a pole-placement problem using the multiobjective goal attainment method.
Consider here a 2-input 2-output unstable plant.
A = [ -0.5 0 0; 0 -2 10; 0 1 -2 ]; B = [ 1 0; -2 2; 0 1 ]; C = [ 1 0 0; 0 0 1 ];
Suppose we wish to design an output feedback controller, x, to have poles to the left of the location [-5, -3, -1] in the complex plane. The controller must not have any gain element exceeding an absolute value of 4.
goal = [-5, -3, -1]
goal =
-5 -3 -1
Set the weights equal to the goals to ensure same percentage under- or over-attainment in the goals.
weight = abs(goal)
weight =
5 3 1
Initialize output feedback controller
x0 = [ -1 -1; -1 -1];
Set upper and lower bounds on the controller
lb = repmat(-4,size(x0)) ub = repmat(4,size(x0))
lb =
-4 -4
-4 -4
ub =
4 4
4 4
Set optimization display parameter to give output at each iteration:
options = optimset('Display','iter');
Create a vector-valued function eigfun that returns the eigenvalues of the closed loop system. This function requires additional parameters (namely, the matrices A, B, and C); the most convenient way to pass these is through an anonymous function:
eigfun = @(x) sort(eig(A+B*x*C))
eigfun =
@(x) sort(eig(A+B*x*C))
To begin the optimization we call FGOALATTAIN:
[x,fval,attainfactor,exitflag,output,lambda] = ...
fgoalattain(eigfun,x0,goal,weight,[],[],[],[],lb,ub,[],options);
Attainment Directional
Iter F-count factor Step-size derivative Procedure
0 6 1.88521
1 12 1.061 1 1.03
2 18 0.4211 1 -0.679
3 24 -0.06352 1 -0.523 Hessian modified
4 30 -0.1571 1 -0.053 Hessian modified twice
5 36 -0.3489 1 -0.133
6 42 -0.3643 1 -0.00768 Hessian modified
7 48 -0.3645 1 -4.25e-005 Hessian modified
8 54 -0.3674 1 -0.00303 Hessian modified twice
9 60 -0.3806 1 -0.0213 Hessian modified
10 66 -0.3862 1 0.00266
11 72 -0.3863 1 -2.73e-005 Hessian modified twice
12 78 -0.3863 1 -7.72e-014 Hessian modified twice
Optimization terminated: magnitude of search direction less than 2*options.TolX
and maximum constraint violation is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1 1
2 2
4
The value of the control parameters at the solution is:
x
x = -4.0000 -0.2564 -4.0000 -4.0000
The eigenvalues of the closed loop system are as follows:
eigfun(x) % These values are also held in output fval
ans = -6.9313 -4.1588 -1.4099
The attainment factor indicates the level of goal achievement. A negative attainment factor indicates over-achievement, positive indicates under-achievement. The value attainfactor we obtained in this run indicates that the objectives have been over-achieved by about 39 percent:
attainfactor
attainfactor = -0.3863
Suppose we now require the eigenvalues to be as near as possible to the goal values, [-5, -3, -1]. Set options.GoalsExactAchieve to the number of objectives that should be as near as possible to the goals (i.e., do not try to over-achieve):
% All three objectives should be as near as possible to the goals. options = optimset(options,'GoalsExactAchieve',3);
We are ready to call the optimization solver:
[x,fval,attainfactor,exitflag,output,lambda] = ...
fgoalattain(eigfun,x0,goal,weight,[],[],[],[],lb,ub,[],options);
Attainment Directional
Iter F-count factor Step-size derivative Procedure
0 6 1.88521
1 12 1.061 1 1.03
2 18 0.4211 1 -0.679
3 24 0.1437 1 -0.2 Hessian modified
4 30 0.06407 1 -0.126 Hessian modified
5 36 0.005703 1 -0.0268 Hessian modified
6 42 9.619e-006 1 -2.11e-017 Hessian modified
7 48 4.733e-011 1 2.96e-019 Hessian modified
Optimization terminated: magnitude of directional derivative in search
direction less than 2*options.TolFun and maximum constraint violation
is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1
2
3
4
5
6
This time the eigenvalues of the closed loop system are as follows:
eigfun(x) % These values are also held in output fval
ans = -5.0000 -3.0000 -1.0000
The attainment factor is the level of goal achievement. A negative attainment factor indicates over-achievement, positive indicates under-achievement. The low attainfactor obtained indicates that the eigenvalues have almost exactly met the goals:
attainfactor
attainfactor = -1.9343e-021