Matlab算法之优化计算1

目录

1粒子群优化算法

1.1基本粒子群概述

1.2基本粒子群算法

1.3带压缩因子的粒子群算法

1.4权重改进的粒子群算法

1.4.1线性递减权重法

1.4.2自适应权重法

1.4.3随机权重法

1.5变学习因子的粒子群算法

1.5.1同步变化的学习因子

1.5.2异步变化的学习因子

1.6二阶粒子群算法

1.7二阶振荡粒子群算法

1.8混沌粒子群算法

1.9混合粒子群算法

1.9.1基于自然选择的算法

1.9.2基于杂交的算法

1.9.3基于模拟退火的算法


1粒子群优化算法

一些见解

  • PSO粒子群算法:用于全局搜索
  • CLS混沌算法:根据PSO的结果进行局部搜索

fitness:待优化的目标函数

N:粒子数目

c1,c2: 学习因子

cmax:学习因子的最大值

cmin:学习因子的最小值

xmax:自变量搜索域的最大值

xmin:自变量搜索域的最小值

w:惯性权重

wmax:最大权重

wmin:最小权重

M:最大迭代次数

D:自变量的个数

xm:目标函数取最小值时的自变量值

fv:目标函数的最小值

Pc:杂交概率

Sp:杂交池的大小比例

lamda:退火参数


1.1基本粒子群概述

1.2基本粒子群算法

  • 算法原理:
  • 优点:全局搜索
  • 缺点:耗时
  • 个人见解:

1.3带压缩因子的粒子群算法

1.4权重改进的粒子群算法

1.4.1线性递减权重法

1.4.2自适应权重法

1.4.3随机权重法

1.5变学习因子的粒子群算法

1.5.1同步变化的学习因子

1.5.2异步变化的学习因子

1.6二阶粒子群算法

1.7二阶振荡粒子群算法

1.8混沌粒子群算法

[xm,fv] = CLSPSO(fitness,N,w,c1,c2,xmax,xmin,M,maxC,D)

fitness:待优化的目标函数

N:粒子数目

c1,c2: 学习因子

w:惯性权重

M:最大迭代次数

D:自变量的个数

xm:目标函数取最小值时的自变量值

fv:目标函数的最小值

  • 算法原理:混沌粒子群是混沌优化和粒子群优化两者的结合。对于给定的优化函数,通过将搜索过程对应为混沌轨道的遍历过程,可将搜索过程具有避免陷入局部极小的能力
  • 优点:用于求解无约束优化问题
  • 缺点:通常需要大量的迭代步数才可以获得较好的解,且对于初始解十分敏感。对此,可以采用PSO和混沌搜索相结合,得到混沌粒子群算法。
  • 个人见解:保持了种群的多样性,加强搜索的分散性,在保留一定数量优秀微粒的同时,算法根据群体的最佳位置动态收缩区域,并在收缩区域内随机产生微粒来代替性能较差的微粒。

1.9混合粒子群算法

        混合粒子群算法指的是借鉴其他一些智能优化算法的思想而形成的粒子群算法。除了粒子算法外,还有遗传算法、模拟退火算法以及神经网络等智能算法,这些算法是目前应用比较广泛的智能算法,每种智能算法都有其特点,因此自然而然就有了结合各种智能算法的优点而形成的混合智能算法。

        下面介绍了三种混合粒子群算法,前两种是基于遗传算法中的选择和杂交机制而改进的粒子群算法,第三种是基于模拟退火算法的粒子群算法。

1.9.1基于自然选择的算法

[xm,fv] = SelPSO(fitness,N,c1,c2,w,M,D)

fitness:待优化的目标函数

N:粒子数目

c1,c2: 学习因子

w:惯性权重

M:最大迭代次数

D:自变量的个数

xm:目标函数取最小值时的自变量值

fv:目标函数的最小值

  • 算法原理:将自然选择吉利与粒子群算法相结合得到基于选择的粒子群算法,其基本思想为每次迭代过程中将整个粒子群按适应值排序,用种群中最好的一半粒子的速度和位置替换最差的一半的位置和速度,同时保留原来每个个体说记忆的历史最优值。
  • 优点:用于求解无约束优化问题
  • 缺点:
  • 个人见解:基于自然选择的粒子群算法求得的结果精度非常高
  • matlab代码
function [xm,fv] = SelPSO(fitness,N,c1,c2,w,M,D)

format long;
for i=l:N 
    for j=l:D 
        x(i,j)=randn;   %随机初始化位置
        v(i,j)=randn;   %随机初始化速度
    end
end

for i=1:N 
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end 

pg = x(N,:);    %Pg为全局最优
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end 
end 

for t=1:M 
    for i=1:N 
        v(i,:)=w*v(i,:)+cl*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        fx(i)= fitness(x(i,:));
        if fx(i)<p(i)
            p(i)=fx(i);
            y(i,:)=x(i,:);
        end 
        if p(i)<fitness(pg)
            pg=y(i,:);
        end
    end
    [sortf,sortx] = sort(fx);   %将所有粒子按适应值排序
    exIndex = round((N-1)/2);
    x(sortx((N-exIndex+1):N)) = x(sortx(1:exIndex));    %将最好的一半粒子的位置替换掉最差的一半
    v(sortx((N-exIndex+1):N)) = v(sortx(1:exIndex));    %将最好的一半粒子的速度替换掉最差的一半
end 

xm = pg';   
fv = fitness(pg);

1.9.2基于杂交的算法

[xm,fv] = BreedPSO(fitness,N,c1,c2,w,Pc,Sp,M,D)

fitness:待优化的目标函数

N:粒子数目

c1,c2: 学习因子

w:惯性权重

M:最大迭代次数

D:自变量的个数

xm:目标函数取最小值时的自变量值

fv:目标函数的最小值

%Pc杂交概率

%Sp杂交池的大小比例

  • 算法原理:根据遗传算法中的杂交概念,在每次迭代中,根据杂交概率选取指定数量的粒子放入杂交池内,池总的粒子随机两两杂交,产生同样数目的子代粒子(child),并用子代粒子代替亲代粒子(parent)。
  • 优点:结果精度非常高
  • 缺点:
  • 个人见解:
  • matlab代码
function [xm,fv] = BreedPSO(fitness,N,c1,c2,w,Pc,Sp,M,D)

format long;
for i=l:N 
    for j=l:D 
        x(i,j)=randn;   %随机初始化位置
        v(i,j)=randn;   %随机初始化速度
    end
end

for i=1:N 
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end 

pg = x(N,:);    %Pg为全局最优
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end 
end 

for t=1:M 
    for i=1:N 
        v(i,:)=w*v(i,:)+cl*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        %%%%1
        if fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i)<fitness(pg)
            pg=y(i,:);
        end 
        rl =rand();
        if rl< Pc   %杂交概率
            numPool = round(Sp*N);  %杂交池大小
            PoolX = x(1:numPool,:); %杂交池中粒子的位置
            PoolVX = v(1:numPool,:);%杂交池中粒子的速度
            for i=l:numPool 
                seedl = floor(rand()*(numPool-1))+ 1;
                seed2 = floor(rand()*(numPool-1))+ 1;
                pb = rand();    
                %子代的位置计算
                childxl(i,:)=pb*PoolX(seedl,:) +(1-pb)*PoolX(seed2,:);
                %子代的速度计算
                childv1(i,:) =(PoolVX(seed1,:)+PoolVX(seed2,:))*norm (PoolVX(seed1,:))/...
norm(PoolVX(seedl,:)+ PoolVX(seed2,:)); %换行可能出错
            end
            x(1:numPool,:)= childxl;    %子代的位置替换父代的位置
            v(1:numPool,:)= childv1;    %子代的速度替换父代的速度
        end
    end
        %%%%
end 

xm = pg';   
fv = fitness(pg);

1.9.3基于模拟退火的算法

[xm,fv] = SimuAPSO(fitness,N,c1,c2,lamda,M,D)

fitness:待优化的目标函数

N:粒子数目

c1,c2: 学习因子

w:惯性权重

M:最大迭代次数

D:自变量的个数

xm:目标函数取最小值时的自变量值

fv:目标函数的最小值

%lamda:退火参数

  • 算法原理:在搜索过程中具有概率突跳的能力,能够有效地避免搜索过程陷入局部极小解。

        初始温度和退温方式对算法有一定的影响,一般采用如下的初温和退温方式:

t(k+1)=lamda*t(k)

t(0) =f(pg)/ln 5

  • 优点:在退火过程中不但接受好的解,而且还以一定的概率接受差的解,同时这种概率收到温度参数的控制,其大小随着温度的下降而减小。用于求解无约束优化问题
  • 缺点:
  • 个人见解:
function [xm,fv] = SimuAPSO(fitness,N,c1,c2,lamda,M,D)

format long;
for i=l:N 
    for j=l:D 
        x(i,j)=randn;   %随机初始化位置
        v(i,j)=randn;   %随机初始化速度
    end
end

for i=1:N 
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end 

pg = x(N,:);    %Pg为全局最优
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end 
end 

%%%%
T= fitness(pg)/log(5);  %初始温度
for t=1:M 
    groupFit = fitness(pg);
    for i=1:N   %当前温度下各个Pi的适应值
        Tfit(i) = exp( - (p(i) - groupFit)/T);
    end 
    SumTfit = sum(Tfit);
    Tfit = Tfit/SumTfit;
    pBet = rand();
    for i = 1:N     %用轮盘赌策略确定全局最优的某个替代值
        ComFit(i)= sum(Tfit(1:i));
        if pBet <= ComFit(i)
            pg_plus = x(i,:);
            break;
        end
    end
    C= cl + c2;
    ksi = 2/abs(2-C-sqrt(C^2 - 4*C));   %速度压缩因子
    for i=l:N 
        v(i,:)=ksi*( v(i,:)+cl*rand*(y(i,:)-x(i,:))+c2*rand*( pg_plus-x(i,:) ) );
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));y(i,:)=x(i,:);
        end
        if p(i)<fitness(pg)
            pg=y(i,:);
        end 
    end 
    T=T * lamda;    %退温操作
end 
%%%%

xm = pg';   
fv = fitness(pg);


  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
matlab优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、三次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单纯形搜索法、Powell法、最速下降法、共轭梯度法、牛顿法、修正牛顿法、拟牛顿法、信赖域法、显式最速下降法、Rosen梯度投影法、罚函数法、外点罚函数法、內点罚函数法、混合罚函数法、乘子法、G-N法、修正G-N法、L-M法、线性规划、单纯形法、修正单纯形法、大M法、变量有界单纯形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法、基本粒子群算法、带压缩因子的粒子群算法、权重改进的粒子群算法、线性递减权重法、自适应权重法、随机权重法、变学习因子的粒子群算法、同步变化的学习因子、异步变化的学习因子、二阶粒子群算法、二阶振荡粒子群算法 (matlab optimization process includes Non-binding one-dimensional extremum problems Advance and retreat method Golden Section Fibonacci method of basic Newton s method Newton s method Newton s Law of the global secant method parabola method acceptable to the three interpolation search method Goidstein France Wolfe.Powell France Simplex search method Powell steepest descent method Conjugate gradient method Newton s method Newton s method to amend Quasi-Newton Method trust region method explicitly steepest descent method, Rosen gradient projection method Penalty function method outside the penalty function method within the penalty function method Mixed penalty function multiplier method G-N was amended in G-N method L-M method Of linear programming simplex method, revised simplex method Big M method variables bounded simplex method, Cutting Plane Method integer programming branch and bound method 0-1 programming quadratic programming )
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值