gusucode.com > 十大算法matlab程序说明 > 十大算法matlab程序说明/遗传退火法/checkbound.m

    function [lb,ub,msg,exitflag] = checkbound(lbin,ubin,nvars,verbosity)
%CHECKBOUND Move the initial point within the (valid) bounds.
%   [X,LB,UB,X,FLAG] = CHECKBOUNDS(X0,LB,UB,nvars) checks that the upper and lower
%   bounds are valid (LB <= UB) and the same length as X (pad with -inf/inf
%   if necessary); warn if too long.  Also make LB and UB vectors if not 
%   already. Finally, inf in LB or -inf in UB throws an error.

%   Copyright 2003-2004 The MathWorks, Inc.
%   $Revision: 1.9.6.2 $  $Date: 2004/08/20 19:48:52 $
%   Mary Ann Branch 

msg = [];
exitflag = 1;

% Turn into column vectors
lb = lbin(:); 
ub = ubin(:); 
lenlb = length(lb);
lenub = length(ub);

% Check maximum length
if lenlb > nvars
       warning('gads:CHECKBOUND:lengthOfLowerBound','Length of lower bounds is > length(x); ignoring extra bounds.');
       lb = lb(1:nvars);   
    lenlb = nvars;
elseif lenlb < nvars
    lb = [lb; -inf*ones(nvars-lenlb,1)];
    lenlb = nvars;
end

if lenub > nvars
       warning('gads:CHECKBOUND:lengthOfUpperBound','Length of upper bounds is > length(x); ignoring extra bounds.');
       ub = ub(1:nvars);
    lenub = nvars;
elseif lenub < nvars
    ub = [ub; inf*ones(nvars-lenub,1)];
    lenub = nvars;
end

% Check feasibility of bounds
len = min(lenlb,lenub);
if any( lb( (1:len)' ) > ub( (1:len)' ) )
   count = full(sum(lb>ub));
   if count == 1
      msg=sprintf(['Exiting due to infeasibility:  %i lower bound exceeds the' ...
            ' corresponding upper bound.'],count);
   else
      msg=sprintf(['Exiting due to infeasibility:  %i lower bounds exceed the' ...
            ' corresponding upper bounds.'],count);
   end 
   exitflag = -2;
end
% check if -inf in ub or inf in lb   
if any(eq(ub, -inf)) 
   error('gads:CHECKBOUND:infUpperBound','-Inf detected in upper bound: upper bounds must be > -Inf.');
elseif any(eq(lb,inf))
   error('gads:CHECKBOUND:infLowerBound','+Inf detected in lower bound: lower bounds must be < Inf.');
end