BGWO 将连续 GWO 的位置更新通过 传递函数Transfer Function 映射到二进制空间适用于特征选择、维度缩减等离散优化问题。一、算法原理简述1.1 标准 GWO连续灰太狼群体分为四层α最优、β次优、δ第三优、ω其余。位置更新公式X(t1)XαXβXδ3−A⋅D\mathbf{X}(t1) \frac{\mathbf{X}_\alpha \mathbf{X}_\beta \mathbf{X}_\delta}{3} - A \cdot DX(t1)3Xα​Xβ​Xδ​​−A⋅D其中 (A2a⋅r1−aA 2a \cdot r_1 - aA2a⋅r1​−a)(C2⋅r2C 2 \cdot r_2C2⋅r2​)(aaa) 从 2 线性递减到 0。1.2 二进制映射BGWO使用V 形传递函数V-shaped transfer function将连续位置转换为 0/1V(x)∣tanh⁡(x)∣V(x) \left|\tanh(x)\right|V(x)∣tanh(x)∣位置更新规则Xnew{1−Xold,if randV(step)Xold,otherwiseX_{new} \begin{cases} 1 - X_{old}, \text{if } \text{rand} V(\text{step}) \\ X_{old}, \text{otherwise} \end{cases}Xnew​{1−Xold​,Xold​,​ifrandV(step)otherwise​其中 step 是连续位置变化量。二、MATLAB 代码2.1 主函数binary_gwo.mfunction[bestPos,bestFit,convergenceCurve]binary_gwo(fitnessFunc,dim,lb,ub,nPop,maxIter)% 二进制灰太狼优化器BGWO% 输入% fitnessFunc - 适应度函数句柄 (x) fitValuex 为二进制向量 (1×dim)% dim - 问题维度% lb, ub - 边界通常 0 和 1但可保留% nPop - 狼群数量% maxIter - 最大迭代次数% 输出% bestPos - 最优二进制位置 (1×dim)% bestFit - 最优适应度值% convergenceCurve - 收敛曲线 (maxIter×1)% 初始化a2;% 控制参数从2线性递减到0positionsrandi([01],nPop,dim);% 随机初始化二进制位置fitnesszeros(nPop,1);% 计算初始适应度fori1:nPopfitness(i)fitnessFunc(positions(i,:));end% 确定 α, β, δ 狼[fitnessSorted,idx]sort(fitness);alphaPospositions(idx(1),:);alphaFitfitnessSorted(1);betaPospositions(idx(2),:);betaFitfitnessSorted(2);deltaPospositions(idx(3),:);deltaFitfitnessSorted(3);convergenceCurvezeros(maxIter,1);%% 主循环fort1:maxIter a2-2*t/maxIter;% 线性递减fori1:nPop% 对每个维度独立更新forj1:dim% 计算三个头狼的引导分量连续值r1rand;r2rand;A12*a*r1-a;C12*r2;D_alphaabs(C1*alphaPos(j)-positions(i,j));X1alphaPos(j)-A1*D_alpha;r1rand;r2rand;A22*a*r1-a;C22*r2;D_betaabs(C2*betaPos(j)-positions(i,j));X2betaPos(j)-A2*D_beta;r1rand;r2rand;A32*a*r1-a;C32*r2;D_deltaabs(C3*deltaPos(j)-positions(i,j));X3deltaPos(j)-A3*D_delta;% 连续位置平均值X_avg(X1X2X3)/3;% V 形传递函数V(x) |tanh(x)|Vabs(tanh(X_avg));% 二进制翻转规则ifrandVpositions(i,j)1-positions(i,j);end% 否则保持不变end% 边界处理确保在 0/1positions(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 alphaPospositions(idx(1),:);alphaFitfitnessSorted(1);endiffitnessSorted(2)betaFit betaPospositions(idx(2),:);betaFitfitnessSorted(2);endiffitnessSorted(3)deltaFit deltaPospositions(idx(3),:);deltaFitfitnessSorted(3);endconvergenceCurve(t)alphaFit;% 显示进度ifmod(t,50)0fprintf(迭代 %d, 最佳适应度 %.4e\n,t,alphaFit);endendbestPosalphaPos;bestFitalphaFit;end2.2 适应度函数示例二进制 Sphere 函数functionfitbinary_sphere(x)% 二进制 Sphere 函数将二进制串解释为整数然后计算平方和% 用于测试 BGWOdecbi2de(x,left-msb);% 二进制转十进制fitdec^2;% 极小值为 0end2.3 特征选择适应度示例分类错误率functionerrorfeature_selection_fitness(x,X_train,y_train,X_val,y_val)% x: 二进制向量1 表示选择该特征% 使用 KNN 分类器评估无需工具箱用简单距离selectedlogical(x);ifsum(selected)0error1;% 未选择任何特征错误率最大return;end% 训练集和验证集X_trX_train(:,selected);X_vaX_val(:,selected);% 简单最近邻1-NNpredknn_predict(X_tr,y_train,X_va);errorsum(pred~y_val)/length(y_val);endfunctionpredknn_predict(X_train,y_train,X_test)nTestsize(X_test,1);predzeros(nTest,1);fori1:nTest distsum((X_train-X_test(i,:)).^2,2);[~,idx]min(dist);pred(i)y_train(idx);endend2.4 演示脚本demo_binary_gwo.m%% 二进制灰太狼优化器演示clear;clc;close all;% 问题设置dim10;% 维度lb0;ub1;% 二进制边界nPop30;% 狼群数量maxIter100;% 最大迭代次数% 适应度函数二进制 SpherefitnessFunc(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;三、运行说明将上述所有函数保存为.m文件文件名与函数名一致。运行demo_binary_gwo.m。程序将显示最优二进制串和适应度值以及收敛曲线。参考代码 实现二进制灰太狼优化器www.youwenfan.com/contentcsv/81248.html四、关键参数调优参数作用建议值nPop狼群规模20 ~ 50maxIter最大迭代次数50 ~ 500视维度而定传递函数V 形 / S 形V 形边界处理确保 0/1使用roundmax/min钳位五、扩展建议S 形传递函数S(x) 1/(1exp(-x))然后if rand S(x), x1; else x0; end。混合策略引入交叉/变异操作增加多样性。多目标 BGWO修改为 Pareto 前沿优化。并行计算使用parfor加速适应度评估。