⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neuralnet.h

📁 用C++开发的一个人工神经网络小游戏
💻 H
字号:
// NeuralNet.h: interface for the CNeuralNet class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_NEURALNET_H__B2919797_A46A_40AD_81FE_C67E4BBD03EE__INCLUDED_)
#define AFX_NEURALNET_H__B2919797_A46A_40AD_81FE_C67E4BBD03EE__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <vector>

#include <time.h>
#include <math.h>
#include "GenAlg.h"
using namespace std;




struct SNeuron
{
	//输入到神经网络的输入数的数目
	int				      m_NumInputs;

	//每一个输入对应的权值
	vector<double>	m_vecWeight;


	//构造函数
	SNeuron(int NumInputs);
};

struct SNeuronLayer
{
	//该层的神经元的数目
	int					      m_NumNeurons;

	//每一个神经元,其元素是神经元结构体
	vector<SNeuron>		m_vecNeurons;

	//构造函数
	SNeuronLayer(int NumNeurons, 
				       int NumInputsPerNeuron);
};

class CNeuralNet
{
	
private:
	
	int					m_NumInputs;

	int					m_NumOutputs;

	int					m_NumHiddenLayers;

	int					m_NeuronsPerHiddenLyr;

	

	//储存所有层的容器,每一个元素是一个SNeuronLayer结构体
	vector<SNeuronLayer>	m_vecLayers;

public:

	int					m_Weights;//记录着基因的总长度(要进化的所有权值的个数)

	CNeuralNet();

	void			      CreateNet();

	//从神经网络里面获得权值
	vector<double>	GetWeights()const;
	
	//计算出基因交叉时,交叉点的位置,放进一个容器里面,同时初始化
	vector<int> CalculateSplitPoints();

	//用新的权值更新旧的权值
	void PutWeights(vector<double> &weights);

	//通过输入,计算输出
	vector<double>	Update(vector<double> inputs);

	//sigmoid (s型)响应曲线
	inline double	  Sigmoid(double activation, double response) const;

};

#endif // !defined(AFX_NEURALNET_H__B2919797_A46A_40AD_81FE_C67E4BBD03EE__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -