当前位置: 首页 > news >正文

二进制灰太狼优化器(Binary Grey Wolf Optimizer, BGWO)

BGWO 将连续 GWO 的位置更新通过 传递函数(Transfer Function) 映射到二进制空间,适用于特征选择、维度缩减等离散优化问题。


一、算法原理简述

1.1 标准 GWO(连续)

灰太狼群体分为四层:α(最优)、β(次优)、δ(第三优)、ω(其余)。位置更新公式:

X(t+1)=Xα+Xβ+Xδ3−A⋅D\mathbf{X}(t+1) = \frac{\mathbf{X}_\alpha + \mathbf{X}_\beta + \mathbf{X}_\delta}{3} - A \cdot DX(t+1)=3Xα+Xβ+XδAD

其中 (A=2a⋅r1−aA = 2a \cdot r_1 - aA=2ar1a),(C=2⋅r2C = 2 \cdot r_2C=2r2),(aaa) 从 2 线性递减到 0。

1.2 二进制映射(BGWO)

使用V 形传递函数(V-shaped transfer function)将连续位置转换为 0/1:

V(x)=∣tanh⁡(x)∣V(x) = \left|\tanh(x)\right|V(x)=tanh(x)

位置更新规则:

Xnew={1−Xold,if rand<V(step)Xold,otherwiseX_{new} = \begin{cases} 1 - X_{old}, & \text{if } \text{rand} < V(\text{step}) \\ X_{old}, & \text{otherwise} \end{cases}Xnew={1Xold,Xold,ifrand<V(step)otherwise

其中 step 是连续位置变化量。


二、MATLAB 代码

2.1 主函数:binary_gwo.m

function[bestPos,bestFit,convergenceCurve]=binary_gwo(fitnessFunc,dim,lb,ub,nPop,maxIter)% 二进制灰太狼优化器(BGWO)% 输入:% fitnessFunc - 适应度函数句柄 @(x) fitValue,x 为二进制向量 (1×dim)% dim - 问题维度% lb, ub - 边界(通常 0 和 1,但可保留)% nPop - 狼群数量% maxIter - 最大迭代次数% 输出:% bestPos - 最优二进制位置 (1×dim)% bestFit - 最优适应度值% convergenceCurve - 收敛曲线 (maxIter×1)% 初始化a=2;% 控制参数,从2线性递减到0positions=randi([01],nPop,dim);% 随机初始化二进制位置fitness=zeros(nPop,1);% 计算初始适应度fori=1:nPopfitness(i)=fitnessFunc(positions(i,:));end% 确定 α, β, δ 狼[fitnessSorted,idx]=sort(fitness);alphaPos=positions(idx(1),:);alphaFit=fitnessSorted(1);betaPos=positions(idx(2),:);betaFit=fitnessSorted(2);deltaPos=positions(idx(3),:);deltaFit=fitnessSorted(3);convergenceCurve=zeros(maxIter,1);%% 主循环fort=1:maxIter a=2-2*t/maxIter;% 线性递减fori=1:nPop% 对每个维度独立更新forj=1:dim% 计算三个头狼的引导分量(连续值)r1=rand;r2=rand;A1=2*a*r1-a;C1=2*r2;D_alpha=abs(C1*alphaPos(j)-positions(i,j));X1=alphaPos(j)-A1*D_alpha;r1=rand;r2=rand;A2=2*a*r1-a;C2=2*r2;D_beta=abs(C2*betaPos(j)-positions(i,j));X2=betaPos(j)-A2*D_beta;r1=rand;r2=rand;A3=2*a*r1-a;C3=2*r2;D_delta=abs(C3*deltaPos(j)-positions(i,j));X3=deltaPos(j)-A3*D_delta;% 连续位置平均值X_avg=(X1+X2+X3)/3;% V 形传递函数:V(x) = |tanh(x)|V=abs(tanh(X_avg));% 二进制翻转规则ifrand<Vpositions(i,j)=1-positions(i,j);end% 否则保持不变end% 边界处理(确保在 0/1)positions(i,:)=round(positions(i,:));positions(i,:)=max(lb,min(ub,positions(i,:)));% 评估新位置fitness(i)=fitnessFunc(positions(i,:));end% 更新 α, β, δ[fitnessSorted,idx]=sort(fitness);iffitnessSorted(1)<alphaFit alphaPos=positions(idx(1),:);alphaFit=fitnessSorted(1);endiffitnessSorted(2)<betaFit betaPos=positions(idx(2),:);betaFit=fitnessSorted(2);endiffitnessSorted(3)<deltaFit deltaPos=positions(idx(3),:);deltaFit=fitnessSorted(3);endconvergenceCurve(t)=alphaFit;% 显示进度ifmod(t,50)==0fprintf('迭代 %d, 最佳适应度 = %.4e\n',t,alphaFit);endendbestPos=alphaPos;bestFit=alphaFit;end

2.2 适应度函数示例(二进制 Sphere 函数)

functionfit=binary_sphere(x)% 二进制 Sphere 函数:将二进制串解释为整数,然后计算平方和% 用于测试 BGWOdec=bi2de(x,'left-msb');% 二进制转十进制fit=dec^2;% 极小值为 0end

2.3 特征选择适应度示例(分类错误率)

functionerror=feature_selection_fitness(x,X_train,y_train,X_val,y_val)% x: 二进制向量,1 表示选择该特征% 使用 KNN 分类器评估(无需工具箱,用简单距离)selected=logical(x);ifsum(selected)==0error=1;% 未选择任何特征,错误率最大return;end% 训练集和验证集X_tr=X_train(:,selected);X_va=X_val(:,selected);% 简单最近邻(1-NN)pred=knn_predict(X_tr,y_train,X_va);error=sum(pred~=y_val)/length(y_val);endfunctionpred=knn_predict(X_train,y_train,X_test)nTest=size(X_test,1);pred=zeros(nTest,1);fori=1:nTest dist=sum((X_train-X_test(i,:)).^2,2);[~,idx]=min(dist);pred(i)=y_train(idx);endend

2.4 演示脚本:demo_binary_gwo.m

%% 二进制灰太狼优化器演示clear;clc;close all;% 问题设置dim=10;% 维度lb=0;ub=1;% 二进制边界nPop=30;% 狼群数量maxIter=100;% 最大迭代次数% 适应度函数(二进制 Sphere)fitnessFunc=@(x)binary_sphere(x);% 运行 BGWO[bestPos,bestFit,curve]=binary_gwo(fitnessFunc,dim,lb,ub,nPop,maxIter);fprintf('\n最优位置: %s\n',mat2str(bestPos));fprintf('最优适应度: %.4e\n',bestFit);% 收敛曲线figure;semilogy(curve,'b-','LineWidth',2);xlabel('迭代次数');ylabel('适应度值');title('BGWO 收敛曲线');grid on;

三、运行说明

  1. 将上述所有函数保存为.m文件(文件名与函数名一致)。
  2. 运行demo_binary_gwo.m
  3. 程序将显示最优二进制串和适应度值,以及收敛曲线。

参考代码 实现二进制灰太狼优化器www.youwenfan.com/contentcsv/81248.html

四、关键参数调优

参数作用建议值
nPop狼群规模20 ~ 50
maxIter最大迭代次数50 ~ 500(视维度而定)
传递函数V 形 / S 形V 形(`
边界处理确保 0/1使用round+max/min钳位

五、扩展建议

  1. S 形传递函数S(x) = 1/(1+exp(-x)),然后if rand < S(x), x=1; else x=0; end
  2. 混合策略:引入交叉/变异操作增加多样性。
  3. 多目标 BGWO:修改为 Pareto 前沿优化。
  4. 并行计算:使用parfor加速适应度评估。
http://www.gsyq.cn/news/1544028.html

相关文章:

  • 第3.2章:StarRocks数据导入--Insert into的避坑指南与性能调优
  • OpenWrt之DHCP:从协议原理到家庭网络实战配置
  • 2026 萍乡黄金回收五家门店横评榜单,多门店优缺点全面对比解析 - 资讯纵览
  • 上海厨卫快速焕新服务哪家有保障 - 资讯纵览
  • 空号检测哪家服务商好?2026技术指标对比与接入实战
  • NSK SFT8016-7.5极限重载丝杠解析
  • 做安防防盗用的东莞包胶弹簧钢丝绳厂家哪家好 2026深度选型指南 - 资讯速览
  • 5个实体店常见痛点,教你选对创意灯箱广告牌 - 品牌报告
  • CVE-2026-4020:一场伪装成「众人」的单人狩猎
  • 字节推出 Seedance 2.0 Mini,AI视频生成成本再砍半
  • Kinetis ADC硬件触发与低功耗应用实战解析
  • 【IEEE出版、往届均已检索】第五届航空航天工程与系统国际研讨会(ISAES 2026)
  • 如何优雅保存微信聊天记录:让数字记忆成为你的个人AI训练素材
  • Android 17正式版上线支持悬浮应用
  • 如何快速获取网盘直链:九大平台免费下载助手终极指南
  • 7th [math] 2026.06.17
  • 深耕湾区二十载,便民筑梦合家欢 —— 本土连锁便利店头部品牌深度解析 - GrowthUME
  • 省心处理闲置包包,汇总沪上包包回收优质门店,业内公认优选榜单 - 奢品小当家
  • 华为光猫配置解密终极指南:5分钟掌握配置文件破解技巧
  • 2026年珠海装修公司选择指南:五大品牌硬装与定制一体化能力横向对比 - 品牌评测研究中心
  • JAVA核心语法与编码规范Day1
  • 2026年福清家具店推荐榜:口碑与实力双优的TOP10 - 资讯速览
  • ReVanced Patches:如何用开源协作打造完美的Android应用定制体验
  • 第七十一天
  • 2026榜单:武汉收钱吧办理技术领先公司TOP5揭晓 - 资讯纵览
  • 东莞拼多多培训性价比高的学校
  • 2026杭州装修公司哪家好:二手房重装与学区房长期自住品牌选择指南 - 品牌评测研究中心
  • 如何快速掌握LX Music音源:跨平台高品质音乐聚合的完整指南
  • 终极免费方案:3分钟搞定CAJ转PDF,让学术文献真正自由流通
  • 2026年塑料化工桶厂家推荐榜:闭口/加厚/耐酸碱/200L-25L大容量化工桶品牌优选 - 品牌发掘