function [bestcord,bestpos,BestCost] = ABC(nPop,MaxIt,VarMin,VarMax,nVar,fobj)
% MaxIt = 200; % 最大迭代次数
% nPop = 100; % 蜂群大小
VarSize = [1 nVar]; % 变量矩阵
nOnlooker = nPop; % 侦察蜂个数
L = round(0.6*nVar*nPop); % 探索极值限制参数
a = 1; % 加速度系数上限
%% Initialization
%% 初始化
% 置空蜜蜂矩阵
empty_bee.Position = [];
empty_bee.Cost = [];
% 初始化蜂群数组
pop = repmat(empty_bee, nPop, 1);
% 初始化最优解
BestSol.Cost = inf;
% 产生初始种群
for i = 1:nPop
pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
pop(i).Cost = fobj(pop(i).Position);
if pop(i).Cost <= BestSol.Cost
BestSol = pop(i);
end
end
% 丢解计数器
C = zeros(nPop, 1);
% 保存最优函数值的数组
BestCost = zeros(MaxIt, 1);
%% ABC迭代
for it = 1:MaxIt
% 引领蜂
for i = 1:nPop
% 随机选择不等于i的k
K = [1:i-1 i+1:nPop];
k = K(randi([1 numel(K)]));
% 定义加速度系数
phi = a*unifrnd(-1, +1, VarSize);
% 新的蜜蜂位置
newbee.Position = pop(i).Position+phi.*(pop(i).Position-pop(k).Position);
% 边界处理
newbee.Position = max(newbee.Position, VarMin);
newbee.Position = min(newbee.Position, VarMax);
% 新的蜜蜂函数值
newbee.Cost = fobj(newbee.Position);
% 比较
if newbee.Cost <= pop(i).Cost
pop(i) = newbee;
else
C(i) = C(i)+1;
end
end
% 计算适应度值和选择概率
F = zeros(nPop, 1);
MeanCost = mean([pop.Cost]);
for i = 1:nPop
% 将函数值转换为适应度
if pop(i).Cost >= 0
F(i) = 1/(1+pop(i).Cost);
else
F(i) = 1+abs(pop(i).Cost);
end
end
P = F/sum(F);
% 跟随蜂
for m = 1:nOnlooker
% 选择食物源
i = RouletteWheelSelection(P);
% 随机选择不等于i的k
K = [1:i-1 i+1:nPop];
k = K(randi([1 numel(K)]));
% 定义加速度系数
phi = a*unifrnd(-1, +1, VarSize);
% 新的蜜蜂位置
newbee.Position = pop(i).Position+phi.*(pop(i).Position-pop(k).Position);
% 边界处理
newbee.Position = max(newbee.Position, VarMin);
newbee.Position = min(newbee.Position, VarMax);
% 新的蜜蜂函数值
newbee.Cost = fobj(newbee.Position);
% 比较
if newbee.Cost <= pop(i).Cost
pop(i) = newbee;
else
C(i) = C(i) + 1;
end
end
% 侦察蜂
for i = 1:nPop
if C(i) >= L % 超出探索极值参数
maxPos = max(pop(i).Position);
minPos = min(pop(i).Position);
for j = 1:numel(pop(i).Position)
pop(i).Position(j) = minPos+rand*(maxPos-minPos);
end
pop(i).Cost = fobj(pop(i).Position);
C(i) = 0;
end
end
% 更新每轮最优解
for i = 1:nPop
if pop(i).Cost <= BestSol.Cost
BestSol = pop(i);
end
end
% 保存每轮最优解
BestCost(it) = BestSol.Cost;
% 显示迭代信息
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
bestcord = BestSol.Cost
bestpos = BestSol.Position;
end
没有合适的资源?快使用搜索试试~ 我知道了~
人工蜂群算法(ABC)优化BP神经网络分类预测,ABC-BP分类预测,多特征输入模型 多特征输入单输出的二分类及多分类模型
共6个文件
m:5个
xlsx:1个
需积分: 0 8 下载量 140 浏览量
2023-09-15
11:41:53
上传
评论 1
收藏 75KB ZIP 举报
温馨提示
人工蜂群算法(ABC)优化BP神经网络分类预测,ABC-BP分类预测,多特征输入模型。 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。 程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。
资源推荐
资源详情
资源评论
收起资源包目录
0.3 ABC-BP分类 - 2.zip (6个子文件)
RouletteWheelSelection.m 170B
initialization.m 469B
getObjValue.m 1KB
ABC.m 3KB
main.m 1KB
数据集.xlsx 73KB
共 6 条
- 1
资源评论
智能算法及其模型预测
- 粉丝: 1834
- 资源: 788
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功