Matlab中的优化工具包都能求解哪些类型的优化问题?求解的函数是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab中的优化工具包都能求解哪些类型的优化问题?求解的函数是啥?相关的知识,希望对你有一定的参考价值。

参考技术A 工具箱函数
常用函数:

一元函数极小值
X=fminbnd(‘F’,x1,x2)

无约束极小值
X=fminunc(‘F’,X0)
X=fminsearch(‘F’,X0)

线性规划
X=linprog(c,A,b)

0-1整数规划
X=bintprog(F)

二次规划
X=quadprog(H,c,A,b)

约束极小值(非线性规划)
X=fmincon(‘FG’,X0)

非线性最小二乘
X=lsqnonlin(F,X0)

目标达到问题
X=fgoalattain(‘F’,x,goal,w)

极小极大问题
X=fminimax(‘FG’,x0)

输入参数中可以用options,用于所有函数,其中包括有一下参数。
(1) Display:结果显示方式,off不显示,iter显示每次迭代的信息,final为最终结果,notify只有当求解不收敛的时候才显示结果。
(2) MaxFunEvals:允许函数计算的最大次数,取值为正整数。
(3) MaxIter:允许迭代的最大次数,正整数。
(4) TolFun:函数值(计算结果)精度,正整数。
(5) TolX:自变量的精度,正整数。
而且可以用函数optimset创建和修改。
模型输入时需要注意问题:
(1) 目标函数最小化;
(2) 约束非正;
(3) 避免使用全局变量。

优化求解基于PESA—II实现多目标优化求解matlab源码

一、简介

基于范围选择的进化多目标优化PESA-II

摘要:这篇文章对进化多目标优化算法提出了一个新的选择技术—目标空间中的选择单元是一个超立方体。在这项技术中,与给每个个体分配一个选择适应度不同的是,适应度值被分配给被当前至少一个接近帕累托前沿的个体占据的当前目标空间中的超立方体。然后从这块空间中随机选择个体作为结果。

第二部分简要介绍现代进化多目标算法中的选择方案以及基于区域选择的概念。第三部分算法测试;第五部分描述结果,第六部分得出结论。

图1将会解释在当前多目标进化算法中的主要选择方案。对于在目标空间中假定的两个目标问题,我们在图中画出了许多点,想象目标是沿着两个轴线的最小化问题。目标空间被分割成许多正方形,通常情况下我们的超立方体是在高维问题中的。在PAES和PESA中,算法都被分割成目标空间中的一小部分到超长方体。

在PESA中超立方体的相关占据信息被用作选择方案。一个持续只包含非支配解的存档,作为算法的当前接近帕累托前沿,只从存档中选择。每个个体的选择适应度仅仅只是其它解的数量(个体占据相同的超立方体),被叫做压缩因子。然后用二项锦标赛选择方法朝压缩因子小的方向选择父代双亲。

在PAES中,选择是不同的事情,PAES相当于是一个局部搜索方法。在任何时候都只有一个当前解,因此它常常被选作突变的父代。然而,当变体和当前解都是非支配的时候,就得决定将谁看作新的当前解(在下一次的迭代中直接被选择的父代)了。我们指出提出的目的,PESA利用了超立方体占据。

SPEA中的选择方法是通过强度帕累托方案产生的。这是一种给基于当前种群中个体的数量的个体分配选择适应度的方法。在SPEA中有两个种群一个内部一个外部。外部种群仅包含非支配个体,内部种群包括通过遗传算子产生的最后的子代,可能包含被外部种群中支配的个体。图一可能代表在一次运行中的组合种群。点X是非支配的,因此是在外部种群里边,它支配了外部种群中的两个个体(成员)。对非支配个体的强度测量仅仅是它包含的内部种群中的个体数目。而内部种群成员的强度测量是通过包含它们的外部种群中的个体强度和推导出的。图1中Y可能比X有一个更好的选择强度。

NSGA-II使用了比其它方案表现良好的不同选择方案,既高效又表现良好。通过朝高隔离值靠近的。图1中Y比A的隔离值高。

基于区域的选择提供了一个可选择的,前面的目标是更直接地完成。基于范围的选择:选择单元是一个超立方体而不是一个个体。选择适应度是通过超长方体推导出的,选择任意的标准选择方法,用遗传算子选择的最终结果个体是从超立方体中随机选择的。例如图1中,超立方体区域C要比B有更好的选择适应度。

下面简要分析下为什么基于区域的选择要比基于个体的选择要好。假设我们采用二进制锦标赛来根据选择适应度选择个体。无论这些选择适应度是否是基于个体的还是基于超立方体的。首先要考虑的特殊案例是占据当前靠近帕累托前沿近似值的超长方体只有两个,其中一个超立方体被9个个体占据,另一个被一个个体占据。那么这个一个个体就是我们认为最被隔离的那一个。在基于个体选择的方案中,使用二进制锦标赛选择,那我们最好的个体(也就是最被隔离的那个)被选择的概率是1-(9/10)^2=0.19.那么我们选择过度拥挤的那9个个体的概率就是0.81.这似乎没有朝产生低拥挤区域提供合适的高偏移。然而,在基于区域的选择中,被选择的单元是两个被占据的超立方体。那么最不被占据的区域被选择的概率是1-(1/2) ^ 2=0.75,那么选择更拥挤个体的概率就是0.25.由此可见,基于个体选择的方案我们更可能选择不被隔离的个体,而基于区域的选择方案我们更可能选择被隔离的个体。

那么更一般地,我们仍然关注选择一个最被隔离的个体的相关概率,然后继续使用二进制锦标赛的选择方案。假设帕累托前沿的近似值有b个被占据的超立方体,在第i个超立方体中有ni个个体,所有被占据的超立方体的个体总数为P。不失一般性,假设现在一个超立方体j有最大的bi,另一个超立方体有最小的ni,最不拥挤和最拥挤的超立方体中的个体数分别是l和m。

当使用基于个体的选择时,从最不拥挤的超立方体中选择一个个体的概率是1-((P-l)/P)^2.同理,最拥挤的超立方体中的个体被选中的概率是(m/P) ^2
当m高于l时,选择拥挤区域的个体的可能性就较高了,看起来不太合理。
相比之下,基于区域的选择方式相应的比率就是2b-1.当超过1个被占据的超长方体时,一般不会小于1,至少是3.也就是说选择不拥挤区域的概率高。

当锦标赛的规模很大时,收敛非常快,而且种群间的个体分布非常平坦,在这种情况下基于个体的选择方式在选择最不拥挤的区域选择个体的可能性就比较小了。

二、代码

%
%

clc;
clear;
close all;

%% Problem Definition

CostFunction = @(x) ZDT(x);

nVar = 3;             % Number of Decision Variables

VarSize = [nVar 1];   % Decision Variables Matrix Size

VarMin = 0;           % Decision Varibales Lower Bound
VarMax = 1;           % Decision Varibales Upper Bound

nObj = numel(CostFunction(unifrnd(VarMin, VarMax, VarSize)));   % Number of Objectives


%% PESA-II Settings

MaxIt = 100;      % Maximum Number of Iterations

nPop = 50;        % Population Size

nArchive = 50;    % Archive Size

nGrid = 7;        % Number of Grids per Dimension

InflationFactor = 0.1;    % Grid Inflation

beta_deletion = 1;
beta_selection = 2;

pCrossover = 0.5;
nCrossover = round(pCrossover*nPop/2)*2;

pMutation = 1-pCrossover;
nMutation = nPop-nCrossover;

crossover_params.gamma = 0.15;
crossover_params.VarMin = VarMin;
crossover_params.VarMax = VarMax;

mutation_params.h = 0.3;
mutation_params.VarMin = VarMin;
mutation_params.VarMax = VarMax;


%% Initialization

empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.IsDominated = [];
empty_individual.GridIndex = [];

pop = repmat(empty_individual, nPop, 1);

for i = 1:nPop
    pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
    pop(i).Cost = CostFunction(pop(i).Position);
end

archive = [];

%% Main Loop

for it = 1:MaxIt
   
    pop = DetermineDomination(pop);
    
    ndpop = pop(~[pop.IsDominated]);
    
    archive = [archive
             ndpop]; %#ok
    
    archive = DetermineDomination(archive);
    
    archive = archive(~[archive.IsDominated]);

    [archive, grid] = CreateGrid(archive, nGrid, InflationFactor);
    
    if numel(archive)>nArchive
        E = numel(archive)-nArchive;
        archive = TruncatePopulation(archive, grid, E, beta_deletion);
        [archive, grid] = CreateGrid(archive, nGrid, InflationFactor);
    end
    
    PF = archive;
    
    figure(1);
    PlotCosts(PF);
    pause(0.01);
    
    disp(['Iteration ' num2str(it) ': Number of PF Members = ' num2str(numel(PF))]);
    
    if it >= MaxIt
        break;
    end
    
    % Crossover
    popc = repmat(empty_individual, nCrossover/2, 2);
    for c = 1:nCrossover/2
        
        p1 = SelectFromPopulation(archive, grid, beta_selection);
        p2 = SelectFromPopulation(archive, grid, beta_selection);
        
        [popc(c, 1).Position, popc(c, 2).Position] = Crossover(p1.Position, ...
                                                           p2.Position, ...
                                                           crossover_params);
        
        popc(c, 1).Cost = CostFunction(popc(c, 1).Position);
        
        popc(c, 2).Cost = CostFunction(popc(c, 2).Position);
        
    end
    popc = popc(:);
    
    % Mutation
    popm = repmat(empty_individual, nMutation, 1);
    for m = 1:nMutation
        
        p = SelectFromPopulation(archive, grid, beta_selection);
        
        popm(m).Position = Mutate(p.Position, mutation_params);
        
        popm(m).Cost = CostFunction(popm(m).Position);
        
    end
    
    pop = [popc
         popm];
         
end

%% Results

disp(' ');

PFC = [PF.Cost];
for j = 1:size(PFC, 1)
    
    disp(['Objective #' num2str(j) ':']);
    disp(['      Min = ' num2str(min(PFC(j, :)))]);
    disp(['      Max = ' num2str(max(PFC(j, :)))]);
    disp(['    Range = ' num2str(max(PFC(j, :))-min(PFC(j, :)))]);
    disp(['    St.D. = ' num2str(std(PFC(j, :)))]);
    disp(['     Mean = ' num2str(mean(PFC(j, :)))]);
    disp(' ');
    
end

代码下载https://www.cnblogs.com/ttmatlab/p/14882966.html

以上是关于Matlab中的优化工具包都能求解哪些类型的优化问题?求解的函数是啥?的主要内容,如果未能解决你的问题,请参考以下文章

优化求解多目标智能算法优化求解matlab工具箱

优化调度基于matlab帝国企鹅算法求解航空调度优化问题含Matlab源码 YXS001期

优化调度基于matlab帝国企鹅算法求解航空调度优化问题含Matlab源码 YXS001期

优化求解基于PESA—II实现多目标优化求解matlab源码

优化调度基于matlab一致性算法求解电力系统分布式经济调度优化问题含Matlab源码 770期

优化选址基于matlab帝国企鹅算法求解工厂-中心-需求点三级选址问题含Matlab源码 2081期