bp_net.h
来自「故障诊断工作涉及的领域相当广泛」· C头文件 代码 · 共 145 行
H
145 行
// bp_net.h: interface for the bp_net class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BP_NET_H__E330066E_5C9C_4ECB_9F0B_81B92DED7423__INCLUDED_)
#define AFX_BP_NET_H__E330066E_5C9C_4ECB_9F0B_81B92DED7423__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "bp_node.h"
#include "fstream.h"
class mydata;
class bp_layer:public CObject {
protected:
public:
CRect dipan;
BOOL frenew;
unsigned int nnode;
bp_node* pbn;
//double* bar;
// double* error;
bp_node_type type;
mwArray weight;//权值矩阵
mwArray mbar;//阈值矩阵
mwArray prembar;//前次阈值矩阵
mwArray preweight;//前次权值矩阵
mwArray dweight;//本次权之矩阵调整值
mwArray indata;//本层的输入矩阵
mwArray outdata;//本层的输入矩阵
mwArray dedout;//误差对本层输出的导数
double delta_slope;
public:
void calt(mwArray& mwout);
void draw_area(CDC* pdc,BOOL visible);
BOOL is_snap(const CPoint& point);
bp_layer();
~bp_layer();
bp_layer(unsigned int);
_declspec(dllexport) void Serialize(CArchive&);
_declspec(dllexport) friend void operator<<(CArchive&,bp_layer&);
_declspec(dllexport) friend void operator>>(CArchive&,bp_layer&);
_declspec(dllexport) void operator=(bp_layer&);
public:
ifstream is;
ofstream os;
};
enum bp_net_type{std,opt,wavelet};
enum bp_net_function{declare,simulate};
class bp_net : public CObject
{
bp_net_type type;
bp_net_function func_type;
protected:
BOOL bvalid;//是否有训练数据
BOOL btrained;//是否被训练
CString *failuretype;
mwArray weightout;//输出权值矩阵
mwArray preweightout;//前次的输出权值矩阵
mwArray dweightout;//
mwArray lastbar;//输出层阈智矩阵
mwArray prelastbar;//输出层阈智矩阵
mwArray lastin;
mwArray dedlastin;
mwArray mwin;//输入样本
mwArray mdata;//待诊断数据
mwArray mdout;//输出结果
double* pdataout;//输出结果
mwArray mwout;//样本实际输出
mwArray mwstdout;//标准输出
unsigned int nin;//输入节点数量
unsigned int nscnt;//输入样本数据量
double* pvin;//输入样本
unsigned int ndcnt;//待诊断数据数据量
double* pdata;//待诊断数据
unsigned int nout;//输出节点数量
unsigned int nsdocnt;//输入样本输出数据量
double* pvout; //样本实际输出
double* pvstdout;//标准输出
unsigned int nlayer;//隐层数量
bp_layer layin;//输入层
bp_layer* player;//隐层数据
bp_layer layout;//输出层
double stderror;//期望误差
unsigned int nsamp;//样本数量
unsigned int ndata;//待诊断数据数量
double* ibag;//输入数据暂存区
double* tterror;//输出层总体误差
mwArray* merror;//网络顺训误差
mwArray mx;//用于绘制误差曲线
double theerror;//每次迭代的样本最大误差
// double* outerror;//输出层节点误差
unsigned int cnt;//迭代次数
double alpha;//学习因子
double beta;//冲量因子
BOOL bsucceed;
unsigned int loopcnt;
protected:
void backward(int i);
void foward(unsigned int);
public:
BOOL diagnose(const CString** result,unsigned int *cnt,unsigned int* pidx,double* perror);
BOOL low_error();
double error(unsigned int);
BOOL read_data(double** ibag,char**);
BOOL read_samp(double** ibag,char**);
void renew_layer(CDC *pdc,CPoint& point);
void renew_net(CDC *pdc,CPoint& point);
void draw_area(CDC *pdc,BOOL visible);
void run();//计算输出
BOOL excersize();//训练网络
BOOL create(bp_net_type net_type,unsigned int nin, unsigned int nout, unsigned int nlayer,bp_node_type type,double stderror,unsigned nbn[]);
double search2min(int,double databag[],double arrow[],unsigned weishu);
bp_net();
virtual ~bp_net();
void operator =(bp_net &in);
_declspec(dllexport) void Serialize(CArchive&);
_declspec(dllexport) friend void operator<<(CArchive&,bp_net&);
_declspec(dllexport) friend void operator>>(CArchive&,bp_net&);
friend class CCadView;
friend class bpnet_basic_info;
public:
double error();
void backward();
void farward();
void setmatrix(bp_net& in);
const mwArray* get_data();
void init();
BOOL istrained();
BOOL isvalid();
int offset(double step,double* error,unsigned int i,double* databag,double* arrow,unsigned int weishu);
void reset(double* databag);
BOOL optimize();
BOOL frenew;
BOOL is_snap(CPoint &point);
CRect dipan;
BOOL bempty;
ifstream is;
ofstream os;
};
#endif // !defined(AFX_BP_NET_H__E330066E_5C9C_4ECB_9F0B_81B92DED7423__INCLUDED_)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?