Advertisement
Guest User

cw7 sieci Hopefielda

a guest
Apr 24th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 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. //
  12. double calculateTheta(vector<double> vec) {
  13.     double sum = 0.0;
  14.     for (int i =0; i<25; i++) {
  15.         sum+= vec[i];
  16.     }
  17.     return sum;
  18. }
  19.  
  20. double calculateTheta2(vector<double> vec, vector<double> vec2) {
  21.     double sum = 0.0;
  22.     for (int i =0; i<25; i++) {
  23.         sum+= vec[i];
  24.         sum+= vec2[i];
  25.     }
  26.     return sum;
  27. }
  28.  
  29. vector< vector<double> > calculateVectorC(vector<double> vec) {
  30.     vector< vector<double> > output;
  31.     vector<double> tmp;
  32.     for (int i = 0; i<25; i++) {
  33.         tmp.clear();
  34.         for (int j=0; j<25; j++) {
  35.             if (i != j) {
  36.                 tmp.push_back((vec[i] - 0.5) * (vec[j] - 0.5));
  37.             } else {
  38.                 tmp.push_back(0.0);
  39.             }
  40.         }
  41.         output.push_back(tmp);
  42.     }
  43.     return output;
  44. }
  45.  
  46. vector<double> generateRandomVector() {
  47.     vector<double> vec;
  48.     srand(time(NULL));
  49.  
  50.     for (int i =0; i<25; i++) {
  51.         if (rand() % 2 == 0) {
  52.             vec.push_back(1.0);
  53.         } else {
  54.             vec.push_back(0.0);
  55.         }
  56.     }
  57.     return vec;
  58. }
  59.  
  60. vector<double> generateNextVector(vector<double> prev, vector< vector<double> > vectorC) {
  61.     vector<double> vec;
  62.     double uit = 0.0;
  63.     for (int i=0; i<25; i++) {
  64.         uit = 0.0;
  65.         for (int j=0; j<25; j++) {
  66.             uit+= 2*vectorC[i][j] * prev[j];
  67.         }
  68.         uit -= calculateTheta(vectorC[i]);
  69.  
  70.         if (uit>0) {
  71.             vec.push_back(1.0);
  72.         } else if (uit == 0) {
  73.             vec.push_back(prev[i]);
  74.         } else {
  75.             vec.push_back(0.0);
  76.         }
  77.  
  78.  
  79.     }
  80.  
  81.     return vec;
  82. }
  83.  
  84. vector<double> generateNextVector2(vector<double> prev, vector< vector<double> > vectorC, vector< vector<double> > vectorD) {
  85.     vector<double> vec;
  86.     double uit = 0.0;
  87.     for (int i=0; i<25; i++) {
  88.         uit = 0.0;
  89.         for (int j=0; j<25; j++) {
  90.             uit+= 2*(vectorC[i][j]+vectorD[i][j]) * prev[j];
  91.         }
  92.         uit -= calculateTheta2(vectorC[i], vectorD[i]);
  93.  
  94.         if (uit>0) {
  95.             vec.push_back(1.0);
  96.         } else if (uit == 0) {
  97.             vec.push_back(prev[i]);
  98.         } else {
  99.             vec.push_back(0.0);
  100.         }
  101.  
  102.  
  103.     }
  104.  
  105.     return vec;
  106. }
  107.  
  108. void printVector(vector<double> vec) {
  109.     for (int i=0; i<25; i++) {
  110.         if (vec[i] == 0.0) {
  111.             printf(" # ");
  112.         } else {
  113.             printf(" * ");
  114.         }
  115.  
  116.         if (i%5 == 4) {
  117.             printf("\n");
  118.         }
  119.     }
  120. }
  121.  
  122.  
  123. int main(int argc, char** argv) {
  124.     vector<double> vectorXs;
  125.     for (int i=0; i<25; i++) {
  126.         vectorXs.push_back(0.0);
  127.     }
  128.     vectorXs[6] = 1.0;
  129.     vectorXs[7] = 1.0;
  130.     vectorXs[12] = 1.0;
  131.     vectorXs[17] = 1.0;
  132.     vectorXs[22] = 1.0;
  133.  
  134.     vector< vector<double> > vectorC = calculateVectorC(vectorXs);
  135.  
  136.     vector<double> vectorXr;
  137.     for (int i=0; i<25; i++) {
  138.         vectorXr.push_back(0.0);
  139.     }
  140.     vectorXr[1] = 1.0;
  141.     vectorXr[2] = 1.0;
  142.     vectorXr[3] = 1.0;
  143.     vectorXr[6] = 1.0;
  144.     vectorXr[8] = 1.0;
  145.     vectorXr[11] = 1.0;
  146.     vectorXr[13] = 1.0;
  147.     vectorXr[16] = 1.0;
  148.     vectorXr[18] = 1.0;
  149.     vectorXr[21] = 1.0;
  150.     vectorXr[22] = 1.0;
  151.     vectorXr[23] = 1.0;
  152.  
  153.     vector< vector<double> > vectorD = calculateVectorC(vectorXs);
  154.  
  155.     vector<double> vectorX = generateRandomVector();
  156.     printVector(vectorX);
  157.  
  158.     while (getch() != '\x1B') {
  159.         printf("\n");
  160.         vectorX = generateNextVector2(vectorX, vectorC, vectorD);
  161.         printVector(vectorX);
  162.         printf("\n");
  163.     }
  164.  
  165.     return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement