源代码: public.h:细胞及BP网络类头文件
#ifndef PUBLIC_H #define PUBLIC_H //头文件 #include <QWidget> #include "qdebug.h" #include "QFile" #include "math.h" #include <time.h> //宏定义 //全局变量 //数据结构 //细胞 class _Cell { private: //输入数 int num_in; //输出数 int num_out; //输入 double *pt_in; //输出 double *pt_out; //输出,不加权 double out_no_w; //权 double *pt_w; //阈值 double threshold; //传递函数类型 int type_fun; //传递函数 double fun(double x); public: //初始化 //num1:输入数 //num2:输出数 _Cell(int num1 = 0,int num2 = 0); //设置输入数 void set_in_num(int num); //设置输出数 void set_out_num(int num); //返回输入数 int return_in_num(); //返回输出数 int return_out_num(); //返回权值 //num:指向的目标细胞 double return_w(int num); //返回当前阈值 double return_threshold(); //返回输入 //num为第num个输入 double return_in(int num); //设置输入 void set_in(double a,int num); //设置阈值 void set_threshold(double a); //设置权 void set_w(double a,int num); //设置传递函数类型 void set_fun(int num); //计算输出 void calc(); //返回输出 double output(int num); //返回输出不加权 double output_no_w(); }; //BP网络 class _BP_Net { private: //输入层细胞数 int num_in_layer; //隐藏层细胞数 int num_hide_layer; //输出层细胞数 int num_out_layer; //输入层细胞指针 _Cell *pt_in_layer_cell; //隐藏层细胞指针 _Cell *pt_hide_layer_cell; //输出层细胞指针 _Cell *pt_out_layer_cell; //学习速率 double g; public: //初始化 _BP_Net(int num_in = 0,int num_hide = 0,int num_out = 0); //设置输入层细胞数 void set_num_in_layer(int num); //设置隐藏层细胞数 void set_num_hide_layer(int num); //设置输出层细胞数 void set_num_out_layer(int num); //返回输入层细胞数 int return_num_in_layer(); //返回隐藏层细胞数 int return_num_hide_layer(); //返回输出层细胞数 int return_num_out_layer(); //返回权值 //i:层号,0输入层,1隐藏层,2输出层 //j:本层细胞号 //k:下一层细胞号 //失败返回-1 double return_w(int i,int j,int k); //返回阈值 //i:层号,0输入层,1隐藏层,2输出层 //j:本层细胞号 //失败返回-1 double return_threshold(int i,int j); //产生随机的权值,-1-1之间 void set_rand_w(); //产生随机的阈值,-1-1之间 void set_rand_threshold(); //设置输入层权值 //a:权值,i:细胞号,j:细胞对应输出 void set_in_layer_w(double a,int i,int j); //设置隐藏层权值 //a:权值,i:细胞号,j:细胞对应输出 void set_hide_layer_w(double a,int i,int j); //设置隐藏层阈值 //a:阈值,num:细胞号 void set_hide_layer_threshold(double a,int num); //设置输出层阈值 //a:阈值,num:细胞号 void set_out_layer_threshold(double a,int num); //设置学习速率 void set_g(double a); //学习 //right为正确的值数组 void study(double *right); //计算输出 void calc(); //返回输出 double output(int num); //设置输入层细胞输入 void set_in(double a,int num); }; //全局函数 //初始化 //归一化函数 //dst:目标数据 //min:最小值 //max:最大值 double mapminmax(double dst,double min,double max); //反归一化 //dst:目标数据 //min:最小值 //max:最大值 double premapminmax(double dst,double min,double max); //加载权值 //dir:目录,bp_net:神经网络 //成功返回1,失败返回-1 int load_w(QString dir,_BP_Net *bp_net); //加载阈值 //dir:目录,bp_net:神经网络 //成功返回1,失败返回-1 int load_threshold(QString dir,_BP_Net *bp_net); //写入权值 //dir:目录,bp_net:神经网络 //成功返回1,失败返回-1 int write_w(QString dir,_BP_Net *bp_net); //写入阈值 //dir:目录,bp_net:神经网络 //成功返回1,失败返回-1 int write_threshold(QString dir,_BP_Net *bp_net); //读取正确的值,并且学习 //dir:目录,bp_net:神经网络 //成功返回1,失败返回-1 int study(QString dir,_BP_Net *bp_net); #endif // PUBLIC_H
|