预测模型参数的选取对其泛化能力和预测准确度,起着至关重要作用。基于径向基核函数的最小二乘支持向量机参数主要涉及惩罚因子和核函数参数,这两个参数的选择将直接影响最小二乘支持向量机的学习和泛化能力。为了提高最小二乘支持向量机的预测结果,文章用灰狼优化算法对其参数寻优,建立软件老化预测模型。通过实验证明了该模型,对软件老化的预测表现出很好的效果。
遗留在软件中的缺陷会随软件系统长期持续运行造成计算机内存泄漏、舍入误差积累、文件锁未释放等现象发生,导致系统性能衰退甚至崩溃。这些软件老化现象的发生不仅降低了系统可靠性,严重时还会危害人的生命财产安全。为了减轻软件老化带来的危害,对软件老化趋势进行预测,采取抗衰策略避免软件老化现象的发生尤为重要[1]。
国内外很多科研机构,如贝尔实验室、IBM、南京大学、武汉大学[2]、西安交通大学[3]等,都对软件老化展开了深入研究,并取得了一些成果。他們研究的主要方向是通过对软件老化趋势的预测,找到软件抗衰策略最佳执行时机。
本文以Tomcat服务器为研究对象,监测Tomcat运行情况,收集系统性能参数,建立基于灰狼优化算法的最小二乘支持向量机软件老化预测模型。预测软件运行状态,确定软件抗衰策略执行时机。
1 最小二乘支持向量机
支持向量机(Support Vector Machine,SVM)是由Cortes和Vapnik[4]提出的。SVM以VC维理论和结构风险最小化原理为基础,可以很好地解决小样本、非线性、高维数和局部极小值等问题。
当训练样本数目越多,SVM求解二次规划问题越复杂,模型训练时间过长。Snykens等[5]提出最小二乘支持向量机(Least Squares Support Vector Machine,LSSVM),艮P在SVM的基础上用等式约束条件代替不等式约束,将二次规划问题转化为线性方程组问题,很大程度上的避免了 SVM大量的复杂计算,降低了训练难度。近年来LSSVM广泛应用于回归估计和非线性建模等领域,取得了良好的预测效果。
本文采用径向基核函数作为LSSVM模型的核函数。基于径向基核函数的LSSVM算法参数主要涉及惩罚因子C和核函数参数〃,本文采用灰狼优化算法对LSSVM的参数寻优。
2 灰狼优化算法
2014年,Mirjalili等[6]提出灰狼优化(Grey WolfOptimizer,GWO)算法,GWO算法通过模拟自然界灰狼的等级制度和捕食策略,寻找最优值。GWO算法以快速收敛性、调节参数少,在求解函数优化问题中表现出更加优越性而备受关注。该方法在全局搜索性、收敛性等方面优于粒子群优化算法、差分进化算法和引力搜索算法,并在特征子集选择、表面波参数优化等领域广泛应用。
2.1 灰狼优化算法原理
灰狼个体间通过协同合作来实现种群的繁荣发展,尤其是在捕猎过程中灰狼群体有着严格的金字塔式社会等级制度。等级最高的狼为α,剩下的灰狼个体被依次被标记为β,δ,ω,它们协同合作进行捕食。
在整个灰狼群体中,α狼扮演捕猎过程中领导者的角色,负责狩猎过程中的决策及管理整个狼群;β狼和δ狼是适应度次佳的群体,它们协助α狼对整个狼群进行管理,在狩猎过程中拥有决策权;剩余灰狼个体被定义为ω,协助α,β,δ对猎物进行攻击。
2.2 灰狼优化算法描述
GWO算法模仿狼群狩猎行为将整个狩猎的过程分为包围、追捕、攻击3个阶段,捕获猎物的过程就是寻找最优解的过程。假设灰狼所处的解空间是V维,灰狼群体X由N个灰狼个体组成,即X=[Xi;X2,…,XN];对于灰狼个体Xi(1≤i≤N)来说,它在V维空间中的位置Xi=[Xi1;Xi2,…,XiV],该灰狼个体位置与猎物所处位置的距离由适应度来衡量,距离越小适应度越大。GWO算法寻优过程如下。
2.2.1 包围
首先对猎物进行包围,在此过程中猎物与灰狼之间的距离用数学模型表示为:
其中:Xp(m)为第m次迭代后猎物位置,X(m)为灰狼位置,D为灰狼和猎物之间的距离,A和C分别是收敛因子和摆动因子,计算公式为:
2.2.2 追捕
GWO算法的寻优过程是根据α,β和δ的位置,来定位猎物位置。ω狼在α,β,δ狼的引导下对猎物进行追捕,根据当前最佳搜索单位的位置更新它们各自位置,并根据更新后α,β,δ位置重新确定猎物位置。狼群个体位置会随猎物的逃跑而改变,此阶段更新过程的数学描述为:
2.2.3 攻击
狼群对猎物进行攻击并捕获猎物,得到最优解。该过程通过式(2)中递减实现。当1≤∣A∣,表明狼群会更加接近猎物,这时狼群就会缩小搜索范围进行局部搜索;当1<∣A∣,狼群就会朝远离猎物方向分散开,扩大搜索范围进行全局搜索
tic % 计时 %% 清空环境导入数据 clear clc close all format long load wndspd %% GWO-SVR input_train=[ 560.318,1710.53; 562.267,1595.17; 564.511,1479.78; 566.909,1363.74; 569.256,1247.72; 571.847,1131.3; 574.528,1015.33; 673.834,1827.52; 678.13,1597.84; 680.534,1482.11; 683.001,1366.24; 685.534,1250.1; 688.026,1133.91; 690.841,1017.81; 789.313,1830.18; 791.618,1715.56; 796.509,1484.76; 799.097,1368.85; 801.674,1252.76; 804.215,1136.49; 806.928,1020.41; 904.711,1832.73; 907.196,1718.05; 909.807,1603.01; 915.127,1371.43; 917.75,1255.36; 920.417,1139.16; 923.149,1023.09; 1020.18,1835.16; 1022.94,1720.67; 1025.63,1605.48; 1028.4,1489.91; 1033.81,1258.06; 1036.42,1141.89; 1039.11,1025.92; 1135.36,1837.45; 1138.33,1722.94; 1141.35,1607.96; 1144.25,1492.43; 1147.03,1376.63; 1152.23,1144.56; 1154.83,1028.73; 1250.31,1839.19; 1253.44,1725.01; 1256.74,1610.12; 1259.78,1494.74; 1262.67,1379.1; 1265.43,1263.29; 1270.48,1031.58; 1364.32,1840.51; 1367.94,1726.52; 1371.2,1611.99; 1374.43,1496.85; 1377.53,1381.5; 1380.4,1265.81; 1382.89,1150.18; 1477.65,1841.49; 1481.34,1727.86; 1485.07,1613.64; 1488.44,1498.81; 1491.57,1383.71; 1494.47,1268.49; 1497.11,1153.04; 1590.49,1842.51; 1594.53,1729.18; 1598.15,1615.15; 1601.61,1500.72; 1604.72,1385.93; 1607.78,1271.04; 1610.43,1155.93; 1702.82,1843.56; 1706.88,1730.52; 1710.65,1616.79; 1714.29,1502.66; 1717.69,1388.22; 1720.81,1273.68; 1723.77,1158.8; ]; input_test=[558.317,1825.04; 675.909,1712.89; 793.979,1600.35; 912.466,1487.32; 1031.17,1374.03; 1149.79,1260.68; 1268.05,1147.33; 1385.36,1034.68;1499.33,1037.87;1613.11,1040.92;1726.27,1044.19;]; output_train=[ 235,175; 235,190; 235,205; 235,220; 235,235; 235,250; 235,265; 250,160; 250,190; 250,205; 250,220; 250,235; 250,250; 250,265; 265,160; 265,175; 265,205; 265,220; 265,235; 265,250; 265,265; 270,160; 270,175; 270,190; 270,220; 270,235; 270,250; 270,265; 285,160; 285,175; 285,190; 285,205; 285,235; 285,250; 285,265; 290,160; 290,175; 290,190; 290,205; 290,220; 290,250; 290,265; 305,160; 305,175; 305,190; 305,205; 305,220; 305,235; 305,265; 320,160; 320,175; 320,190; 320,205; 320,220; 320,235; 320,250; 335,160; 335,175; 335,190; 335,205; 335,220; 335,235; 335,250; 350,160; 350,175; 350,190; 350,205; 350,220; 350,235; 350,250; 365,160; 365,175; 365,190; 365,205; 365,220; 365,235; 365,250; ]; output_test=[235,160; 250,175; 265,190;270,205; 285,220; 290,235; 305,250; 320,265; 335,265; 350,265; 365,265;]; % 生成待回归的数据 x = [0.1,0.1;0.2,0.2;0.3,0.3;0.4,0.4;0.5,0.5;0.6,0.6;0.7,0.7;0.8,0.8;0.9,0.9;1,1]; y = [10,10;20,20;30,30;40,40;50,50;60,60;70,70;80,80;90,90;100,100]; X = input_train; Y = output_train; Xt = input_test; Yt = output_test; %% 利用灰狼算法选择最佳的SVR参数 SearchAgents_no=60; % 狼群数量 Max_iteration=500; % 最大迭代次数 dim=2; % 此例需要优化两个参数c和g lb=[0.1,0.1]; % 参数取值下界 ub=[100,100]; % 参数取值上界 Alpha_pos=zeros(1,dim); % 初始化Alpha狼的位置 Alpha_score=inf; % 初始化Alpha狼的目标函数值,change this to -inf for maximization problems Beta_pos=zeros(1,dim); % 初始化Beta狼的位置 Beta_score=inf; % 初始化Beta狼的目标函数值,change this to -inf for maximization problems Delta_pos=zeros(1,dim); % 初始化Delta狼的位置 Delta_score=inf; % 初始化Delta狼的目标函数值,change this to -inf for maximization problems Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iteration); l=0; % 循环计数器 % %% SVM网络回归预测 % [output_test_pre,acc,~]=svmpredict(output_test',input_test',model_gwo_svr); % SVM模型预测及其精度 % test_pre=mapminmax('reverse',output_test_pre',rule2); % test_pre = test_pre'; % % gam = [bestc bestc]; % Regularization parameter % sig2 =[bestg bestg]; % model = initlssvm(X,Y,type,gam,sig2,kernel); % 模型初始化 % model = trainlssvm(model); % 训练 % Yp = simlssvm(model,Xt); % 回归 plot(1:length(Yt),Yt,'r+:',1:length(Yp),Yp,'bo:') title('+为真实值,o为预测值') % err_pre=wndspd(104:end)-test_pre; % figure('Name','测试数据残差图') % set(gcf,'unit','centimeters','position',[0.5,5,30,5]) % plot(err_pre,'*-'); % figure('Name','原始-预测图') % plot(test_pre,'*r-');hold on;plot(wndspd(104:end),'bo-'); % legend('预测','原始') % set(gcf,'unit','centimeters','position',[0.5,13,30,5]) % % result=[wndspd(104:end),test_pre] % % MAE=mymae(wndspd(104:end),test_pre) % MSE=mymse(wndspd(104:end),test_pre) % MAPE=mymape(wndspd(104:end),test_pre) %% 显示程序运行时间 toc