Advertisement
TroubleMaker84

Untitled

Oct 12th, 2019
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <thread>
  4. #include <vector>
  5. #include <chrono>
  6. #include <fstream>
  7. #include <cstdlib>
  8. #include <time.h>
  9. #include <math.h>
  10. #define pi 3.141592f
  11. #define epsilon 0.001f
  12. using namespace std;
  13.  
  14. float Rastrigin(int dim, float v[30])
  15. {
  16. float result = 10*dim;
  17. for (int i = 0; i < dim; i++)
  18. result = result + (v[i] * v[i] - 10 * cos(2 * pi * v[i]));
  19. return result;
  20. }
  21.  
  22. void random_search_Rastrigin(int dimensiuni)
  23. {
  24. float v[30];
  25. float minimum = INT_MAX;
  26. float m;
  27. fstream output, output_time;
  28. clock_t tStart = clock();
  29. output.open("Random_Rastrigin_Dim5.txt",std::fstream::out | std::fstream::app);
  30. output_time.open("Random_Rastrigin_Dim5_Time.txt",std::fstream::out | std::fstream::app);
  31. for (int i = 0; i < 10000; i++)
  32. {
  33. for (int j = 0; j < dimensiuni; j++)
  34. {
  35. v[j] = float((rand() % 51201)) / 10000.0f;
  36. if (rand() % 2 == 1) v[j] *= -1;
  37. }
  38. if((m=Rastrigin(dimensiuni,v) < minimum))
  39. minimum = m;
  40. }
  41.  
  42. double timp = (double)(clock() - tStart)/CLOCKS_PER_SEC;
  43. output << minimum<< ' ';
  44. output_time<<timp<<' ';
  45. output.close();
  46. output_time.close();
  47. }
  48.  
  49. float greedy_HillClimbing_Rastrigin_Recurssive(int dim, float v[30], float minim) //ar trebui sa returneze minimul accesibil din acel punct
  50. {
  51. for(int i=0;i< dim;i++)
  52. {
  53. if(v[i]>-5.12 && v[i]<5.12)
  54. {v[i] = v[i]+ epsilon;
  55. if(Rastrigin(dim,v)< minim)
  56. {
  57. minim = Rastrigin(dim,v);
  58. return greedy_HillClimbing_Rastrigin_Recurssive(dim,v, minim);
  59. }
  60. v[i] = v[i] - 2*epsilon;
  61. if(Rastrigin(dim,v)< minim)
  62. {
  63. minim = Rastrigin(dim,v);
  64. return greedy_HillClimbing_Rastrigin_Recurssive(dim,v, minim);
  65. }
  66. }
  67. else return float(INT_MAX);
  68. }
  69. return minim;
  70. }
  71.  
  72. void greedy_HillClimbing_Rastrigindim2(int dimensiuni)
  73. {
  74.  
  75. clock_t tStart = clock();
  76. float v[30];
  77. float minimum=INT_MAX;
  78. float m=INT_MAX, neigh_min;
  79. fstream output;
  80. float saved_val[30];
  81. float copie[30];
  82. output.open("GreedyHillClimbing_Rastrigin_Dim2.txt",std::fstream::out);
  83. for(int i=0;i<dimensiuni;i++)
  84. v[i] = -5.12;
  85. for(int i=0;i<20;i++)
  86. {
  87. for(int j=0; j<dimensiuni;j++)
  88. {
  89. v[j] =v[j] + 0.5;
  90. neigh_min= INT_MAX;
  91.  
  92. for(int i=0;i<dimensiuni;i++)
  93. copie[i]=v[i];
  94. if( (m=greedy_HillClimbing_Rastrigin_Recurssive(dimensiuni,copie,neigh_min)) < minimum )
  95. {minimum=m; for(int h=0;h<dimensiuni;h++) saved_val[h]=copie[h];}
  96. }
  97. }
  98. double timp = (double)(clock() - tStart)/CLOCKS_PER_SEC;
  99. output <<"Minim: "<< minimum<< ' ';
  100. output<<"Timp: "<<timp<<endl;
  101. for(int h=0;h<dimensiuni;h++)
  102. output<<saved_val[h]<<' ';
  103. output.close();
  104.  
  105. }
  106.  
  107. void greedy_HillClimbing_Rastrigindim5(int dimensiuni)
  108. {
  109. float v[30];
  110. float minimum=INT_MAX;
  111. float m=INT_MAX, neigh_min;
  112. fstream output;
  113. float copie[30];
  114. float saved_val[30];
  115. clock_t tStart = clock();
  116. output.open("GreedyHillClimbing_Rastrigin_Dim5.txt",std::fstream::out);
  117. for(int i=0;i<dimensiuni;i++)
  118. v[i] = -5.12;
  119. for(int i=0;i<10;i++)
  120. {
  121. for(int j=0; j<dimensiuni;j++)
  122. {
  123. v[j] = v[j] + 1;
  124. neigh_min= INT_MAX;
  125. for(int i=0;i<dimensiuni;i++)
  126. copie[i]=v[i];
  127. if( (m=greedy_HillClimbing_Rastrigin_Recurssive(dimensiuni,copie,neigh_min)) < minimum )
  128. {minimum=m; for(int h=0;h<dimensiuni;h++) saved_val[h]=copie[h];}
  129. }
  130. }
  131. double timp = (double)(clock() - tStart)/CLOCKS_PER_SEC;
  132. output <<"Minim: "<< minimum<< ' ';
  133. output<<"Timp: "<<timp<<endl;
  134. for(int h=0;h<dimensiuni;h++)
  135. output<<saved_val[h]<<' ';
  136. output.close();
  137.  
  138. }
  139. void greedy_HillClimbing_Rastrigindim20(int dimensiuni)
  140. {
  141. float v[30];
  142. float minimum=INT_MAX;
  143. float m=INT_MAX, neigh_min;
  144. fstream output;
  145. float copie[30];
  146. clock_t tStart = clock();
  147. float saved_val[30];
  148. output.open("GreedyHillClimbing_Rastrigin_Dim20.txt",std::fstream::out);
  149. for(int i=0;i<dimensiuni;i++)
  150. v[i] = -5.12;
  151. for(int i=0;i<10;i++)
  152. {
  153. for(int j=0; j<dimensiuni;j++)
  154. {
  155. v[j] =v[j] + 1;
  156. neigh_min= INT_MAX;
  157. for(int i=0;i<dimensiuni;i++)
  158. copie[i]=v[i];
  159. if( (m=greedy_HillClimbing_Rastrigin_Recurssive(dimensiuni,copie,neigh_min)) < minimum )
  160. {minimum=m; for(int h=0;h<dimensiuni;h++) saved_val[h]=copie[h];}
  161. }
  162. }
  163. double timp = (double)(clock() - tStart)/CLOCKS_PER_SEC;
  164. output <<"Minim: "<< minimum<< ' ';
  165. output<<"Timp: "<<timp<<endl;
  166. for(int h=0;h<dimensiuni;h++)
  167. output<<saved_val[h]<<' ';
  168. output.close();
  169.  
  170. }
  171.  
  172.  
  173. int main()
  174. {
  175. srand(time(NULL));
  176.  
  177. /*for(int i=0; i<50;i++)
  178. {
  179. thread Rastrigin_Run(random_search_Rastrigin, 5);
  180. Rastrigin_Run.join();
  181. }
  182. */
  183. thread Rastrigin_Greedy_Dim2(greedy_HillClimbing_Rastrigindim2,2);
  184. thread Rastrigin_Greedy_Dim5(greedy_HillClimbing_Rastrigindim5,5);
  185. thread Rastrigin_Greedy_Dim20(greedy_HillClimbing_Rastrigindim20,20);
  186. Rastrigin_Greedy_Dim2.join();
  187. Rastrigin_Greedy_Dim5.join();
  188. Rastrigin_Greedy_Dim20.join();
  189. float v[30] = {0.935229, -0.000999818, -0.00199982, -0.00299982, -0.00599982, -0.0109998, -0.0219998, -0.0439999, -0.0909998, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121, -0.121 };
  190. cout<<Rastrigin(20,v)<<' ';
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement