One-Dimensional Semi-Infinite Constraints
Find values of x that minimize
f(x) = (x1 – 0.5)2 + (x2– 0.5)2 + (x3– 0.5)2
where
for all values of w1 and w2 over the ranges
1 ≤ w1 ≤
100,
1 ≤ w2 ≤
100.
Note that the semi-infinite constraints are one-dimensional, that is, vectors. Because the constraints must be in the form Ki(x,wi) ≤ 0, you need to compute the constraints as
First, write a file that computes the objective function.
function f = myfun(x,s) % Objective function f = sum((x-0.5).^2);
Second, write a file mycon.m
that computes
the nonlinear equality and inequality constraints and the semi-infinite
constraints.
function [c,ceq,K1,K2,s] = mycon(X,s) % Initial sampling interval if isnan(s(1,1)), s = [0.2 0; 0.2 0]; end % Sample set w1 = 1:s(1,1):100; w2 = 1:s(2,1):100; % Semi-infinite constraints K1 = sin(w1*X(1)).*cos(w1*X(2)) - 1/1000*(w1-50).^2 -... sin(w1*X(3))-X(3)-1; K2 = sin(w2*X(2)).*cos(w2*X(1)) - 1/1000*(w2-50).^2 -... sin(w2*X(3))-X(3)-1; % No finite nonlinear constraints c = []; ceq=[]; % Plot a graph of semi-infinite constraints plot(w1,K1,'-',w2,K2,':') title('Semi-infinite constraints') drawnow
Then, invoke an optimization routine.
x0 = [0.5; 0.2; 0.3]; % Starting guess
[x,fval] = fseminf(@myfun,x0,2,@mycon);
After eight iterations, the solution is
x
x = 0.6675 0.3012 0.4022
The function value and the maximum values of the semi-infinite
constraints at the solution x
are
fval
fval = 0.0771
[c,ceq,K1,K2] = mycon(x,NaN); % Initial sampling interval
max(K1)
ans = -0.0077
max(K2)
ans = -0.0812
A plot of the semi-infinite constraints is produced.
This plot shows how peaks in both constraints are on the constraint boundary.
The plot command inside mycon.m
slows down
the computation. Remove this line to improve the speed.