www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoptimoutput/private/pCollectData.m

    function [Data, ColNames] = pCollectData(obj, FreeData, RunIdx, opts)
%PCOLLECTDATA Calculate data and concatenate.
%
%   [DATA, COLNAMES] = PCOLLECTDATA(OBJ, FREEDATA, RUNIDX, OPTS) calculates
%   the output values specified in OPTS for the free values in the cell
%   array FREEDATA, using fixed data from the runs RUNIDX.

%   Copyright 2005-2010 The MathWorks, Inc.


% Put together requested information
Data = {};
for n =1:length(opts.OutputContents)
    if opts.OutputContents(n) == opts.OutputFreeVars
        Data = [Data, FreeData];
    end
    if opts.OutputContents(n) == opts.OutputFixedVars
        Data = [Data, getFixedValues(obj.optimRunner, RunIdx)];
    end
    if opts.OutputContents(n) == opts.OutputObjectives
        Data = [Data, evaluateObjective(obj.optimRunner, FreeData, [], ...
            'FixedValueSource', {'runs', RunIdx})];
    end
    if opts.OutputContents(n) == opts.OutputConstraints
        Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ...
            'FixedValueSource', {'runs', RunIdx})];
    end
    if opts.OutputContents(n) == opts.OutputConstraintLHS
        Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ...
            'FixedValueSource', {'runs', RunIdx}, ...
            'EvaluationType', 'LHSEvaluate')];
    end
    if opts.OutputContents(n) == opts.OutputConstraintRHS
        Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ...
            'FixedValueSource', {'runs', RunIdx}, ...
            'EvaluationType', 'RHSEvaluate')];
    end
    if opts.OutputContents(n) == opts.OutputConstraintFeas
        % Output a logical that indicates whether each constraint is greater
        % than the constraint tolerance
        ConDist = evaluateConstraint(obj.optimRunner, FreeData, [], ...
            'FixedValueSource', {'runs', RunIdx});
        [~,EqConIdx] = getConstraintNames(obj.optimRunner, 'equality');
        ConDist = iBelowTol(ConDist, EqConIdx,getConstraintTol(obj));

        Data = [Data, ConDist];
    end
end

if opts.ConcatenateOutput
    Data = [Data{:}];
end

if nargout>1
    % Generate column header names
    ColNames = pGenerateOutputNames(obj, opts);
end


function ConTol = iBelowTol(ConDist, EqConIdx,Tol)


ConTol = cell(size(ConDist));
% equality constraints
ConTol(EqConIdx) = cellfun(@(x) abs(x)<=Tol, ConDist(EqConIdx), 'UniformOutput', false);
% inequality constraints
ConTol(~EqConIdx) = cellfun(@(x) x<=Tol, ConDist(~EqConIdx), 'UniformOutput', false);