Java实现细菌觅食算法_细菌觅食算法MATLAB实现

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%

%*********************细菌觅食算法********************** %%%%%%%%%%%%%%%%%%%-----BFA算法-----%%%%%%%%%%%%%%%%%%% clear;

clc;

%-----(1)初始化参数-----

bounds = [-5.12 5.12;-5.12 5.12]; % 函数变量范围

p = 2; % 搜索范围的维度

s = 26; % 细菌的个数

Nc = 50; % 趋化的次数

Ns = 4; % 趋化操作中单向运动的最大步数

C(:,1) = 0.001*ones(s,1); % 翻转选定方向后,单个细菌前进的步长

Nre = 4; % 复制操作步骤数

Ned = 2; % 驱散(迁移)操作数

Sr = s/2; % 每代复制(分裂)数

Ped = 0.25; % 细菌驱散(迁移)概率

d_attract = 0.05; % 吸引剂的数量

ommiga_attract = 0.05; % 吸引剂的释放速度

h_repellant = 0.05; % 排斥剂的数量

ommiga_repellant = 0.05;% 排斥剂的释放速度

for i = 1:s % 产生初始细菌个体的位置

P(1,i,1,1,1) = -5.12 + rand*10.24;

P(2,i,1,1,1) = -5.12 + rand*10.24;

end

%------------------细菌趋药性算法循环开始---------------------

%-----(2)驱散(迁移)操作开始-----

for l = 1:Ned

%-----(3)复制操作开始-----

for k = 1:Nre

%-----(4)趋化操作(翻转或游动)开始-----

for j = 1:Nc

%-----(4.1)对每一个细菌分别进行以下操作-----

for i = 1:s

%-----(4.2)计算函数J(i,j,k,l),表示第i个细菌在第l次驱散第k次

%----------复制第j次趋化时的适应度值-----

J(i,j,k,l) = Cost(P(:,i,j,k,l));

%-----(4.3)修改函数,加上其它细菌对其的影响-----

Jcc = sum(-d_attract*exp(-ommiga_attract*((P(1,i,j,k,l)-...

P(1,1:26,j,k,l)).^2+(P(2,i,j,k,l)-P(2,1:26,j,k,l)).^2))) +...

sum(h_repellant*exp(-ommiga_repellant*((P(1,i,j,k,l)-...

P(1,1:26,j,k,l)).^2+(P(2,i,j,k,l)-P(2,1:26,j,k,l)).^2)));

J(i,j,k,l) = J(i,j,k,l) + Jcc;

%-----(4.4)保存细菌目前的适应度值,直到找到更好的适应度值取代之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值