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 + -
显示快捷键?