基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)

BA算法简介

http://www.omegaxyz.com/2019/02/12/ba-matlab/

该论文修改

作者在原有BA算法上进行3个修改

  1. 跳出局部最优(扰动个体)
  2. 使得算法变得稳定
  3. 脉搏和响度修改,平衡局部与全局搜索

主要思想

在这里插入图片描述

流程图

在这里插入图片描述

function [bestMin, bestID] = ILSSIWBA()
%A new bat algorithm based on iterative local search and stochastic inertia weight
 
%omegaxyz.com QQ: 644327005
 
clc;
%% 经典BA参数设置
 
t = 1; 
maxT = 100; %最大迭代次数
dim = 30; %问题的维度
sizep = 50; %种群大小
xmin = -0.5;
xmax = 0.5; %位置向量的范围
 
A = 0.6.*ones(sizep,1);    % 响度 (不变或者减小)
r = zeros(sizep,1);      % 脉冲率 (不变或增加))
Qmin = 0;         % 最小频率
Qmax = 1;         % 最大频率
 
%% 初始化
 
Lb = xmin*ones(1,dim);
Ub = xmax*ones(1,dim);
pop = Lb+(Ub-Lb).*rand(sizep,dim); %种群初始化
popv = zeros(sizep,dim);   % 速度
Q = zeros(sizep,1);   % 频率
 
pfitness = zeros(dim,1);
for i = 1:sizep
    pfitness(i) = evaluate2(pop(i,:)); %评价
end
[bestMin, bestID]=min(pfitness);
bestS = pop(bestID, :);
bestArchive = zeros(maxT,1);
 
%% 论文中的新策略参数
 
umin = 0.4; %The second modification (SIW method)
umax = 0.9;
sigma = 0.2;
 
R0 = 0.1; %The 3th modification
Rupper = 0.7;
A0 = 0.9;
Alower = 0.6;
 
 
 
%% 具体迭代过程
 
while t <= maxT
    for i = 1:sizep
        Q(i)=Qmin+(Qmin-Qmax)*rand();
        w = umin +(umax-umin)*rand()+sigma*randn(); %The second modification (SIW method)
        popv(i,:)=w*popv(i,:)+(pop(i,:)-bestS)*Q(i); %The second modification (SIW method)
        Stemp = pop(i,:)+popv(i,:);
        % 脉冲率
         if rand>r(i)
             Stemp=bestS-1+2*rand(1,dim);
         end
         fitTemp = evaluate2(Stemp);
         if (fitTemp<=pfitness(i))&&(rand()<A(i))
            pop(i,:) = Stemp;
            pfitness(i) = fitTemp;
            A(i) = (A0-Alower)/(1-maxT)*(t-maxT)+Alower; %The 3th modification
            r(i) = (R0-Rupper)/(1-maxT)*(t-maxT)+Rupper; %The 3th modification
         end
         if fitTemp <= bestMin
            bestID = i;
            bestMin = fitTemp;
         	bestS = Stemp;
         end
    end
    
    interX = bestS.*rand(); %The 1th modification (ILS method)
    interXfit = evaluate2(interX);
    if interXfit < bestMin
        bestMin = interXfit;
        bestS = interX;
        pop(bestID,:) = bestS;
        pfitness(bestID,:) = bestMin;
    else
        if exp(bestMin-interXfit) > rand()
            bestMin = interXfit;
            bestS = interX;
            pop(bestID,:) = bestS;
            pfitness(bestID,:) = bestMin;
        end
    end
    
    bestArchive(t) = bestMin;
    fprintf('GEN: %d  min: %.4f\n', t, bestMin);
    t = t +1;
end
 
 
end%.m end

评价函数:

function z = evaluate2(u)
%Weierstrass
 
dim= length(u);
sum_1=0;
sum_2=0;
sum_3=0;
a = 0.5;
b = 3;
for i=1:dim
    for k=0:30
       sum_1=sum_1+(a^k)*(cos(2*pi*(b^k)*(u(i)+0.5)));
    end
    sum_2=sum_2+sum_1;
    sum_1 = 0;
end
for k=0:30
       sum_3=sum_3+(a^k)*(cos(2*pi*(b^k)*0.5));
end
z=sum_2-dim*sum_3;
end

更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
基于权重迭代算法的多属性群决策是一种常用于解决决策问题的方法。该算法将决策问题转化为属性权重的确定和评估的过程,通过迭代计算来得到最终的决策结果。在此过程中,需要定义决策目标和属性,对属性之间的影响和重要程度进行量化,并得到相应的权重权重迭代算法的主要步骤包括: 1. 确定决策目标和相关属性。 2. 建立决策矩阵,将决策问题转化为具体的数值。 3. 初始权重计算,设定初始的属性权重。 4. 属性权重迭代,通过迭代计算得到最终的属性权重。 5. 比较计算,将属性权重与决策矩阵相乘,得到各属性的综合得分。 6. 决策结果评价,根据综合得分进行决策结果评估。 MATLAB是一款常用的科学计算软件,可以用于实现基于权重迭代算法的多属性群决策。在MATLAB中,可以利用矩阵运算和迭代计算等功能,快速准确地完成属性权重的计算和决策结果的评估。 在MATLAB中,可以通过编写脚本或函数来实现基于权重迭代算法的多属性群决策。首先,需要将决策问题转化为决策矩阵,然后根据算法步骤确定初始权重并进行迭代计算,最后通过矩阵运算得到决策结果。 在实际应用中,基于权重迭代算法的多属性群决策可以广泛应用于各类决策问题,如企业投资决策、产品选型、项目评估等。通过该算法,可以快速有效地进行决策,并得到可靠的结果。同时,MATLAB作为强大的科学计算工具,为实施该算法提供了便利和高效的支持。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值