Th3NiKo

Maszyna Boltzmana

May 28th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <math.h>
  5. #include <time.h>
  6. #include <stdlib.h>
  7. #include <conio.h>
  8.  
  9.  
  10. using namespace std;
  11. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  12.  
  13. double tZero = 1.0;
  14. double temperature = 1.0;
  15.  
  16.  
  17. double calculateTheta(vector<double> vec) {
  18.     double sum = 0.0;
  19.     for (int i =0; i<25; i++) {
  20.         sum+= vec[i];
  21.     }
  22.     return sum;
  23. }
  24.  
  25. vector< vector<double> > calculateVectorC(vector<double> vec) {
  26.     vector< vector<double> > output;
  27.     vector<double> tmp;
  28.     for (int i = 0; i<25; i++) {
  29.         tmp.clear();
  30.         for (int j=0; j<25; j++) {
  31.             if (i != j) {
  32.                 tmp.push_back((vec[i] - 0.5) * (vec[j] - 0.5));
  33.             } else {
  34.                 tmp.push_back(0.0);
  35.             }
  36.         }
  37.         output.push_back(tmp);
  38.     }
  39.     return output;
  40. }
  41.  
  42. double calculateFuit (double u) {
  43.     double e = 2.71828;
  44.     return 1.0 / (1.0 + pow(e, -1.0 * (u / temperature)));
  45. }
  46.  
  47. vector<double> generateRandomVector() {
  48.     vector<double> vec;
  49.     srand(time(NULL));
  50.  
  51.     for (int i =0; i<25; i++) {
  52.         if (rand() % 2 == 0) {
  53.             vec.push_back(1.0);
  54.         } else {
  55.             vec.push_back(0.0);
  56.         }
  57.     }
  58.     return vec;
  59. }
  60.  
  61. vector<double> generateNextVector(vector<double> prev, vector< vector<double> > vectorC) {
  62.     vector<double> vec;
  63.     double uit = 0.0, fuit;
  64.     srand(time(NULL));
  65.     for (int i=0; i<25; i++) {
  66.         uit = 0.0;
  67.         for (int j=0; j<25; j++) {
  68.             uit+= 2*vectorC[i][j] * prev[j];
  69.         }
  70.         uit -= calculateTheta(vectorC[i]);
  71.         fuit = calculateFuit(uit);
  72.     //  cout <<":fuit:" << fuit << endl;
  73.         if (fuit > (double)((rand() % 11) / 10.0)) {
  74.             vec.push_back(1.0);
  75.         } else {
  76.             vec.push_back(0.0);
  77.         }
  78.     /*  if (uit>0) {
  79.             vec.push_back(1.0);
  80.         } else if (uit == 0) {
  81.             vec.push_back(prev[i]);
  82.         } else {
  83.             vec.push_back(0.0);
  84.         }*/
  85.  
  86.  
  87.     }
  88.  
  89.     return vec;
  90. }
  91.  
  92. double generateNextTemperature (double time) {
  93.     return tZero / (1.0+log((double)time + 1.0));
  94. }
  95.  
  96.  
  97. void printVector(vector<double> vec) {
  98.     for (int i=0; i<25; i++) {
  99.         if (vec[i] == 0.0) {
  100.             printf("#");
  101.         } else {
  102.             printf("*");
  103.         }
  104.  
  105.         if (i%5 == 4) {
  106.             printf("\n");
  107.         }
  108.     }
  109. }
  110.  
  111.  
  112.  
  113.  
  114. int main(int argc, char** argv) {
  115.     vector<double> vectorXs;
  116.     for (int i=0; i<25; i++) {
  117.         vectorXs.push_back(0.0);
  118.     }
  119.     vectorXs[6] = 1.0;
  120.     vectorXs[7] = 1.0;
  121.     vectorXs[12] = 1.0;
  122.     vectorXs[17] = 1.0;
  123.     vectorXs[22] = 1.0;
  124.  
  125.     vector< vector<double> > vectorC = calculateVectorC(vectorXs);
  126.  
  127.  
  128.     vector<double> vectorX = generateRandomVector();
  129.     printVector(vectorX);
  130.     double time = 0.0;
  131.     while (getch() != '\x1B') {
  132.         temperature = generateNextTemperature(time);
  133.         //temperature = 2.5f; //JAK CHCESZ STAŁĄ TEMPERATURE TO ODKOMENTUJ TEN KAWELEK
  134.         cout << "Temperatura = " << temperature << endl;
  135.         time += 1.0;
  136.         printf("\n");
  137.         vectorX = generateNextVector(vectorX, vectorC);
  138.         printVector(vectorX);
  139.         printf("\n");
  140.     }
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment