#include using namespace std; //introduces namespace std #include #include #include class Brain { private: int sigma[100] ; int J[100][100][5] ; public: void input(); void output(); int calc(); }; void Brain::input() { int i, j, m, itemp[100]; char ch1, ch2, chtemp ; ifstream fin1("J.dat") ; ifstream fin2("sigma.dat") ; for( m = 0; m < 5; m++ ) { for( i = 0; i < 100; i++ ) { fin1 >> ch1 ; if( ch1 == '+' ) itemp[i] = 1; else if( ch1 == '-' ) itemp[i] = -1; else { cout << "There is a problem with the data file.\n"; break; } if( m == 0 ) { fin2 >> ch2 ; if( ch2 == '+' ) sigma[i] = 1; else if( ch2 == '-' ) sigma[i] = -1; else { cout << "There is a problem with the data file.\n"; break; } } } for( i = 0; i < 100; i++ ) for( j = 0; j < 100; j++ ) J[i][j][m] = itemp[i]*itemp[j]; } } void Brain::output() { int i ; ofstream fout("Identified.dat"); cout << "\nIdentified as:\n"; for( i = 0; i < 100; i++ ) { if( sigma[i] == 1 ) { fout << "+ " ; cout << "+ " ; } else { fout << "- " ; cout << "- " ; } if( ((i+1) % 10) == 0 ) { fout << "\n" ; cout << "\n" ; } } fout.close(); } int Brain::calc() { int i, j, m ; double temp1 = 0; double temp2 = 0; double deltaE ; double x; for( j = 0; j < 100; j++ ) { temp1 = temp2 = 0 ; x = drand48(); if( x <= 0.5 ) { for( i = 0; i < 100; i++ ) { if( i != j ) { for( m = 0; m < 5; m++ ) { temp1 += (double)(J[i][j][m]*sigma[i])/5.0; temp2 += (double)(J[j][i][m]*sigma[i])/5.0; } } } deltaE = ((2*temp1) + (2*temp2))*(double)sigma[j]; if( deltaE < 0 ) sigma[j] = -sigma[j]; } } return 0; } int main() { int i; int iseed = 27498; srand48(iseed); Brain step ; step.input(); for( i = 0; i < 1000; i++ ) step.calc(); step.output(); return 0; }