home *** CD-ROM | disk | FTP | other *** search
- echo on; clc
- %TUTDEMO Tutorial for Optimization Toolbox.
- %#########################################################################
- %
- % This is a demonstration script-file for the OPTIMIZATION TOOLBOX
- % It closely follows the Tutorial section of the users' guide
- %
- % It consists of: (1) unconstrained optimization example
- % (2) constrained optimization example
- % (3) constrained example using gradients
- % (4) bounded example
- % (5) equality constrained example
- % (6) unconstrained ex. using user-supplied settings
- %
- % All the principles outlined in this demonstration apply to the other
- % routines: attgoal, minimax, leastsq, fsolve.
- %
- % The routines differ from the Tutorial Section examples in the manual
- % only in that M-files for the objective functions have not been coded
- % up. Instead the expression form of the syntax has been
- % used where functions to be minimized are expressed as MATLAB string
- % variables.
- %
- %##########################################################################
- %
- pause % Strike any key to continue (Note: use Ctrl-C to abort)
- clc
-
- %###########################################################################
- % DEMO 1: UNCONSTRAINED PROBLEM
- %---------------------------------------------------------------------------
- %
- % Consider initially the problem of finding a minimum to the function:
- %
- % 2 2
- % f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- %---------------------------------------------------------------------------
- pause % Strike any key to continue
-
-
- % Take a guess at the solution
-
- X0=[-1, 1];
-
- pause % Strike any key to continue
-
- options=[]; % Use default parameters
-
- pause % Strike any key to start the optimization
-
- [x,options]=fminu('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)', X0, options);
-
-
- % The optimizer has found a solution at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % The total number of function evaluations was:
- options(10)
-
- % Note: by entering the expression explicitly in a string using the
- % variable 'x' we avoid having to write an M-file.
-
- pause % Strike any key for next demo
- clc
- %%###########################################################################
- % DEMO 2: CONSTRAINED PROBLEM
- %---------------------------------------------------------------------------
- %
- % Consider the above problem with two additional constraints:
- %
- % 2 2
- % minimize f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- % subject to: 1.5 + x(1).x(2) -x(1) -x(2) <=0
- % -x(1).x(2) <= 10
- %
- %-------------------------------------------------------------------------
- pause % Strike any key to continue
-
- % Make a guess at the solution:
-
- X0=[-1, 1];
-
- options=[]; % Use default parameters
-
- pause % Strike any key to start optimization:
-
- [x,options]=constr(['f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);',...
- 'g(1)=1.5+x(1)*x(2)-x(1)-x(2);',...
- 'g(2)=-x(1)*x(2)-10;'], X0, options);
-
-
- % A solution to this problem has been found at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % Both the constraints are active at the solution:
- g =[ 1.5+x(1)*x(2)-x(1)-x(2)
- -x(1)*x(2)-10 ]
- % The total number of function evaluations was:
- options(10)
-
- pause % Strike any key for next demo
- clc
-
- %############################################################################
- % DEMO 3: BOUNDED EXAMPLE
- %----------------------------------------------------------------------------
- %
- % Consider the above problem with additional bound constraints:
- %
- % 2 2
- % minimize f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- % subject to: 1.5 + x(1).x(2) -x(1) -x(2) <=0
- % -x(1).x(2) <= 10
- %
- % and x(1) >=0
- % x(2) >=0
- %
- %----------------------------------------------------------------------------
-
-
- pause % Strike any key to continue
-
- % Again, make a guess at the solution:
-
- X0=[-1, 1];
-
- pause % Strike any key to continue
-
- % This time we will use the bounded syntax:
- % X=CONSTR(`FUN', X0, OPTIONS, VLB, VUB)
-
- VLB=zeros(1,2); % Lower bounds X>0
- VUB=[]; % No upper bounds
-
- pause % Strike any key to start the optimization
-
- [x,options]=constr(['f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);',...
- 'g(1)=1.5+x(1)*x(2)-x(1)-x(2);',...
- 'g(2)=-x(1)*x(2)-10;'], X0, options, VLB, VUB);
-
- % The solution to this problem has been found at:
- x
- % The function value at the solution is:
- options(8)
- % The constraint values at the solution are:
- g =[ 1.5+x(1)*x(2)-x(1)-x(2)
- -x(1)*x(2)-10 ]
- % The total number of function evaluations was:
- options(10)
-
- pause % Strike any key for next demo
- clc
- %%###########################################################################
- % DEMO 4: USER-SUPPLIED GRADIENTS
- %----------------------------------------------------------------------------
- % The above problem can be solved more efficiently and accurately if gradients
- % are supplied by the user. This demo shows how this may be performed.
- %
- % Again the problem is:
- %
- % 2 2
- % minimize f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- % subject to: 1.5 + x(1).x(2) -x(1) -x(2) <=0
- % -x(1).x(2) <= 10
- %
- %-------------------------------------------------------------------------
-
- pause % Strike any key to continue
-
- % Make a guess at the solution:
-
- X0=[-1, 1];
-
-
- options=[]; % Use default parameters
-
- pause % Strike any key to enter function and constraints into a string:
-
-
- fun = [
- % Objective Function and constraints
- 'f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);', ...
- 'g(1)=1.5+x(1)*x(2)-x(1)-x(2);',... %Constraints
- 'g(2)=-x(1)*x(2)-10;'];
-
-
- pause % Strike any key to load the partial derivatives into a string:
-
- jacob = ['t= exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);',...
- 'gf=[t+4*exp(x(1))*(2*x(1)+x(2));',...
- '4*exp(x(1))*(x(1)+x(2)+0.5)];',...
- 'gg = [ x(2)-1, -x(2);',...
- 'x(1)-1, -x(1)];'];
-
-
- pause % Strike any key to start the optimization
-
- [x,options]=constr(fun, X0, options, [], [], jacob);
-
- % As before the solution to this problem has been found at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % Both the constraints are active at the solution:
- g =[ 1.5+x(1)*x(2)-x(1)-x(2)
- -x(1)*x(2)-10 ]
- % The total number of function evaluations was:
- options(10)
-
- pause % Strike any key for next demo
- clc
- %############################################################################
- % DEMO 5: EQUALITY CONSTRAINED EXAMPLE
- %---------------------------------------------------------------------------
- %
- % Consider the above problem with an additional equality constraint
- %
- % 2 2
- % minimize f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- % subject to: x(1)+ x(2) = 0
- % 1.5 + x(1).x(2) -x(1) -x(2) <=0
- % -x(1).x(2) <= 0
- %
- %-------------------------------------------------------------------------
-
-
- % Again, make a guess at the solution:
-
- X0=[-1, 1];
-
- pause % Strike any key to continue
-
- % This time we will indicate the number of equality constraints
- % by setting options(13) to the number of constraints.
- % The equality constraints must be contained the first few elements of g
-
- options(13)=1; % One equality constraint
-
- pause % Strike any key to start the optimization
-
- [x,options]=constr(['f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);',...
- 'g(1)=x(1)+x(2);',...
- 'g(2)=1.5+x(1)*x(2)-x(1)-x(2);',...
- 'g(3)=-x(1)*x(2)-10;'], X0, options);
-
- % The solution to this problem has been found at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % The constraint values at the solution are:
- g =[ x(1)+x(2)
- 1.5+x(1)*x(2)-x(1)-x(2)
- -x(1)*x(2)-10 ]
- % The total number of function evaluations was:
- options(10)
-
- pause % Strike any key for next demo
- clc
-
-
- %############################################################################
- % DEMO 6: CHANGING THE DEFAULT SETTINGS
- %---------------------------------------------------------------------------
- %
- % Consider the original unconstrained problem
- %
- % 2 2
- % minimize f(x)=exp(x(1)) .(4x(1) + 2x(2) + 4x(1)x(2) + 1
- %
- % this time we will solve it more accurately by overriding the
- % default termination criteria (OPTIONS(2) and OPTIONS(3)).
- %-------------------------------------------------------------------------
-
-
- pause % Strike any key to continue
-
- % Again, make a guess at the solution:
-
- X0=[-1, 1];
-
- pause % Strike any key to continue
-
- % Override the default termination criteria:
- options(2)=1e-8; % Termination tolerance on X
- options(3)=1e-8; % Termination tolerance on F
-
- pause % Strike any key to start the optimization
-
- [x,options]=fminu('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)', X0, options);
-
- % The optimizer has found a solution at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % The total number of function evaluations was:
- options(10)
-
-
- % Note: warning messages may be displayed because of problems
- % in the calculation of finite difference gradients at the
- % solution point. They are an indication that tolerances are overly
- % stringent, however, the optimizer always continues to make steps
- % towards the solution.
-
- pause % Strike any key to continue
-
- % If we want a tabular display of each iteration we can set options(1)=1
- % as follows:
-
- options=1; % Set display parameter to on, the others to default.
-
- pause % Strike any key to start the optimization
-
- X0=[-1, 1];
- [x,options]=fminu('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)', X0, options);
-
- % The optimizer has found a solution at:
- x
- % The function value at the solution is:
- options(8)
- pause % Strike any key to continue
- % The total number of function evaluations was:
- options(10)
-
- % At each major iteration the table displayed consists of:
- % - number of function values
- % - function value
- % - step length used in the line search
- % - gradient in the direction of search
- % - line search procedures
- %
-
- %------------------------------Demo End-----------------------------
- pause % Strike any key for main menu
- echo off
-