?? fgoalattain.m
字號(hào):
function [x,FVAL,ATTAINFACTOR,EXITFLAG,OUTPUT,LAMBDA] = fgoalattain(FUN,x,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB,NONLCON,options,varargin)
%FGOALATTAIN Solves the multi-objective goal attainment optimization problem.
%
% X = FGOALATTAIN(FUN,X0,GOAL,WEIGHT)
% tries to make the objective functions (F) supplied by the function FUN
% attain the goals (GOAL) by varying X. The goals are weighted according to
% WEIGHT. In doing so the following nonlinear programming problem is solved:
% min { LAMBDA : F(X)-WEIGHT.*LAMBDA<=GOAL }
% X,LAMBDA
%
% FUN accepts input X and returns a vector (matrix) of function values F
% evaluated at X. X0 may be a scalar, vector, or matrix.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B) solves the goal attainment problem
% subject to the linear inequalities A*X <= B.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq) solves the goal attainment problem
% subject to the linear equalities Aeq*X = Beq as well.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB) defines a set of lower
% and upper bounds on the design variables, X, so that the solution is in
% the range LB <= X <= UB. Use empty matrices for LB and U if no bounds
% exist. Set LB(i) = -Inf if X(i) is unbounded below; set UB(i) = Inf if X(i) is
% unbounded above.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB,NONLCON) subjects the
% goal attainment problem to the constraints defined in NONLCON (usually an
% M-file: NONLCON.m). The function NONLCON should return the vectors
% C and Ceq, representing the nonlinear inequalities and equalities respectively,
% when called with feval: [C, Ceq] = feval(NONLCON,X). FGOALATTAIN
% optimizes such that C(X)<=0 and Ceq(X)=0.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS) minimizes the
% with default optimization parameters replaced by values in the structure OPTIONS,
% an argument created with the OPTIMSET function. See OPTIMSET for details. Used
% options are Display, TolX, TolFun, TolCon, DerivativeCheck, GradObj, GradConstr,
% MaxFunEvals, MaxIter, MeritFunction, GoalsExactAchieve, Diagnostics, DiffMinChange,
% and DiffMaxChange. Use the GradObj option to specify that FUN may be called with
% two output arguments where the second, G, is the partial derivatives of the
% function df/dX, at the point X: [F,G] = feval(FUN,X). Use the GradConstr
% option to specify that NONLCON may be called with four output arguments:
% [C,Ceq,GC,GCeq] = feval(NONLCON,X) where GC is the partial derivatives of the
% constraint vector of inequalities C an GCeq is the partial derivatives of the
% constraint vector of equalities Ceq. Use OPTIONS = [] as a place holder if
% no options are set.
%
% X=FGOALATTAIN(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS,P1,P2,...)
% passes the problem-dependent parameters P1,P2,... directly to the
% functions FUN and NONLCON: feval(FUN,X,P1,P2,...) and feval(NONLCON,X,P1,P2,...).
% Pass empty matrices for A, B, Aeq, Beq, LB, UB, NONLCON and OPTIONS to use the
% default values.
%
% [X,FVAL]=FGOALATTAIN(FUN,X0,...) returns the value of the objective
% function FUN at the solution X.
%
% [X,FVAL,ATTAINFACTOR]=FGOALATTAIN(FUN,X0,...) returns the attainment factor
% at the solution X. If ATTAINFACTOR is negative, the goals have been over-
% achieved; if ATTAINFACTOR is positive, the goals have been under-achieved.
%
% [X,FVAL,ATTAINFACTOR,EXITFLAG]=FGOALATTAIN(FUN,X0,...) returns a string
% EXITFLAG that describes the exit condition of FGOALATTAIN.
% If EXITFLAG is:
% > 0 then FGOALATTAIN converged to a solution X.
% 0 then the maximum number of function evaluations was reached.
% < 0 then FGOALATTAIN did not converge to a solution.
%
% [X,FVAL,ATTAINFACTOR,EXITFLAG,OUTPUT]=FGOALATTAIN(FUN,X0,...) returns a structure
% OUTPUT with the number of iterations taken in OUTPUT.iterations, the number
% of function evaluations in OUTPUT.funcCount, and the algorithm used in OUTPUT.algorithm.
%
% [X,FVAL,ATTAINFACTOR,EXITFLAG,OUTPUT,LAMBDA]=FGOALATTAIN(FUN,X0,...) returns
% the Lagrange multiplier at the solution X: LAMBDA.lower for LB, LAMBDA.upper
% for UB, LAMBDA.ineqlin is for the linear inequalities, LAMBDA.eqlin is for
% the linear equalities, LAMBDA.ineqnonlin is for the nonlinear inequalities,
% and LAMBDA.eqnonlin is for the nonlinear equalities.
%
% For more details, type the M-file FGOALATTAIN.M.
%
% See also OPTIMSET, OPTIMGET.
% Copyright 1990-2002 The MathWorks, Inc.
% $Revision: 1.22 $ $Date: 2002/03/12 20:36:21 $
% Andy Grace 7-9-90.
% ---------------------More Details---------------------------
% [x]=fgoalattain(F,x,GOAL,WEIGHT,[],[],[],[],[],[],[],OPTIONS)
% Solves the goal attainment problem where:
%
% X Is a set of design parameters which can be varied.
% F Is a set of objectives which are dependent on X.
% GOAL Set of design goals. The optimizer will try to make
% F<GOAL, F=GOAL, or F>GOAL depending on the formulation.
% WEIGHT Set of weighting parameters which determine the
% relative under or over achievement of the objectives.
% Notes:
% 1.Setting WEIGHT=abs(GOAL) will try to make the objectives
% less than the goals resulting in roughly the same
% percentage under or over achievement of the goals.
% Note: use WEIGHT 1 for GOALS that are 0 (see Note 3 below).
% 2. Setting WEIGHT=-abs(GOAL) will try to make the objectives
% greater then the goals resulting in roughly the same percentage
% under- or over-achievement in the goals.
% Note: use WEIGHT 1 for GOALS that are 0 (see Note 3 below).
% 3. Setting WEIGHT(i)=0 indicates a hard constraint.
% i.e. F<=GOAL.
% OPTIONS.GoalsExactAchieve indicates the number of objectives for which it is
% required for the objectives (F) to equal the goals (GOAL).
% Such objectives should be partitioned into the first few
% elements of F.
% The remaining parameters determine tolerance settings.
%
%
%
defaultopt = struct('Display','final',...
'TolX',1e-6,'TolFun',1e-6,'TolCon',1e-6,'DerivativeCheck','off',...
'Diagnostics','off',...
'GradObj','off','GradConstr','off','MaxFunEvals','100*numberOfVariables',...
'MaxIter',400,...
'MaxSQPIter',Inf,...
'Hessian','off','LargeScale','off',...
'DiffMaxChange',1e-1,'DiffMinChange',1e-8, 'MeritFunction','multiobj',...
'GoalsExactAchieve', 0);
% If just 'defaults' passed in, return the default options in X
if nargin==1 & nargout <= 1 & isequal(FUN,'defaults')
x = defaultopt;
return
end
caller='fgoalattain';
if nargin < 12, options = [];
if nargin < 11, NONLCON = [];
if nargin < 10, UB = [];
if nargin < 9, LB = [];
if nargin < 8, Beq = [];
if nargin < 7, Aeq = [];
if nargin < 6, B = [];
if nargin < 5, A = [];
if nargin < 4, error('fgoalattain requires four input arguments');
end,end,end,end,end,end,end,end,end
xnew=[x(:);0];
numberOfVariablesplus1 = length(xnew);
numberOfVariables = numberOfVariablesplus1 - 1;
WEIGHT = WEIGHT(:);
GOAL = GOAL(:);
diagnostics = isequal(optimget(options,'Diagnostics',defaultopt,'fast'),'on');
switch optimget(options,'Display',defaultopt,'fast')
case {'off','none'}
verbosity = 0;
case 'iter'
verbosity = 2;
case 'final'
verbosity = 1;
otherwise
verbosity = 1;
end
% Set to column vectors
B = B(:);
Beq = Beq(:);
[xnew(1:numberOfVariables),l,u,msg] = checkbounds(xnew(1:numberOfVariables),LB,UB,numberOfVariables);
if ~isempty(msg)
EXITFLAG = -1;
[FVAL,ATTAINFACTOR,OUTPUT,LAMBDA] = deal([]);
x(:) = xnew(1:numberOfVariables);
if verbosity > 0
disp(msg)
end
return
end
neqgoals = optimget(options, 'GoalsExactAchieve',defaultopt,'fast');
% meritFunctionType is 1 unless changed by user to fmincon merit function;
% formerly options(7)
% 0 uses the fmincon single-objective merit and Hess; 1 is the default
meritFunctionType = strcmp(optimget(options,'MeritFunction',defaultopt,'fast'),'multiobj');
lenVarIn = length(varargin);
% goalgra and goalfun also take: neqgoals,funfcn,gradfcn,WEIGHT,GOAL,x
goalargs = 6;
gradflag = strcmp(optimget(options,'GradObj',defaultopt,'fast'),'on');
gradconstflag = strcmp(optimget(options,'GradConstr',defaultopt,'fast'),'on');
hessflag = strcmp(optimget(options,'Hessian',defaultopt,'fast'),'on');
if hessflag
warning('FGOALATTAIN does not use user-supplied Hessian.')
hessflag = 0;
end
if isempty(NONLCON)
constflag = 0;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -