📄 wx_performance_evaluation.m
字号:
function wx_performance_evaluation(data_source,data_name,data_result_name,train_epochs,hidden_layer_neural_num,name_train,name_simulate,max_rand_train_num,T1,load_or_train)
% wx_performance_evaluation('E:\data_045\','result_data.mdb','result.mdb',5000,10,[2 4 5],[1 3],10,[0.99,0.97,0.94,0.08,0.05,0.01],-1)
% total_table_num=9; % 表的总数;
% rand_total_num=4; % 随机生成的用于训练的表格数;
% data_source='E:\wangxing\data_045\'; % 获得要使用数据的路径;
% data_name='result_data.mdb';
% data_result_name='result.mdb';
% train_epochs=5000;
% hidden_layer_neural_num=10;
% max_rand_train_num=1;
% load_or_train==1;等于1为load,非1为训练;
% name_train=[2 4 5];
% name_simulate=[1 3];
close all;
clc;
parameters_num=3; % 设定输入特征的数目;
data_path=[data_source,data_name]; % 组合数据路径;
scale_value=[1000,1000,50000]; % 每个特征的比例系数;
colum=char('MAX_STRESS','min_stress','sum_stress'); % 每个特征的名称;
cycle=size(colum); % cycle为循环终止次数;
cite1='"'; % 在数据库连接中要使用的双引号;
cite2=''''; % 在数据库连接中要使用的单引号;
T=T1; % 首先赋值目标参数T;
for i=1:length(name_train)
table_name=['number',num2str(name_train(i))]; % 组合为表的名字;
for j=1:parameters_num
A=abs(wx_getarray(data_path,table_name,colum(j,:),-1)/scale_value(j)); % 调用wx_getarray函数获得一列的数据;
totalnum=size(A); % 获得A的大小;
feature(j,(i-1)*6+1)=A(1,1); % 一个表格中挑出的第一组数据;
feature(j,(i-1)*6+2)=A(1,5); % 一个表格中挑出的第二组数据;
feature(j,(i-1)*6+3)=A(1,10); % 一个表格中挑出的第三组数据;
feature(j,(i-1)*6+4)=A(1,totalnum(1,2)-9); % 一个表格中挑出的第四组数据;
feature(j,(i-1)*6+5)=A(1,totalnum(1,2)-4); % 一个表格中挑出的第五组数据;
feature(j,(i-1)*6+6)=A(1,totalnum(1,2)); % 一个表格中挑出的第六组数据;
clear ('A','totalnum');
end
if i>1,T=[T,T1];end % 组合目标参数;
end
range_inputvalue=zeros(parameters_num,1); % 确定输入向量的下限值;
range_inputvalue(:,2)=ones(parameters_num,1); % 确定输入向量的上限值;
for experiment_cycle_num=1:max_rand_train_num
net=newff(range_inputvalue,[hidden_layer_neural_num,1],{'tansig','logsig'},'traincgf'); % 创建BP网络
net.trainParam.epochs=train_epochs; % 设置训练次数;
net.trainParam.goal=0; % 训练设置目标;
net.trainParam.show=20000; % 设置200次显示一次;
net.trainParam.lr=0.1; % 设置学习率;
net.trainParam.minstep=1e-10;
% 确定保存数据及图像的路径;
goal_source=[data_source,'evaluation\',num2str(length(name_train)+length(name_simulate)),'table_',num2str(parameters_num),...
'parms_',num2str(train_epochs),'epochs_',num2str(hidden_layer_neural_num),'neural\'];
% 训练BP网络,获得权值和阀值;
if load_or_train==1
load([goal_source,'parameters_',num2str(experiment_cycle_num),'.mat']);
net.IW{1,1}=IW11;
net.b{1}=b1;
net.LW{1,1}=LW11;
net.b{2}=b2;
net.LW{2,1}=LW21;
else
net=train(net,feature,T);
% 记录网络的参数,并保存下来;
IW11=net.IW{1,1};
b1=net.b{1};
LW11=net.LW{1,1};
b2=net.b{2};
LW21=net.LW{2,1};
save([goal_source,'parameters_',num2str(experiment_cycle_num),'.mat'],'IW11','b1','LW11','b2','LW21'); % 保存经过训练后网络的参数;
end
% 对表进行仿真,并绘出图形;
total_table=[name_train name_simulate];
for k=1:length(total_table)
% 组合表名;
table_name=['number',num2str(total_table(k))];
% 获取每一个特征的所有数据;
for j=1:parameters_num
feature_simulate(j,:)=abs(wx_getarray(data_path,table_name,colum(j,:),-1)/scale_value(j));
end
y=sim(net,feature_simulate); % 对读到的数据特征进行仿真;
% 把仿真的结果存入到对应的表中;
% 调用wx_manipulate_access函数在已建立的result.mdb中创建相应表名
if experiment_cycle_num==1
% 如果experiment_cycle_num==1为真,则创建数据表名及相应的字段名;
sql=['create table ',table_name,'(cycle_num text,reliablity_1 text)'];
wx_manipulate_access(goal_source,data_result_name,sql);
% 把仿真的结果存储到指定的Access数据表中;
for j=1:length(y)
sql=['insert into ',table_name, '(cycle_num,reliablity_',num2str(experiment_cycle_num),') values (',cite2,num2str(j),cite2,',',cite2,num2str(y(j)),cite2,')'];
wx_manipulate_access(goal_source,data_result_name,sql);
end
% 如果
else
sql=['alter table ',table_name,' add reliablity_',num2str(experiment_cycle_num),' text'];
wx_manipulate_access(goal_source,data_result_name,sql);
for j=1:length(y);
sql=['update ',table_name,' set ','reliablity_',num2str(experiment_cycle_num),'=',cite2,num2str(y(j)),cite2];
sql=[sql,' where cycle_num=',cite2,num2str(j),cite2];
wx_manipulate_access(goal_source,data_result_name,sql);
end
end
% 横坐标x为寿命时间;
x=wx_getarray(data_path,table_name,'cyc_no',-1);
figure('name',[table_name,'_',num2str(experiment_cycle_num)],'numbertitle','off');
plot(x,y,'--rs','Marker','*');xlabel('时间','FontWeight','Bold','Fontsize',9);
ylabel('概率','FontWeight','Bold','Fontsize',9);
title(['第',num2str(total_table(k)),'组数据仿真'],'FontWeight','Bold','Fontsize',10);
% 把图形保存到指定的路径中;
saveas(gcf,[goal_source,[table_name,'_',num2str(experiment_cycle_num)],'.fig']);
clear('feature_simulate','y','x');
close all
end
clear('net')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -