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