⛄一、鸽群算法简介
基于鸽群在归巢过程中的特殊导航行为,Duan等提出了一种仿生群体智能优化算法———鸽群优化算法.在这个算法中,通过模仿鸽子在寻找目标的不同阶段使用不同导航工具这一机制,提出了2种不同的算子模型:
1)地图和指南针算子(map and compass operator).鸽子可以使用磁性物体感知地磁场,然后在头脑中形成地图.它们把太阳高度作为指南针来调整飞行方向,当它们接近目的地的时候,它们对太阳和磁性物体的依赖性便减小.
2)地标算子(landmark operator).地标算子用来模拟导航工具中地标对鸽子的影响.当鸽子飞近目的地时,它们将更多依赖附近的地标.如果鸽子对地标熟悉,将直接飞向目的地.否则,它们将跟随那些对地标熟悉的鸽子飞行.
在鸽群优化模型中,使用虚拟的鸽子模拟导航过程.依据地图和指南针算子(如图2所示)的原理,初始化鸽子的位置和速度,并且在多维搜索空间中,鸽子的位置和速度在每一次迭代中都会得到更新.其位置和速度分别记作
图2 地图和指南针算子模型
式中i=1,2,…,N.每只鸽子依据
更新其位置Xi及速度Vi.式中:R是地图和指南针因数,取值范围设定成01;rand是取值范围在01的随机数;Nc是目前迭代次数;Xgbest是在Nc-1次迭代循环后,通过比较所有鸽子的位置得到的全局最优位置.当该循环次数达到所要求的迭代次数后即停止地图和指南针算子的工作,进入地标算子中继续工作.
如图3所示,在地标算子中,每一次迭代后鸽子的数量都会减少一半.那些远离目的地的鸽子对地标不熟悉,它们将不再有分辨路径的能力,因而被舍去.Xcenter是剩余鸽子的中心位置,将被当作地标,即作为飞行的参考方向,由此依据下列方程:
对鸽子的位置Xi进行更新.其中
同样,以上迭代循环至最大迭代次数后,地标算子也停止工作.
图3 地标算子模型
⛄二、部分源代码
clear all
clc
load wine
% load balance
% 选定训练集和测试集
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
% 数据预处理
% 数据预处理,将训练集和测试集归一化到[0,1]区间
[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);
dataset = [train_wine;test_wine];
[dataset_scale,ps] = mapminmax(dataset’,0,1);
dataset_scale = dataset_scale’;
train_wine = dataset_scale(1:mtrain,:);
test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );
Solution_no=20; %Number of search solutions
M_Iter=20; %Maximum number of iterations
LB = 0.01;
UB = 100;
F_obj = @(x)objfun(x,train_wine_labels,train_wine,test_wine_labels,test_wine);
Dim = 2;
[PIO_Best_FF,PIO_zbest,PIO_Conv_curve]=PIO(Solution_no,M_Iter,LB,UB,Dim,F_obj); % Call the AOA
bestc=PIO_zbest(1);
bestg=PIO_zbest(2);
disp(‘打印选择结果’);
str=sprintf(‘Best c = %g,Best g = %g’,bestc,bestg);
disp(str)
%% 利用最佳的参数进行SVM网络训练
cmd_gwosvm = ['-c ‘,num2str(bestc),’ -g ',num2str(bestg)];
model_gwosvm = svmtrain(train_wine_labels,train_wine,cmd_gwosvm);
%
%% SVM仿真测试
[predict_label_2,accuracy_2,bbb] = svmpredict(test_wine_labels,test_wine,model_gwosvm);
result_2 = [test_wine_labels predict_label_2];
total = length(test_wine_labels);
right = sum(predict_label_2 == test_wine_labels);
disp(‘打印测试集分类准确率’);
str = sprintf( ‘Accuracy = %g%% (%d/%d)’,accuracy_2(1),right,total);
disp(str);
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]段海滨,叶飞.鸽群优化算法研究进展[J].北京工业大学学报. 2017,43(01)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
转载:https://blog.csdn.net/TIQCmatlab/article/details/128068670