⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heurset.m

📁 一系列好用的用户友好的启发式优化算法
💻 M
📖 第 1 页 / 共 2 页
字号:
        
        % 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 + -