Skip to content

Commit 7884599

Browse files
committed
first commit, first version
0 parents  commit 7884599

19 files changed

+581
-0
lines changed

NNCSAPSO.m

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
function [xm,fv,Pbest] = NNCSAPSO(x,hiddennum,net,Data_input,Data_target,N,w,c1,c2,M,D)
2+
3+
% 用混沌公式更新粒子群算法中的随机数参数r的融合算法
4+
5+
xmax = 1*ones(1,D); % 粒子最大位置
6+
xmin = - xmax; % 粒子最小位置
7+
vmax = 0.1*ones(1,D);% 粒子最大速度
8+
vmin = - vmax; % 粒子最小速度
9+
wmax = 0.9;
10+
wmin = 0.4;
11+
%% 模拟退火参数设置
12+
T = 1000;
13+
alpha = 0.98;
14+
%% 初始化粒子位移&速度
15+
for i = 1:N
16+
for j = 1:D
17+
x(i,j)=rand;
18+
v(i,j)=rand;
19+
end
20+
end
21+
%% 初始化适应度值
22+
for i = 1:N
23+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
24+
y(i,:)=x(i,:);
25+
end
26+
pg = x(N,:); % 全局最优位置
27+
for i = 1:(N-1)
28+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
29+
pg=x(i,:);
30+
end
31+
end
32+
r = rand;
33+
%% 迭代寻优
34+
for t=1:M
35+
for i = 1:N
36+
% w = wmax - (t * (wmax - wmin))/M;
37+
% 混沌化粒子群参数
38+
r = 4 * r * (1-r);
39+
w = 4 * w * (1-w);
40+
% 速度更新
41+
v(i,:)=w * v(i,:) + c1 * r * (y(i,:)-x(i,:)) + c2 * (1-r) * (pg-x(i,:));
42+
43+
% 速度范围限制
44+
if v(i,:) > vmax
45+
v(i,:) = vmax;
46+
end
47+
if v(i,:) < vmin
48+
v(i,:) = vmin;
49+
end
50+
% 位置更新
51+
x(i,:)=x(i,:)+v(i,:);
52+
% 位置范围限制
53+
if x(i,:) > xmax
54+
x(i,:) = xmax;
55+
end
56+
if x(i,:) < xmin
57+
x(i,:) = xmin;
58+
end
59+
delta = nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) - p(i);
60+
if delta < 0 || exp(-delta/T) > rand
61+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
62+
y(i,:)=x(i,:);
63+
end
64+
if p(i) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
65+
pg=y(i,:);
66+
T = T * alpha;
67+
end
68+
end
69+
Pbest(t)=nnfitness(pg,hiddennum,net,Data_input,Data_target); % 保留每一次迭代的最优适应度值
70+
end
71+
xm = pg; % 最优位置
72+
fv = nnfitness(pg,hiddennum,net,Data_input,Data_target);% 最优位置对应的最优适应度值,即函数最优解(最小值)

NNCSAPSO2.m

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
function [xm,fv,Pbest] = NNCSAPSO2(x,hiddennum,net,Data_input,Data_target,N,w,c1,c2,M,D)
2+
3+
% 用混沌局部搜索的方式做算法融合
4+
%% 粒子群参数设置
5+
xmax = 1*ones(1,D);
6+
xmin = - xmax;
7+
vmax = 0.1*ones(1,D);
8+
vmin = - vmax;
9+
wmax = 0.9;
10+
wmin = 0.4;
11+
%% 混沌局部最大迭代步数
12+
MaxC = 8;
13+
%% 模拟退火参数设置
14+
T = 1000;
15+
alpha = 0.98;
16+
% 初始化粒子位移&速度
17+
for i = 1:N
18+
for j = 1:D
19+
x(i,j)=rand;
20+
v(i,j)=rand;
21+
end
22+
end
23+
% 初始化适应度值
24+
for i = 1:N
25+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
26+
y(i,:)=x(i,:);
27+
end
28+
pg = x(N,:); % 全局最优位置
29+
for i = 1:(N-1)
30+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
31+
pg=x(i,:);
32+
end
33+
end
34+
r = rand;
35+
%% 迭代寻优
36+
for t=1:M
37+
%% 模拟退火算法求最优位置
38+
f_gb = nnfitness(pg,hiddennum,net,Data_input,Data_target);
39+
for i = 1:N % 当前温度下各个粒子的适应度
40+
Tfitness(i) = exp(- (p(i) - f_gb)/T);
41+
end
42+
SumTfitness = sum(Tfitness);
43+
Tfitness = Tfitness./SumTfitness;
44+
for i = 1:N
45+
ComFitness(i)=sum(Tfitness(1:i));
46+
if rand <= ComFitness(i) % 轮盘赌方式确定全局最优的某个替代值
47+
pg = x(i,:);
48+
break;
49+
end
50+
end
51+
%% 粒子群算法迭代开始
52+
for i = 1:N
53+
w = wmax - (t * (wmax - wmin))/M;
54+
% 速度更新
55+
v(i,:)=w * v(i,:) + c1 * r * (y(i,:)-x(i,:)) + c2 * r * (pg-x(i,:));
56+
57+
% 速度范围限制
58+
if v(i,:) > vmax
59+
v(i,:) = vmax;
60+
end
61+
if v(i,:) < vmin
62+
v(i,:) = vmin;
63+
end
64+
% 位置更新
65+
x(i,:)=x(i,:)+v(i,:);
66+
% 位置范围限制
67+
if x(i,:) > xmax
68+
x(i,:) = xmax;
69+
end
70+
if x(i,:) < xmin
71+
x(i,:) = xmin;
72+
end
73+
f_p(i) = nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
74+
end
75+
76+
%% 混沌局部搜索
77+
[sort_f_p,index] = sort(f_p);
78+
Nbest = floor(N * 0.2);
79+
for n = 1:Nbest
80+
Tmp_x = x(index(n),:);
81+
for k = 1:MaxC
82+
for i = 1:D
83+
Cx(i) = (Tmp_x(1,i) - xmin(i)) / (Tmp_x(1,i) - xmax(i));
84+
Cx(i) = 4 * Cx(i) * (1 - Cx(i));
85+
Tmp_x(1,i) = Tmp_x(1,i) + Cx(i) * (xmax(i) - xmin(i));
86+
end
87+
fcs = nnfitness(Tmp_x,hiddennum,net,Data_input,Data_target);
88+
if fcs < sort_f_p(n) % 对混沌搜索后的决策变量进行评估
89+
x(index(n),:) = Tmp_x;
90+
break;
91+
end
92+
end
93+
x(index(n),:) = Tmp_x;
94+
end
95+
for s = 1:D % 收缩搜索区域
96+
xmin(s) = max(xmin(s),pg(s) - rand * (xmax(s) - xmin(s)) );
97+
xmax(s) = min(xmax(s),pg(s) + rand * (xmax(s) - xmin(s)) );
98+
end
99+
x(1:Nbest,:) = x(index(1:Nbest),:);
100+
for i = (Nbest + 1):N % 随机产生剩余80%微粒
101+
for j = D
102+
x(i,j) = xmin(j) + rand * (xmax(j) - xmin(j)); % 随机初始化位置
103+
v(i,j) = rand; % 随机初始化速度
104+
end
105+
end
106+
%% 更新个体最优位置 群体最优位置
107+
for i = 1:N
108+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < p(i)
109+
p(i) = nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
110+
y(i,:) = x(i,:);
111+
end
112+
if p(i) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
113+
pg = y(i,:);
114+
end
115+
end
116+
T = T * alpha; % 模拟退火降温操作
117+
Pbest(t)=nnfitness(pg,hiddennum,net,Data_input,Data_target); % 保留每一次迭代的最优适应度值
118+
end
119+
xm = pg; % 最优位置
120+
fv = nnfitness(pg,hiddennum,net,Data_input,Data_target);% 最优位置对应的最优适应度值,即函数最优解(最小值)

NNPSO.m

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
function [xm,fv,Pbest] = NNPSO(x,hiddennum,net,Data_input,Data_target,N,w,c1,c2,M,D)
2+
xmax = 1*ones(1,D);
3+
xmin = - xmax;
4+
vmax = 0.1*ones(1,D);
5+
vmin = - vmax;
6+
7+
% 初始化粒子位移&速度
8+
for i = 1:N
9+
for j = 1:D
10+
x(i,j)=rand;
11+
v(i,j)=rand;
12+
end
13+
end
14+
15+
% 初始化适应度值
16+
for i = 1:N
17+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
18+
y(i,:)=x(i,:);
19+
end
20+
pg = x(N,:); % 全局最优位置
21+
for i = 1:(N-1)
22+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
23+
pg=x(i,:);
24+
end
25+
end
26+
27+
%% 迭代寻优
28+
for t=1:M
29+
for i = 1:N
30+
% 速度更新
31+
v(i,:)=w * v(i,:) + c1 * rand * (y(i,:)-x(i,:)) + c2 * rand * (pg-x(i,:));
32+
% 速度范围限制
33+
if v(i,:) > vmax
34+
v(i,:) = vmax;
35+
end
36+
if v(i,:) < vmin
37+
v(i,:) = vmin;
38+
end
39+
% 位置更新
40+
x(i,:)=x(i,:)+v(i,:);
41+
% 位置范围限制
42+
if x(i,:) > xmax
43+
x(i,:) = xmax;
44+
end
45+
if x(i,:) < xmin
46+
x(i,:) = xmin;
47+
end
48+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < p(i)
49+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
50+
y(i,:)=x(i,:);
51+
end
52+
if p(i) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
53+
pg=y(i,:);
54+
end
55+
end
56+
Pbest(t)=nnfitness(pg,hiddennum,net,Data_input,Data_target); % 保留每一次迭代的最优适应度值
57+
end
58+
xm = pg; % 最优位置
59+
fv = nnfitness(pg,hiddennum,net,Data_input,Data_target);% 最优位置对应的最优适应度值,即函数最优解(最小值)

NNSAPSO.m

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
function [xm,fv,Pbest] = NNSAPSO(x,hiddennum,net,Data_input,Data_target,N,w,c1,c2,M,D)
2+
xmax = 1*ones(1,D); % 粒子最大位置
3+
xmin = - xmax; % 粒子最小位置
4+
vmax = 0.1*ones(1,D);% 粒子最大速度
5+
vmin = - vmax; % 粒子最小速度
6+
wmax = 0.9;
7+
wmin = 0.4;
8+
%% 模拟退火参数设置
9+
T = 1000;
10+
alpha = 0.98;
11+
%% 初始化粒子位移&速度
12+
for i = 1:N
13+
for j = 1:D
14+
x(i,j)=rand;
15+
v(i,j)=rand;
16+
end
17+
end
18+
%% 初始化适应度值
19+
for i = 1:N
20+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
21+
y(i,:)=x(i,:);
22+
end
23+
pg = x(N,:); % 全局最优位置
24+
for i = 1:(N-1)
25+
if nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
26+
pg=x(i,:);
27+
end
28+
end
29+
30+
%% 迭代寻优
31+
for t=1:M
32+
for i = 1:N
33+
w = wmax - (t * (wmax - wmin))/M;
34+
% 速度更新
35+
v(i,:)=w * v(i,:) + c1 * rand * (y(i,:)-x(i,:)) + c2 * rand * (pg-x(i,:));
36+
% 速度范围限制
37+
if v(i,:) > vmax
38+
v(i,:) = vmax;
39+
end
40+
if v(i,:) < vmin
41+
v(i,:) = vmin;
42+
end
43+
% 位置更新
44+
x(i,:)=x(i,:)+v(i,:);
45+
% 位置范围限制
46+
if x(i,:) > xmax
47+
x(i,:) = xmax;
48+
end
49+
if x(i,:) < xmin
50+
x(i,:) = xmin;
51+
end
52+
delta = nnfitness(x(i,:),hiddennum,net,Data_input,Data_target) - p(i);
53+
if delta < 0 || exp(-delta/T) > rand
54+
p(i)=nnfitness(x(i,:),hiddennum,net,Data_input,Data_target);
55+
y(i,:)=x(i,:);
56+
end
57+
if p(i) < nnfitness(pg,hiddennum,net,Data_input,Data_target)
58+
pg=y(i,:);
59+
T = T * alpha;
60+
end
61+
end
62+
Pbest(t)=nnfitness(pg,hiddennum,net,Data_input,Data_target); % 保留每一次迭代的最优适应度值
63+
end
64+
xm = pg; % 最优位置
65+
fv = nnfitness(pg,hiddennum,net,Data_input,Data_target);% 最优位置对应的最优适应度值,即函数最优解(最小值)

fun.m

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
function error = fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
2+
%该函数用来计算适应度值
3+
%x input 染色体信息
4+
%inputnum input 输入层节点数
5+
%outputnum input 隐含层节点数
6+
%net input 网络
7+
%inputn input 训练输入数据
8+
%outputn input 训练输出数据
9+
%error output 个体适应度值
10+
11+
%提取
12+
w1=x(1:inputnum*hiddennum);%取到输入层与隐含层连接的权值
13+
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);%隐含层神经元阈值
14+
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);%取到隐含层与输出层连接的权值
15+
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);%输出层神经元阈值
16+
17+
18+
%网络进化参数
19+
% net.trainParam.epochs=20;%迭代次数
20+
% net.trainParam.lr=0.1;%学习率
21+
% net.trainParam.goal=0.001;%最小目标值误差
22+
% net.trainParam.show=100;
23+
% net.trainParam.showWindow=0;
24+
25+
%网络权值赋值
26+
net.iw{1,1}=reshape(w1,hiddennum,inputnum);%将w1由1行inputnum*hiddennum列转为hiddennum行inputnum列的二维矩阵
27+
net.lw{2,1}=reshape(w2,outputnum,hiddennum);%更改矩阵的保存格式
28+
net.b{1}=reshape(B1,hiddennum,1);%1行hiddennum列,为隐含层的神经元阈值
29+
net.b{2}=reshape(B2,outputnum,1);
30+
31+
%网络训练
32+
% net=train(net,inputn,outputn);
33+
34+
an=sim(net,inputn);
35+
% 求平均值,即化为1行100列
36+
test_sim = zeros(1,outputnum);
37+
for i = 1:outputnum
38+
test_sim (i)= sum(an(:,i))/outputnum;
39+
end
40+
error1=sum((abs(test_sim-outputn)).^2);%染色体对应的适应度值
41+
% 求平均值,即化为一个具体的适应度值
42+
error = sum(error1)/outputnum;
43+
44+
45+

0 commit comments

Comments
 (0)