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

📄 test1.cpp

📁 neural network 一个演示原理的代码
💻 CPP
字号:
#include "stdafx.h"
#include "aine.h"
#include "ne-neuron.h"
#include "ne-data.h"

using namespace aine;

extern ofstream tron;

double Inverse( const double v )
{
	return v > 1.0 ? 0.0 : 1.0;
}

int EORTest( const string )
{
	cout << "create a sample meural Process of EOR" << endl;
	tron << "create a sample meural Process of EOR" << endl;

	/*

	*/
	Neuron input[2] , _and , _or , _not , trigger , ans;

	//	Connect to AND
	input[0].ConnectWith( &_and );
	input[1].ConnectWith( &_and );

	//	Connect to OR
	input[0].ConnectWith( &_or );
	input[1].ConnectWith( &_or );

	//	Initialize the not trigger
	trigger.ConnectWith( &_not );

	//	Connect the OR to the NOT and set threshold.
	_or.ConnectWith( &_not );
	_or.SetThreshold( .5 );
	
	//	Connect the MOT to the ans
	_not.ConnectWith( &ans );
	_not.axon[0]->SetCallBack( Inverse );

	//	Connect the and with the OR and set threshold.
	_and.SetThreshold( 1.0 );
	_and.ConnectWith( &_or );

	//	Connect the ans to te OR
	ans.ConnectWith( &_or );

	double in[4][2] =
	{	{	0.0 , 0.0	} ,
		{	1.0 , 0.0	} ,
		{	0.0 , 1.0	} ,
		{	1.0 , 1.0	} 
	};

	for( int i = 0 ; i < 4 ; i++ )
	{
		input[0].SetInputValue( in[i][0] );
		input[1].SetInputValue( in[i][1] );

		cout << i << ") " << in[i][0]  << " EOR " << in[i][1] << " : " ;
		tron << i << ") " << in[i][0]  << " EOR " << in[i][1] << " : " ;

		input[0].Depolarization();
		input[1].Depolarization();
		_or.Depolarization();
		trigger.SetInputValue( 1.0 );
		trigger.Depolarization();
		_not.Depolarization();
		cout << "\t A AND B = " << (int)(_and.ActionPotential() ? 1 : 0);
		cout << "\t A NOR B = " << (int)(ans.ActionPotential() ? 1 : 0);
		tron << " A AND B = " << (int)(_and.ActionPotential() ? 1 : 0);
		tron << " A NOR B = " << (int)(ans.ActionPotential() ? 1 : 0);
		_or.Clean();
		_not.Clean();

		cout << "\t: " << (int)(_and.ActionPotential() ? 1 : 0) << " OR " << (int)(ans.ActionPotential() ? 1 : 0);
		tron << "\t: " << (int)(_and.ActionPotential() ? 1 : 0) << " OR " << (int)(ans.ActionPotential() ? 1 : 0);

		ans.Depolarization();
		_and.Depolarization();
		cout << " -NEOR-> " << (int)(_or.ActionPotential() ? 1 : 0);
		tron << " -NEOR-> " << (int)(_or.ActionPotential() ? 1 : 0);

		_or.Depolarization();
		trigger.SetInputValue( 1.0 );
		trigger.Depolarization();
		_not.Depolarization();

		cout << " =EOR=> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;
		tron << " =EOR=> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;

		ans.Clean();
		_and.Clean();
		_or.Clean();
		_not.Clean();
	}

	return 0;
}

int ReduceNeuron( const string )
{
	cout << "create a sample meural Process of boolean operators with less neurons" << endl;
	tron << "create a sample meural Process of boolean operators with less neurons" << endl;

	Neuron	n1 , n2;
	double in[4][2] =
	{	{	0.0 , 0.0	} ,
		{	1.0 , 0.0	} ,
		{	0.0 , 1.0	} ,
		{	1.0 , 1.0	} 
	};
	n1.ConnectWith( &n2 );
	n2.ConnectWith( &n2 );
	cout << "Tracing OR:" << endl;
	tron << "Tracing OR:" << endl;
	for( int i = 0 ; i < 40 ; i++ )
	{
		const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;
		n1.SetInputValue( in[at][0] );
		n2.SetInputValue( in[at][1] + n2.GetThreshold() );

		n1.Depolarization();
		n2.Depolarization();

		cout << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0);
		if( n2.ActionPotential() )
			if( !(in[at][0] || in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;
	}
	cout << endl;
	tron << endl;

	return 0;
}

int BoolTest( const string path )
{
	cout << "create a sample meural Process of boolean operators" << endl;
	tron << "create a sample meural Process of boolean operators" << endl;

	Neuron	output( 0.0 , 0.5 ) , input[2] , NotOp , InvTrigger , ans;

	input[0].ConnectWith( &output );
	input[1].ConnectWith( &output );
	
	output.ConnectWith( &NotOp );
	NotOp.ConnectWith( &ans );
	InvTrigger.ConnectWith( &NotOp );
	InvTrigger.SetInputValue( 1.0 );

	NotOp.axon[0]->SetCallBack( Inverse );

	double in[4][2] =
	{	{	0.0 , 0.0	} ,
		{	1.0 , 0.0	} ,
		{	0.0 , 1.0	} ,
		{	1.0 , 1.0	} 
	};

	output.SetThreshold( .5 );

	for( int i = 0 ; i < 4 ; i++ )
	{
		const int at = i;
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		cout << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( !(in[at][0] || in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		output.Clean();
	}
	for( int i = 0 ; i < 40 ; i++ )
	{
		const int at = (int)Random( 0 , 4 , true );
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		cout << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( !(in[at][0] || in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		output.Clean();
	}
	cout << endl;
	tron << endl;
	for( int i = 0 ; i < 4 ; i++ )
	{
		const int at = i;
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		output.Depolarization();
		InvTrigger.Depolarization();
		NotOp.Depolarization();
		cout << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( in[at][0] || in[at][1] )
				tron << " **** ERROR *** ";
		tron << endl;

		ans.Clean();
		InvTrigger.SetInputValue( 1.0 );
	}
	for( int i = 0 ; i < 40 ; i++ )
	{
		const int at = (int)Random( 0 , 4 , true );
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		output.Depolarization();
		InvTrigger.Depolarization();
		NotOp.Depolarization();
		cout << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( in[at][0] || in[at][1] )
				tron << " **** ERROR *** ";
		tron << endl;

		ans.Clean();
		output.Clean();
		InvTrigger.SetInputValue( 1.0 );
	}
	cout << endl;
	tron << endl;

	output.SetThreshold( 1.5 );

	for( int i = 0 ; i < 4 ; i++ )
	{
		const int at = i;
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		cout << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( !(in[at][0] && in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		output.Clean();
	}
	for( int i = 0 ; i < 40 ; i++ )
	{
		const int at = (int)Random( 0 , 4 , true );
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		cout << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(output.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( !(in[at][0] && in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		output.Clean();
	}
	cout << endl;
	tron << endl;

	for( int i = 0 ; i < 4 ; i++ )
	{
		const int at = i;
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		InvTrigger.Depolarization();
		output.Depolarization();
		NotOp.Depolarization();

		cout << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( (in[at][0] && in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		ans.Clean();
		output.Clean();
		InvTrigger.SetInputValue( 1.0 );
	}
	for( int i = 0 ; i < 40 ; i++ )
	{
		const int at = (int)Random( 0 , 4 , true );
		input[0].SetInputValue( in[at][0] );
		input[1].SetInputValue( in[at][1] );

		input[0].Depolarization();
		input[1].Depolarization();

		InvTrigger.Depolarization();
		output.Depolarization();
		NotOp.Depolarization();

		cout << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0) << endl;
		tron << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(ans.ActionPotential() ? 1 : 0);
		if( output.ActionPotential() )
			if( (in[at][0] && in[at][1]) )
				tron << " **** ERROR *** ";
		tron << endl;

		ans.Clean();
		InvTrigger.SetInputValue( 1.0 );
	}
	tron << endl;
	cout << endl;

	return 0;
}

⌨️ 快捷键说明

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