📄 heurset.m
字号:
% loop through all the inputs, and use an "if-else cancer" to
% create the problem structure
for i = 1:2:nargin
option = varargin{i};
value = varargin{i+1};
% if option is not recognized, continue to the next argument
if ~isa(option, 'char')
throwwarning(option, [], [], []);
continue;
end
% General options
if strcmpi(option, 'costfunction')
if ~isa(value, 'function_handle')
throwwarning('costfunction', 'function_handle', value);
continue;
end
problem.costfun = value;
elseif strcmpi(option, 'Lb')
if ~isnumeric(value)
throwwarning('Lb', 'double', value);
continue;
end
problem.lb = value;
elseif strcmpi(option, 'Ub')
if ~isnumeric(value)
throwwarning('Ub', 'double', value);
continue;
end
problem.ub = value;
elseif strcmpi(option, 'Popsize')
if ~isnumeric(value)
throwwarning('Popsize', 'double', value);
continue;
end
problem.popsize = value;
elseif strcmpi(option, 'Grace')
if ~isnumeric(value)
throwwarning('Grace', 'double', value);
continue;
end
problem.grace = value;
elseif strcmpi(option, 'Display')
if ~ischar(value)
throwwarning('Display', 'char', value);
continue;
end
if strcmpi(value, 'off')
problem.display = false;
else
problem.display = true;
end
elseif strcmpi(option, 'MaxFevals')
if ~isnumeric(value)
throwwarning('MaxFevals', 'double', value);
continue;
end
problem.maxfevals = value;
elseif strcmpi(option, 'MaxIters')
if ~isnumeric(value)
throwwarning('MaxIters', 'double', value);
continue;
end
problem.conv.method = 'MaxIters';
problem.conv.value = value;
elseif strcmpi(option, 'BestInPop')
if ~isnumeric(value)
throwwarning('BestInPop', 'double', value);
continue;
end
problem.conv.method = 'exhaustive';
problem.conv.value = value;
elseif strcmpi(option, 'AchieveFval')
if ~isnumeric(value)
throwwarning('AchieveFval', 'double', value);
continue;
end
problem.conv.method = 'AchieveFval';
problem.conv.value = value;
% options specific to Differential Evolution
elseif strcmpi(option, 'Flb')
if ~isnumeric(value)
throwwarning('Flb', 'double', value);
continue;
end
problem.DE.Flb = value;
elseif strcmpi(option, 'Fub')
if ~isnumeric(value)
throwwarning('Fub', 'double', value);
continue;
end
problem.DE.Fub = value;
elseif strcmpi(option, 'crossconst')
if ~isnumeric(value)
throwwarning('crossconst', 'double', value);
continue;
end
problem.DE.crossconst = value;
elseif strcmpi(option, 'n')
if ~isnumeric(value)
throwwarning('n', 'double', value);
continue;
end
problem.DE.n = value;
% options specific to Genetic Algorithm
elseif strcmpi(option, 'MutationProb')
if ~isnumeric(value)
throwwarning('mutationprob', 'double', value);
continue;
end
options.GA.mutprob = value;
elseif strcmpi(option, 'CrossProb')
if ~isnumeric(value)
throwwarning('CrossProb', 'double', value);
continue;
end
options.GA.crossprob = value;
% options specific to Simulated Annealing
elseif strcmpi(option, 'T0')
if ~isnumeric(value)
throwwarning('T0', 'double', value);
continue;
end
problem.SA.T0 = value;
elseif strcmpi(option, 'minT')
if ~isnumeric(value)
throwwarning('minT', 'double', value);
continue;
end
problem.SA.minT = value;
elseif strcmpi(option, 'k')
if ~isnumeric(value)
throwwarning('k', 'double', value);
continue;
end
problem.SA.k = value;
elseif strcmpi(option, 'cool')
if ~isa(value, 'function_handle')
throwwarning('cool', 'function_handle', value);
continue;
end
problem.SA.cool = value;
% options specific to Particle Swarm Optimization
elseif strcmpi(option, 'eta1')
if ~isnumeric(value)
throwwarning('eta1', 'double', value);
continue;
end
problem.PS.eta1 = value;
elseif strcmpi(option, 'eta2')
if ~isnumeric(value)
throwwarning('eta2', 'double', value);
continue;
end
problem.PS.eta2 = value;
elseif strcmpi(option, 'eta3')
if ~isnumeric(value)
throwwarning('eta3', 'double', value);
continue;
end
problem.PS.eta3 = value;
elseif strcmpi(option, 'omega')
if ~isnumeric(value)
throwwarning('omega', 'double', value);
continue;
end
problem.PS.omega = value;
elseif strcmpi(option, 'numneighbors')
if ~isnumeric(value)
throwwarning('numneighbors', 'double', value);
continue;
end
problem.PS.numneigh = value;
% options specific to GODLIKE algorithm
elseif strcmpi(option, 'swapiters')
if ~isnumeric(value)
throwwarning('swapiters', 'double', value);
continue;
end
problem.GODLIKE.swapiters = value;
elseif strcmpi(option, 'algiters')
if ~isnumeric(value)
throwwarning('algiters', 'double', value);
continue;
end
problem.GODLIKE.algiters = value;
elseif strcmpi(option, 'putbackiters')
if ~isnumeric(value)
throwwarning('putbackiters', 'double', value);
continue;
end
problem.GODLIKE.putbackiters = value;
else
error('heurset:incorrectoption', ...
'Unrecognized option: %s', option);
end
end
end
end
function throwwarning(option, required, given, varargin)%#ok
if nargin == 3
provided = whos('given');
provided = provided.class;
warning('heurset:incorrectvalue', ...
['Incorrect type given for option "%s";\n',...
'required type is %s, got %s.\n',...
'Using default...'], option, required, provided);
else
warning('heurset:incorrectoption', ...
'Ignoring option `%s`', num2str(option))
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -