www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoptimrunner/private/pRunv3.m
function [mainOK, mainmsg, OK, freevals, msg, stats,selectedsol] = ... pRunv3(obj, DOWAITBAR, waitH) %PRUNV3 Run the optimization using version 3 interface. % % [MAINOK, MAINMSG, OK, FREEVALS, MSG, STATS] = PRUNV3(OBJ) runs the % optimization assuming the user-function is written for MBC version 3 % optimization interfaces. % Copyright 2006-2010 The MathWorks, Inc. NRuns = length(obj.RunIndices); mainOK = true; mainmsg = ''; % Set up waitbar correctly if DOWAITBAR if NRuns>1 waitH.waitbar.min = 0; waitH.waitbar.max = NRuns; else % turn off waitbar waitH.waitbar.visible = 'off'; end end freevalcell = cell(1, NRuns); OK = cell(1, NRuns); msg = cell(1, NRuns); statcell = cell(1, NRuns); selectedsol = cell(1, NRuns); for n = 1:NRuns obj = nextRun(obj); cos = cgoptimstore(obj); if ~getStopState(cos) if DOWAITBAR && NRuns > 1 waitH.message = sprintf('Computing optimal settings for run %d',... obj.RunIndices(n)); end try % Evaluate function cos = feval(obj.FunctionName, 'evaluate', cos); catch ME mainOK = false; mainmsg = sprintf('%s\n\n%s', ... 'An error occurred while running the optimization function:', ... ME.message); end % Retrieve results [OK{n}, msg{n}, statcell{n}] = getOutputInfo(cos); [freevalcell{n},selectedsol{n}] = getFreeVariables(cos); % Increment waitbar if DOWAITBAR && NRuns > 1 waitH.waitbar.value = n; end else if DOWAITBAR waitH.Message = 'Stopping optimization...'; end OK{n} = -1; msg{n} = 'Optimization terminated by user. The algorithm was not run.'; statcell{n} = []; freevalcell{n} = getInitFreeVal(cos); end if ~mainOK break end end freevals = cell(1, length(obj.FreeVariableIndices)); stats = []; if mainOK % expand solutions to the same size [freevalcell,OK,msg]= pSquareUpMultiSolns(freevalcell,OK,msg); stats = pStatsCell2Struct(statcell); freevals = pRunCell2VarCell(obj, freevalcell); end