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

📄 test1-didactic.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;
}

namespace Didactic
{
	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.Refractory();
			_not.Refractory();

			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.Refractory();
			_and.Refractory();
			_or.Refractory();
			_not.Refractory();
		}

		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.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.Refractory();
		}
		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.Refractory();
		}
		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.Refractory();
			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.Refractory();
			output.Refractory();
			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.Refractory();
		}
		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.Refractory();
		}
		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.Refractory();
			output.Refractory();
			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.Refractory();
			InvTrigger.SetInputValue( 1.0 );
		}
		tron << endl;
		cout << endl;

		return 0;
	}
}

⌨️ 快捷键说明

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