精华内容
下载资源
问答
  • 另外,很多具体程序中缺乏对约束问题进行考虑,本程序可以针对约束问题给出结果以查看约束处理情况,另外还可以选择是否显示离线在线性能等,再者,本工具包里包含有全局算法局部算法,试验后发现,局部算法的...
  • 内容:常见的局部优化和全局优化算法。 时间:2019.01.05 梯度下降,牛顿法,共轭梯度法(Python + Matlab),找到空间表面的极值点(3D) 温馨提示: 梯度下降算法速度慢,迭代次数大,最终结果是近似的。 牛顿法...
  • 针对基本蝴蝶优化算法中存在的易陷入局部最优值、收敛速度慢等问题,提出一种全局优化的蝴蝶算法,引入limit阈值来限定蝴蝶优化算法陷入局部最优解的次数,从而改变算法易陷入早熟的问题,结合单纯形策略优化迭代...
  • 摘要:在求解全局优化问题时,通常免疫算法、进化扩散算法分别在局部搜索全局搜索方面表现较弱。针对这一情况,基于免疫进化扩散算法,提出了一个免疫-进化扩散算法。该算法结合了免疫进化扩散两种算法的优点,一...
  • matlab局部最优和全局最优算法

    万次阅读 多人点赞 2016-03-03 14:06:10
    在实际的工作生活过程中...优化问题一般分为局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。 函数局部最小点是那种它的函数值

    转自http://blog.sciencenet.cn/blog-922140-850587.html

    在实际的工作和生活过程中,优化问题无处不在,比如资源如何分配效益最高,拟合问题,最小最大值问题等等。优化问题一般分为局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。

    • 函数局部最小点是那种它的函数值小于或等于附近点的点。但是有可能大于较远距离的点。

    • 全局最小点是那种它的函数值小于或等于所有的可行点。

    matlab中的提供的传统优化工具箱(Optimization Tool),能实现局部最优,但要得全局最优,则要用全局最优化算法(Global  Optimization Tool ),主要包括:
    1. GlobalSearch) 全局搜索和(MultiStart)多起点方法产生若干起始点,然后它们用局部求解器去找到起始点吸引盆处的最优点。

    2. ga  遗传算法用一组起始点(称为种群),通过迭代从种群中产生更好的点,只要初始种群覆盖几个盆,GA就能检查几个盆。


    3. simulannealbnd)模拟退火完成一个随机搜索,通常,模拟退火算法接受一个点,只要这个点比前面那个好,它也偶而接受一个比较糟的点,目的是转向不同的盆。

    4. patternsearch )模式搜索算法在接受一个点之前要看看其附近的一组点。假如附近的某些点属于不同的盆,模式搜索算法本质上时同时搜索若干个盆

    下面我就一些具体例子,来说明各种优化方法:
    (1)先看一个求最小值的普通优化问题
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    %%目标函数
    f = @(x) x.*sin(x) + x.*cos(2.*x);
    %% 的取值范围
    lb = 0;
    ub = 10;
    %% 寻找最小值和绘图
    x0 = [0 1 3 6 8 10];
    hf = figure;
    for i=1:6
       x(i) = fmincon(f,x0(i),[],[],[],[],lb,ub,[],...
                      optimset('Algorithm','SQP','Disp','none'));
       subplot(2,3,i)
       ezplot(f,[lb ub]);
       hold on
       plot(x0(i),f(x0(i)),'k+')
       plot(x(i),f(x(i)),'ro')
       hold off
       title(['Starting at ',num2str(x0(i))])
       if i == 1 || i == 4
           ylabel('x sin(x) + x cos(2 x)')
       end
    end
    可以看出,初值x0不同,得到的结果截然不同,这说明这种求解器,能寻找局部最优,但不一定是全局最优,在起点为8时,取得全局最优。

    我们换一种求解器:fminbound,这种求解器不需要给点初值。

    1
    2
    3
    4
    5
    6
    7
    8
    x2 = fminbnd(f,lb,ub);
    figure
    ezplot(f,[lb ub]);
    hold on
    plot(x2,f(x2),'ro')
    hold off
    ylabel('x sin(x) + x cos(2 x)')
    title({'Solution using fminbnd.','Required no starting point!'})


    现在我们尝试全局最优的方法:GlobalSearch

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % Leason Learned: Use the appropriate solver for your problem type!
    %% But what if |fmincon| was the only choice?
    % Use globalSearch or MultiStart
    problem = createOptimProblem('fmincon','objective',f,'x0',x0(1),'lb',lb,...
                'ub',ub,'options',optimset('Algorithm','SQP','Disp','none'));
    gs = GlobalSearch;
    xgs = run(gs,problem);
    figure
    ezplot(f,[lb ub]);
    hold on
    plot(xgs,f(xgs),'ro')
    hold off
    ylabel('x sin(x) + x cos(2 x)')
    title('Solution using globalSearch.')


    因此全局最优的方法能够获取全局最优。

    (2)再看一个线性拟合的问题:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    close all, clear all, clc
    %% Pharmacokinetic Data
    t = [ 3.92,  7.93, 11.89, 23.90, 47.87, 71.91, 93.85, 117.84 ]              %#ok<*NOPTS>
    c = [0.163, 0.679, 0.679, 0.388, 0.183, 0.125, 0.086, 0.0624 ]
     
    plot(t,c,'o'), xlabel('t'), ylabel('c')
     
    %% 3 Compartment Model
    model = @(b,t) b(1)*exp(-b(4)*t) + b(2)*exp(-b(5)*t) + b(3)*exp(-b(6)*t)
     
    %% Define Optimization Problem
     
    problem = createOptimProblem('lsqcurvefit', ...
                                'objective', model, ...
                                'xdata', t, 'ydata', c, ...
                                'x0',ones(1,6),...
                                'lb', [-10 -10 -10  0   0   0 ],...
                                'ub', [ 10  10  10 0.5 0.5 0.5], ...
                                'options',optimset('OutputFcn',...
                                @curvefittingPlotIterates))
    %% solve
    b = lsqcurvefit(problem)  

    结果:最小二乘拟合结果误差较大


    现在我们尝试全局最优方法:MultiStart
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %% Multistart
    ms = MultiStart                                                            
    [b,fval,exitflag,output,solutions] = run(ms, problem, 50)                   %#ok<*NASGU,*ASGLU>
     
    %%
    curvefittingPlotIterates(solutions)
     
    %%
    problem.options.OutputFcn = {};
    tic, [b,fval,exitflag,output,solutions] = run(ms, problem, 100), toc  %计算算法的时间


    可以看出全局优化结果较好,误差较小。
    这种算法的运行时间 :Elapsed time is 6.139324 seconds.

    现在我使用并行计算的方式解决:
    1
    2
    3
    4
    5
    %% Parallel Version
    matlabpool open 2 %开启两个matlab并行计算
    ms.UseParallel = 'always' %开启并行计算
    tic, [bp,fvalp,exitflagp,outputp,solutionsp] = run(ms, problem, 100); toc
    matlabpool close
    结果:14 out of 100 local solver runs converged with a positive local solver exit flag.
    Elapsed time is 4.358762 seconds.
    Sending a stop signal to all the labs ... stopped.
    可以看出,运行时间减少,提高了效率。

    (3)再看一个寻找最小值的问题
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    %% Objective Function
    % We wish find the minimum of the |peaks| function
    clear all, close all, clc
    peaks
     
    %% Nonlinear Constraint Function
    % Subject to a nonlinear constraint defined by a circular region of radius
    % three around the origin
    type circularConstraint
     
    %% Define Optimization Problem
    problem = createOptimProblem('fmincon',...
                                'objective',@(x) peaks(x(1),x(2)), ...
                                'nonlcon',@circularConstraint,...
                                'x0',[-1 -1],...
                                'lb',[-3 -3],...
                                'ub',[3 3],...
                                'options',optimset('OutputFcn',...
                                                   @peaksPlotIterates))
                                 
    %% Run the solver |fmincon| from the inital point
    % We can see the solution is not the global minimum
    [x,f] = fmincon(problem)    


    这种方法只能寻找局部最优。
    现在用全局优化算法:
    1
    2
    3
    4
    5
    6
    7
    %% Use |MultiStart| to Find the Global Minimum
    % Define the multistart solver
    close all
    ms = MultiStart %这里可以换成GlobalSearch
    %% Run |Multistart|
    % Well use 5 starting points
    [x,f,exitflag,output,solutions] = run(ms, problem, 5)





    (4)再举一个模拟退火即模式搜索的算法 :
      [x fval] = simulannealbnd(@objfun,x0,lb,ub,options)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    %% Objective Function
    % We wish find the minimum of the |peaks| function
    clear all, close all, clc
    peaks
     
    %% Nonlinear Constraint Function
    % Subject to a nonlinear constraint defined by a circular region of radius
    % three around the origin
    type circularConstraint
     
    %% Define Optimization Problem
    problem = createOptimProblem('fmincon',...
                                'objective',@(x) peaks(x(1),x(2)), ...
                                'nonlcon',@circularConstraint,...
                                'x0',[-1 -1],...
                                'lb',[-3 -3],...
                                'ub',[3 3],...
                                'options',optimset('OutputFcn',...
                                                   @peaksPlotIterates))
                                 
    %% Run the solver |fmincon| from the inital point
    % We can see the solution is not the global minimum
    [x,f] = fmincon(problem)                                                    
     
    %% Use Simmulated Annealing to Find the Global Minimum
    % Solve the problem using simmulated annealing.  Note that simmulated
    % annealing does not support nonlinear so we need to account for this in
    % the objective function.
    problem.solver  = 'simulannealbnd';
    problem.objective = @(x) peaks(x(1),x(2)) + (x(1)^2 + x(2)^2 - 9);
    problem.options = saoptimset('OutputFcn',@peaksPlotIterates,...
                                'Display','iter',...
                                'InitialTemperature',10,...
                                'MaxIter',300)
     
    [x,f] = simulannealbnd(problem)
    f = peaks(x(1),x(2))  



     Use Pattern Search to Find the Global Minimum
    1
    2
    3
    4
    5
    6
    7
    8
    %% Use Pattern Search to Find the Global Minimum
    % Solve the problem using pattern search.
    problem.solver  = 'patternsearch';
    problem.options = psoptimset('OutputFcn',@peaksPlotIterates,...
                                'Display','iter',...
                                'SearchMethod',{@searchlhs})
     
    [x,f] = patternsearch(problem)
     

    展开全文
  • 为了解决布谷鸟搜索算法后期收敛速度慢、求解精度不高、易陷入局部最优等缺陷,提出了一种基于Powell局部搜索策略的全局优化布谷鸟搜索算法算法将布谷鸟全局搜索能力与Powell方法的局部寻优性能有机地结合,并根据...
  • 全局优化算法:遗传算法

    万次阅读 2017-02-26 13:34:48
    全局优化算法概述前面讨论过一些迭代算法,包括牛顿法、梯度方法、共轭梯度方法拟牛顿法,能够从初始点出发,产生一个迭代序列。很多时候,迭代序列只能收敛到局部极小点。因此,为了保证算法收敛到全局最小点,...

    全局优化算法概述

    前面讨论过一些迭代算法,包括牛顿法、梯度方法、共轭梯度方法和拟牛顿法,能够从初始点出发,产生一个迭代序列。很多时候,迭代序列只能收敛到局部极小点。因此,为了保证算法收敛到全局最小点,有时需要在全局极小点附近选择初始点。此外,这些方法需要计算目标函数。

    全局优化算法又称现代启发式算法,是一种具有全局优化性能、通用性强且适合于并行处理的算法。
    这种算法一般具有严密的理论依据,而不是单纯凭借专家经验,理论上可以在一定的时间内找到最优解或近似最优解。
    遗传算法属于智能优化算法之一。

    常用的全局优化算法有:
    遗传算法 、模拟退火算法、禁忌搜索算法、粒子群算法、蚁群算法。

    1、染色体编码

    实际上遗传算法并不是直接针对约束集中的点进行操作,而是针对这些点的编码后再进行相关变异交叉等操作。具体说来,如约束集 ω 中的点24映射为一个字符串集合– 11000,这些字符串全部都是等长的,称为染色体。基本遗传算法(SGA)使用二进制串进行编码。

    2、适应度函数

    遗传算法对一个个体(解)的好坏用适应度函数值来评价,适应度函数值越大,解的质量越好。
    适应度函数是遗传算法进化过程的驱动力,也是进行自然选择的唯一标准,它的设计应结合求解问题本身的要求而定。

    3、选择和进化步骤

    在选择步骤中,利用选择操作构造一个新的种群 M(k) ,使其个体数量与种群相等,种群中个体数量称为个体容量,用N表示,M是在P的基础上进行随机处理后得到的,即M中的每个个体以概率

    f(x(k))F(k)

    等于 P(k) 中的 x(k) ,其中, F(k)=f(x(k)i) ,指的是对整个P进行求和,也就是说,染色体被选中的概率与其适应度函数值大小成正比。

    轮盘赌选择方法:


    这里写图片描述

    轮盘赌选择法可用如下过程模拟来实现:
    (1)在[0, 1]内产生一个均匀分布的随机数r。
    (2)若r≤q(1),则染色体x(1)被选中。
    (3)若q(k-1)

    qi=j=1iPj

    得到积累概率为:

    这里写图片描述

    轮盘赌选择方法的实现步骤:
    (1)计算群体中所有个体的适应度值;
    (2)计算每个个体的选择概率;
    (3)计算积累概率;
    (4)采用模拟赌盘操作(即生成0到1之间的随机数与每个个体遗传到下一代群体的概率进行匹配)
    来确定各个个体是否遗传到下一代群体中。

    4、交叉算子

    交叉运算,是指对两个相互配对的染色体依据交叉概率,按某种方式相互交换其部分基因,从而形成两个新的个体。

    交叉运算是遗传算法区别于其他进化算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要方法。
    基本遗传算法(SGA)中交叉算子采用单点交叉算子。

    单点交叉运算

    这里写图片描述

    5、变异算子

    变异运算,是指改变个体编码串中的某些基因值,从而形成新的个体。
    变异运算是产生新个体的辅助方法,决定遗传算法的局部搜索能力,保持种群多样性。
    交叉运算和变异运算的相互配合,共同完成对搜索空间的全局搜索和局部搜索。
    基本遗传算法(SGA)中变异算子采用基本位变异算子。

    基本位变异算子是指对个体编码串随机指定的某一位或某几位基因作变异运算。
    对于二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为0,
    则将其变为1;反之,若原有基因值为1,则将其变为0 。

    基本位变异算子的执行过程:

    这里写图片描述

    交叉和变异操作目的在于创建一个新的种群,使得新种群目标函数的平均值能够大于上一代种群。总的说来,遗传算法就是针对种群迭代开展交叉和变异操作,产生新种群,直到满足预定的停止条件。

    Matlab示例:

    选择适应度函数为: f(x)=x+10sin(5x)+7cos(4x) 函数图像为

    这里写图片描述

    运行结果为:

    这里写图片描述
    最优个体为: 10101111011111011
    最优值为:24.8554

    相关Matlab代码参考:Github地址

    [1].An introduction to optimization-最优化导论[J]. Edwin K.P.Chong.
    [2].http://blog.csdn.net/v_JULY_v/article/details/6132775

    展开全文
  • 针对果蝇优化算法在路径规划中容易形成局部最优的问题,对算法进行了修改,将果蝇与原点的距离 直接带入味道浓度判定函数,从而不易陷入局部最优,提高了算法的稳定性,并可使果蝇群体向已知食物源飞行。通过仿真...
  • 均匀设计具有让试验点在高维空间内均匀分散的特点,而Powell算法具有很好的求解局部最优解的能力,将两种方法进行有效改进后使之相结合,设计出并行全局优化算法。通过经典的全局最优化函数对算法进行了比较测试,发现...
  • 新的全局局部最优最小值粒子群优化算法.pdf
  • 全局优化算法:模拟退火算法

    千次阅读 2017-02-28 11:03:50
    序言前面讨论过一些迭代算法,包括牛顿法、梯度方法、共轭...全局优化算法又称现代启发式算法,是一种具有全局优化性能、通用性强且适合于并行处理的算法。 这种算法一般具有严密的理论依据,而不是单纯凭借专家经验

    序言

    前面讨论过一些迭代算法,包括牛顿法、梯度方法、共轭梯度方法和拟牛顿法,能够从初始点出发,产生一个迭代序列。很多时候,迭代序列只能收敛到局部极小点。因此,为了保证算法收敛到全局最小点,有时需要在全局极小点附近选择初始点。此外,这些方法需要计算目标函数。

    全局优化算法又称现代启发式算法,是一种具有全局优化性能、通用性强且适合于并行处理的算法。
    这种算法一般具有严密的理论依据,而不是单纯凭借专家经验,理论上可以在一定的时间内找到最优解或近似最优解。
    遗传算法属于智能优化算法之一。

    常用的全局优化算法有:
    遗传算法 、模拟退火算法、禁忌搜索算法、粒子群算法、蚁群算法。

    1、随机搜索算法

    模拟退火算法是一种随机搜索算法,随机搜索方法也称作概率搜索算法,这很好理解,是一种能够在优化问题的可行集中随机采样,逐步完成搜索的算法。German首次将模拟退火算法应用在凸显处理领域。论文地址后续有时间我可以是这翻译一下。

    朴素随机搜索算法步骤:

    1)令K:=0,选定初始点 x(0)Ω
    2)从 N(x(k)) 中随机选定一个备选点 z(k)
    3)如果 f(z(k))<f(x(k)), 则令 x(k+1)=z(k) ,否则 x(k+1)=x(k)
    4)如果满足停止条件,则停止迭代
    5)令k=k+1,回到第2步

    算法分析:朴素随机搜索算法面临的问题在于领域 N(x(k)) 的设计,一方面要保证领域足够大,否则算法可能会在局部点”卡住”;但如果使领域太大的话,会使得搜索过程变得很慢。另一种,对领域问题的解决方案是对朴素随机搜索算法进行修改,使其能够”爬出”局部极小点的”领域”。这意味着两次迭代中,算法产生的新点可能会比当前点要差。模拟退火算法就设计了这样的机制。

    2、模拟退火算法

    算法步骤

    1)令K:=0,选定初始点 x(0)Ω
    2)从 N(x(k)) 中随机选定一个备选点 z(k)
    3)设计一枚特殊的硬币,使其在一次抛投过程中出现正面的概率为 P(k,f(z(k)),f(x(k))) 。抛一次硬币,如果出现正面,则令 x(k+1)=z(k) ,否则 x(k+1)=x(k)
    4)如果满足停止条件,则停止迭代
    5)令k=k+1,回到第2步
    注:其中所说的”抛硬币”实际可理解成一种随机决策。

    算法进行中,第k次迭代,可以追踪到目前最好的点 x(k)best ,即能够对所有的 i{0,,k}, 都有 f(x(j))f(x(i)) 成立的 x(j)

    x(k)best 按照以下方式进行更新

    这里写图片描述

    通过持续追踪并更新当前为止最好的点,可以将模拟退火算法简单视为一个搜索过程,搜索过程的最终目的是出处当前为止最好的点。这种说法适合绝大部分启发式算法。

    3、模拟退火算法与朴素随机搜索算法的区别

    模拟退火算法与朴素随机搜索算法区别在于步骤3,该步骤中,模拟退火算法以一定的概率选择备选点作为下一次迭代点,即使这个备选点比当前的迭代点要差。这一概率被称作接受概率,接受概率要合理设定,才能保证迭代过程正确进行

    P(k,f(z(k)),f(x(k)))=min(1,exp(f(x(k))+f(z(k))Tk))

    Tk 称为冷却温度

    从上式我们至少可以推出,如果 f(z(k))f(x(k)) ,则p=1,即 x(k+1)=z(k)
    如果 f(z(k))>f(x(k)) ,则仍有一定概率使得 x(k+1)=z(k) ,这一概率为, exp(f(x(k))+f(z(k))Tk)

    f(z(k))f(x(k)) 之间差异越大,采用 z(k) 作为下一迭代点的概率就越小。类似的, Tk 越小,采用 z(k) 作为下一迭代点的概率就越小。通常的做法是令温度 Tk 递减到0(表示冷却过程)。也就是说,随着迭代次数的增加,算法趋于更差点的概率越来越小。

    对于温度参数的研究,可以参考论文

    4、 模拟退火算法伪代码

    /*
    * J(y):在状态y时的评价函数值
    * Y(i):表示当前状态
    * Y(i+1):表示新的状态
    * r: 用于控制降温的快慢
    * T: 系统的温度,系统初始应该要处于一个高温的状态
    * T_min :温度的下限,若温度T达到T_min,则停止搜索
    */
    while( T > T_min )
    {
      dE = J( Y(i+1) ) - J( Y(i) ) ; 
    
      if ( dE >=0 ) //表达移动后得到更优解,则总是接受移动
    Y(i+1) = Y(i) ; //接受从Y(i)到Y(i+1)的移动
      else
      {
    // 函数exp( dE/T )的取值范围是(0,1) ,dE/T越大,则exp( dE/T )也
    if ( exp( dE/T ) > random( 0 , 1 ) )
    Y(i+1) = Y(i) ; //接受从Y(i)到Y(i+1)的移动
      }
      T = r * T ; //降温退火 ,0<r<1 。r越大,降温越慢;r越小,降温越快
      /*
      * 若r过大,则搜索到全局最优解的可能会较高,但搜索的过程也就较长。若r过小,则搜索的过程会很快,但最终可能会达到一个局部最优值
      */
      i ++ ;
    }

    参考链接:
    [1].An introduction to optimization-最优化导论[J]. Edwin K.P.Chong.
    [2].http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html

    展开全文
  • 针对确定性全局优化算法极高的计算复杂度以及随机性全局优化算法可靠性较低的问题, 在群体进化算法框架下, 结合抽象凸理论, 提出一种基于抽象凸下界估计的群体全局优化算法. 首先, 对整个初始群体构建抽象凸下界估计...
  • 一种平衡全局局部搜索能力的粒子群优化算法.pdf
  • 均匀设计具有让试验点在高维空间内均匀分散的特点,而Powell算法具有很好的求解局部最优解的能力,将两种方法进行有效改进后使之相结合,设计出并行全局优化算法。通过经典的全局最优化函数对算法进行了比较测试,...
  • 为了改善粒子群优化算法的优化性能, 提出一种改进的全局粒子群优化(IGPSO) 算法. 该算法基于开采能力搜索能力相均衡的思想提出全局邻域搜索策略扰动策略, 使算法减少陷入局部极值的可能性, 同时以一定概率对全局...
  • 局部优化算法和各求解区间上待优化函数的仿射运算得到全局最优解的一个上界,再依据对各区间仿射运算的下界与全局最优解上界的比较来确定相应区间的去留,通过对不含全局最优解的子区间的删除来确定最优解所在的子...
  • 为了平衡收敛精度与收敛速度之间的矛盾,提出一种基于虚拟蚂蚁的局部优化蚁群算法.该算法通过降低重复计算资源的比例来提高计算资源的利用率,从而提升较少迭代次数时的精度.对单位信息素和全局更新策略进行调整,使之...
  • 为了解决布谷鸟搜索算法后期收敛速度慢、求解精度不高、易陷入局部最优等缺陷,提出了一种基于Powell局部搜索策略的全局优化布谷鸟搜索算法算法将布谷鸟全局搜索能力与Powell方法的局部寻优性能有机地结合,并根据...
  • 针对利用粒子群优化算法进行多极值函数优化时存在早熟收敛搜索效率低的问题,提出混合的PSOBFGS算法,并增强了混合算法的变异能力使算法能逃出局部极值点。通过对三种Benchmark函数的测试结果表明,PSOBFGS...
  • 基于粒子群算法的细菌觅食全局优化算法,刘小龙,李荣钧,针对细菌觅食算法在优化过程中,环境感知能力较弱且容易陷入局部极值的缺陷,将粒子群算法的基本思想引入细菌觅食算法中,改进原
  • Matlab全局优化局部优化

    千次阅读 2018-04-01 10:15:51
    优化问题一般分为局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。函数局部最小点是那种它的函数值小于或等于附近点的点。但是有...

    在实际的工作和生活过程中,优化问题无处不在,比如资源如何分配效益最高,拟合问题,最小最大值问题等等。优化问题一般分为局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。

    • 函数局部最小点是那种它的函数值小于或等于附近点的点。但是有可能大于较远距离的点。

    • 全局最小点是那种它的函数值小于或等于所有的可行点。



    matlab中的提供的传统优化工具箱(Optimization Tool),能实现局部最优,但要得全局最优,则要用全局最优化算法(Global  Optimization Tool ),主要包括:
    1. GlobalSearch) 全局搜索和(MultiStart)多起点方法产生若干起始点,然后它们用局部求解器去找到起始点吸引盆处的最优点。

    2. ga  遗传算法用一组起始点(称为种群),通过迭代从种群中产生更好的点,只要初始种群覆盖几个盆,GA就能检查几个盆。


    3. simulannealbnd)模拟退火完成一个随机搜索,通常,模拟退火算法接受一个点,只要这个点比前面那个好,它也偶而接受一个比较糟的点,目的是转向不同的盆。

    4. patternsearch )模式搜索算法在接受一个点之前要看看其附近的一组点。假如附近的某些点属于不同的盆,模式搜索算法本质上时同时搜索若干个盆

    下面我就一些具体例子,来说明各种优化方法:
    (1)先看一个求最小值的普通优化问题
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    %%目标函数
    f = @(x) x.*sin(x) + x.*cos(2.*x);
    %% 的取值范围
    lb = 0;
    ub = 10;
    %% 寻找最小值和绘图
    x0 = [0 1 3 6 8 10];
    hf = figure;
    for i=1:6
       x(i) = fmincon(f,x0(i),[],[],[],[],lb,ub,[],...
                      optimset('Algorithm','SQP','Disp','none'));
       subplot(2,3,i)
       ezplot(f,[lb ub]);
       hold on
       plot(x0(i),f(x0(i)),'k+')
       plot(x(i),f(x(i)),'ro')
       hold off
       title(['Starting at ',num2str(x0(i))])
       if i == 1 || i == 4
           ylabel('x sin(x) + x cos(2 x)')
       end
    end


    可以看出,初值x0不同,得到的结果截然不同,这说明这种求解器,能寻找局部最优,但不一定是全局最优,在起点为8时,取得全局最优。

    我们换一种求解器:fminbound,这种求解器不需要给点初值。

    1
    2
    3
    4
    5
    6
    7
    8
    x2 = fminbnd(f,lb,ub);
    figure
    ezplot(f,[lb ub]);
    hold on
    plot(x2,f(x2),'ro')
    hold off
    ylabel('x sin(x) + x cos(2 x)')
    title({'Solution using fminbnd.','Required no starting point!'})



    现在我们尝试全局最优的方法:GlobalSearch

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % Leason Learned: Use the appropriate solver for your problem type!
    %% But what if |fmincon| was the only choice?
    % Use globalSearch or MultiStart
    problem = createOptimProblem('fmincon','objective',f,'x0',x0(1),'lb',lb,...
                'ub',ub,'options',optimset('Algorithm','SQP','Disp','none'));
    gs = GlobalSearch;
    xgs = run(gs,problem);
    figure
    ezplot(f,[lb ub]);
    hold on
    plot(xgs,f(xgs),'ro')
    hold off
    ylabel('x sin(x) + x cos(2 x)')
    title('Solution using globalSearch.')



    因此全局最优的方法能够获取全局最优。

    (2)再看一个线性拟合的问题:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    close all, clear all, clc
    %% Pharmacokinetic Data
    t = [ 3.92,  7.93, 11.89, 23.90, 47.87, 71.91, 93.85, 117.84 ]              %#ok<*NOPTS>
    c = [0.163, 0.679, 0.679, 0.388, 0.183, 0.125, 0.086, 0.0624 ]
     
    plot(t,c,'o'), xlabel('t'), ylabel('c')
     
    %% 3 Compartment Model
    model = @(b,t) b(1)*exp(-b(4)*t) + b(2)*exp(-b(5)*t) + b(3)*exp(-b(6)*t)
     
    %% Define Optimization Problem
     
    problem = createOptimProblem('lsqcurvefit', ...
                                'objective', model, ...
                                'xdata', t, 'ydata', c, ...
                                'x0',ones(1,6),...
                                'lb', [-10 -10 -10  0   0   0 ],...
                                'ub', [ 10  10  10 0.5 0.5 0.5], ...
                                'options',optimset('OutputFcn',...
                                @curvefittingPlotIterates))
    %% solve
    b = lsqcurvefit(problem)  

    结果:最小二乘拟合结果误差较大


    现在我们尝试全局最优方法:MultiStart
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %% Multistart
    ms = MultiStart                                                            
    [b,fval,exitflag,output,solutions] = run(ms, problem, 50)                   %#ok<*NASGU,*ASGLU>
     
    %%
    curvefittingPlotIterates(solutions)
     
    %%
    problem.options.OutputFcn = {};
    tic, [b,fval,exitflag,output,solutions] = run(ms, problem, 100), toc  %计算算法的时间



    可以看出全局优化结果较好,误差较小。
    这种算法的运行时间 :Elapsed time is 6.139324 seconds.

    现在我使用并行计算的方式解决:
    1
    2
    3
    4
    5
    %% Parallel Version
    matlabpool open 2 %开启两个matlab并行计算
    ms.UseParallel = 'always' %开启并行计算
    tic, [bp,fvalp,exitflagp,outputp,solutionsp] = run(ms, problem, 100); toc
    matlabpool close
    结果:14 out of 100 local solver runs converged with a positive local solver exit flag.
    Elapsed time is 4.358762 seconds.
    Sending a stop signal to all the labs ... stopped.
    可以看出,运行时间减少,提高了效率。

    (3)再看一个寻找最小值的问题
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    %% Objective Function
    % We wish find the minimum of the |peaks| function
    clear all, close all, clc
    peaks
     
    %% Nonlinear Constraint Function
    % Subject to a nonlinear constraint defined by a circular region of radius
    % three around the origin
    type circularConstraint
     
    %% Define Optimization Problem
    problem = createOptimProblem('fmincon',...
                                'objective',@(x) peaks(x(1),x(2)), ...
                                'nonlcon',@circularConstraint,...
                                'x0',[-1 -1],...
                                'lb',[-3 -3],...
                                'ub',[3 3],...
                                'options',optimset('OutputFcn',...
                                                   @peaksPlotIterates))
                                 
    %% Run the solver |fmincon| from the inital point
    % We can see the solution is not the global minimum
    [x,f] = fmincon(problem)    



    这种方法只能寻找局部最优。
    现在用全局优化算法:
    1
    2
    3
    4
    5
    6
    7
    %% Use |MultiStart| to Find the Global Minimum
    % Define the multistart solver
    close all
    ms = MultiStart %这里可以换成GlobalSearch
    %% Run |Multistart|
    % Well use 5 starting points
    [x,f,exitflag,output,solutions] = run(ms, problem, 5)





    (4)再举一个模拟退火即模式搜索的算法 :
      [x fval] = simulannealbnd(@objfun,x0,lb,ub,options)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    %% Objective Function
    % We wish find the minimum of the |peaks| function
    clear all, close all, clc
    peaks
     
    %% Nonlinear Constraint Function
    % Subject to a nonlinear constraint defined by a circular region of radius
    % three around the origin
    type circularConstraint
     
    %% Define Optimization Problem
    problem = createOptimProblem('fmincon',...
                                'objective',@(x) peaks(x(1),x(2)), ...
                                'nonlcon',@circularConstraint,...
                                'x0',[-1 -1],...
                                'lb',[-3 -3],...
                                'ub',[3 3],...
                                'options',optimset('OutputFcn',...
                                                   @peaksPlotIterates))
                                 
    %% Run the solver |fmincon| from the inital point
    % We can see the solution is not the global minimum
    [x,f] = fmincon(problem)                                                    
     
    %% Use Simmulated Annealing to Find the Global Minimum
    % Solve the problem using simmulated annealing.  Note that simmulated
    % annealing does not support nonlinear so we need to account for this in
    % the objective function.
    problem.solver  = 'simulannealbnd';
    problem.objective = @(x) peaks(x(1),x(2)) + (x(1)^2 + x(2)^2 - 9);
    problem.options = saoptimset('OutputFcn',@peaksPlotIterates,...
                                'Display','iter',...
                                'InitialTemperature',10,...
                                'MaxIter',300)
     
    [x,f] = simulannealbnd(problem)
    f = peaks(x(1),x(2))  
     



     Use Pattern Search to Find the Global Minimum
    1
    2
    3
    4
    5
    6
    7
    8
    %% Use Pattern Search to Find the Global Minimum
    % Solve the problem using pattern search.
    problem.solver  = 'patternsearch';
    problem.options = psoptimset('OutputFcn',@peaksPlotIterates,...
                                'Display','iter',...
                                'SearchMethod',{@searchlhs})
     
    [x,f] = patternsearch(problem)

    展开全文
  • 提出了一种基于正交实验设计的混合自适应正交遗传算法(hybrid self-adaptive orthogonal genetic algorithm,简称HSOGA)以求解全局优化问题,此算法利用正交实验设计方法设计交叉算子,并提出一种自适应正交交叉算子....
  • 基于全局最优位置自适应选取与局部搜索的多目标粒子群优化算法.pdf
  • 设计自适应全局调整和局部学习策略, 平衡算法局部搜索和全局搜索, 详细分析参数HMS、HMCRPAR对算法优化性能的影响. 数值结果表明, GCHS 算法在精度、收敛速度鲁棒性方面比声搜索算法及最近文献中提出的7 种...
  • 提出了一种具有混沌局部搜索策略的差分进化全局优化算法(CLSDE),它是在每一代中通过DE/best/1/bin形式的差分进化算法找到最佳个体,然后在最佳个体的附近用混沌的方法进行局部搜索。8个基本的测试函数优化结果...
  • 优化算法及并行实现 摘要复杂函数的全局最优化问题是在 求解各种复杂工程与科学计算问题中提炼 出来的亟待解决的计算问题 均匀设计具有 让试验点在高维空间内均匀分散的特点 而 Powell算法具有很好的求解局部最优...
  • 针对遗传算法、模拟退火算法等智能全局优化算法的集成问题开展研究,分析归纳了智能全局优化算法和局部搜索算法的一般规律和特性,给出了全局智能优化算法进行集成的统一框架――全局智能优化集成算法(IGIOA),及...
  • 优化算法】简述灰狼优化算法(GWO)原理

    万次阅读 多人点赞 2019-03-25 21:10:34
    系列优化算法简述: OP_1. 简述遗传算法(GA)原理 OP_2 简述灰狼优化算法(GWO)原理 前言: 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能...
  • 本研究提出了一种改进的GSO优化算法:全局组搜索优化算法GGSO(Global GSO)。主要在两个方面对GSO算法进行了改进,一是在迭代过程中引入加速系数,加快种群收敛速度,增强算法的局部搜索能力;二是用高斯函数来产生随机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,926
精华内容 31,170
关键字:

局部优化和全局优化算法