当前位置: 首页 > 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.jsqmd.com/news/1032134/

相关文章:

  • 2026 淮南中专招生官方资料,淮南职业技术学校中专部简章 + 招生热线 - 辛云教育资讯
  • 第3.2章:StarRocks数据导入--Insert into的避坑指南与性能调优
  • OpenWrt之DHCP:从协议原理到家庭网络实战配置
  • 福泰门窗谈金刚网纱窗要装吗
  • 广州番禺集装箱厂家怎么选?中韵远创集装箱,住人箱租赁 / 定制 / 回收维修一站式实体场地服务商 - 资讯速览
  • 如何在Windows上获得Mac级字体体验:终极美化指南
  • 2026 萍乡黄金回收五家门店横评榜单,多门店优缺点全面对比解析 - 资讯纵览
  • 行测真题下载|免费|2026最新
  • 做一个“不操心”的PI:我把采购交给了星元素甄选
  • 2026南昌高净值人群及复杂婚姻纠纷:6位资深律师精准选型与维权解决方案 - 资讯速览
  • 2026年 广州PA6T/PA9T/PA10T/PA612/PA46/改性PA6/PA6GF30/阻燃PA6/PA6加纤厂家精选榜单:耐高温与高刚性材料公司实力推荐 - 品牌发掘
  • 上海厨卫快速焕新服务哪家有保障 - 资讯纵览
  • 减轻家庭负担!淮南职业技术学校中专部 2026 公办免学费招生简章官方发布 - 辛云教育资讯
  • 2026年 塑料桶优选榜单:化工/储水/危废/尿素/工业桶源头厂家,吹塑卧式立式牛筋桶实力工厂推荐! - 品牌发掘
  • 空号检测哪家服务商好?2026技术指标对比与接入实战
  • 2026 优质水管品牌排行榜,索邦管领衔推荐 - 资讯速览
  • 终极免费音乐解锁指南:3步解决所有加密音乐格式问题
  • 如何快速掌握AI-Scientist:全自动科研助手的完整指南
  • 2026年,想知道太原私立学校哪家口碑靠谱?联系电话多少! - GrowthUME
  • CodeWarrior内核感知调试API实战:从COM插件到RTOS线程透视
  • WeChatMsg:3步轻松备份微信聊天记录,让珍贵对话永不丢失 [特殊字符]
  • 终极免费开源字体指南:5分钟掌握Montserrat专业级几何无衬线字体
  • Buf终极指南:重构Protobuf开发工作流的现代工具链
  • DeepSeek-V4实战指南:长上下文稳定性与中文专业语义解析
  • NSK SFT8016-7.5极限重载丝杠解析
  • OpenCore Legacy Patcher深度解析:逆向工程破解macOS硬件限制的技术实现
  • 5个实体店常见痛点,教你选对创意灯箱广告牌 - 品牌报告
  • 2026年储能竞争格局与项目可研,找谁做专业研究? - 资讯纵览
  • 2026年石家庄GEO推荐:从技术纵深到落地实效,谁是AI搜索时代的优选伙伴? - 资讯纵览
  • 做安防防盗用的东莞包胶弹簧钢丝绳厂家哪家好 2026深度选型指南 - 资讯速览