1function [bestc,bestg,test_pre]=my_HGWO_SVR(para,input_train,output_train,input_test,output_test)
2
3
4
5
6
7
8
9
10[input_train,rule1]=mapminmax(input_train');
11[output_train,rule2]=mapminmax(output_train');
12input_test=mapminmax('apply',input_test',rule1);
13output_test=mapminmax('apply',output_test',rule2);
14input_train=input_train';
15output_train=output_train';
16input_test=input_test';
17output_test=output_test';
18
19nPop=para(1);
20MaxIt=para(2);
21nVar=2;
22VarSize=[1,nVar];
23beta_min=para(3);
24beta_max=para(4);
25pCR=para(5);
26lb=[0.01,0.01];
27ub=[100,100];
28
29
30parent_Position=init_individual(lb,ub,nVar,nPop);
31parent_Val=zeros(nPop,1);
32for i=1:nPop
33 parent_Val(i)=fobj(parent_Position(i,:),input_train,output_train,input_test,output_test);
34end
35
36mutant_Position=init_individual(lb,ub,nVar,nPop);
37mutant_Val=zeros(nPop,1);
38for i=1:nPop
39 mutant_Val(i)=fobj(mutant_Position(i,:),input_train,output_train,input_test,output_test);
40end
41
42child_Position=init_individual(lb,ub,nVar,nPop);
43child_Val=zeros(nPop,1);
44for i=1:nPop
45 child_Val(i)=fobj(child_Position(i,:),input_train,output_train,input_test,output_test);
46end
47
48[~,sort_index]=sort(parent_Val);
49parent_Alpha_Position=parent_Position(sort_index(1),:);
50parent_Alpha_Val=parent_Val(sort_index(1));
51parent_Beta_Position=parent_Position(sort_index(2),:);
52parent_Delta_Position=parent_Position(sort_index(3),:);
53
54BestCost=zeros(1,MaxIt);
55BestCost(1)=parent_Alpha_Val;
56for it=1:MaxIt
57 a=2-it*((2)/MaxIt);
58
59 for par=1:nPop
60 for var=1:nVar
61
62 r1=rand();
63 r2=rand();
64 A1=2*a*r1-a;
65 C1=2*r2;
66 D_alpha=abs(C1*parent_Alpha_Position(var)-parent_Position(par,var));
67 X1=parent_Alpha_Position(var)-A1*D_alpha;
68
69 r1=rand();
70 r2=rand();
71 A2=2*a*r1-a;
72 C2=2*r2;
73 D_beta=abs(C2*parent_Beta_Position(var)-parent_Position(par,var));
74 X2=parent_Beta_Position(var)-A2*D_beta;
75
76 r1=rand();
77 r2=rand();
78 A3=2*a*r1-a;
79 C3=2*r2;
80 D_delta=abs(C3*parent_Delta_Position(var)-parent_Position(par,var));
81 X3=parent_Delta_Position(var)-A3*D_delta;
82
83 X=(X1+X2+X3)/3;
84 X=max(X,lb(var));
85 X=min(X,ub(var));
86 parent_Position(par,var)=X;
87 end
88 parent_Val(par)=fobj(parent_Position(par,:),input_train,output_train,input_test,output_test);
89 end
90
91 for mut=1:nPop
92 A=randperm(nPop);
93 A(A==i)=[];
94 a=A(1);
95 b=A(2);
96 c=A(3);
97 beta=unifrnd(beta_min,beta_max,VarSize);
98 y=parent_Position(a)+beta.*(parent_Position(b)-parent_Position(c));
99
100 y=max(y,lb);
101 y=min(y,ub);
102 mutant_Position(mut,:)=y;
103 end
104
105 for child=1:nPop
106 x=parent_Position(child,:);
107 y=mutant_Position(child,:);
108 z=zeros(size(x));
109 j0=randi([1,numel(x)]);
110 for var=1:numel(x)
111 if var==j0 || rand<=pCR
112 z(var)=y(var);
113 else
114 z(var)=x(var);
115 end
116 end
117 child_Position(child,:)=z;
118 child_Val(child)=fobj(z,input_train,output_train,input_test,output_test);
119 end
120
121 for par=1:nPop
122 if child_Val(par)<parent_Val(par)
123 parent_Val(par)=child_Val(par);
124 end
125 end
126
127 [~,sort_index]=sort(parent_Val);
128 parent_Alpha_Position=parent_Position(sort_index(1),:);
129 parent_Alpha_Val=parent_Val(sort_index(1));
130 parent_Beta_Position=parent_Position(sort_index(2),:);
131 parent_Delta_Position=parent_Position(sort_index(3),:);
132 BestCost(it)=parent_Alpha_Val;
133end
134bestc=parent_Alpha_Position(1,1);
135bestg=parent_Alpha_Position(1,2);
136
137plot(BestCost);
138xlabel('Iteration');
139ylabel('Best Val');
140grid on;
141
142cmd_cs_svr=['-s 3 -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
143model_cs_svr=svmtrain(output_train,input_train,cmd_cs_svr);
144
145[output_test_pre,~,decision_values]=svmpredict(output_test,input_test,model_cs_svr);
146test_pre=mapminmax('reverse',output_test_pre',rule2);
147test_pre = test_pre';
148plot(test_pre)
149xlabel('testpre');
150grid on;