Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.22 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <cmath>
  4. #include <ctime>
  5. #include <iomanip>
  6.  
  7. //#define ECUATION_FOR_X2   x1 - (float)((T / T_max * (b - a))/2) + ((float)rand() / RAND_MAX) * ((float)T / T_max * (b - a))
  8. #define line "___________________________________"
  9.  
  10. float uni_func(const float x)
  11. {
  12.     return -1 * std::sqrt(x)*std::sin(x) + 2;
  13. }
  14. float multi_func(const float x)
  15. {
  16.     return (-1 * std::sqrt(x)*std::sin(x) + 2) * sin(5 * x);
  17. }
  18. bool uni_CompareValue(float x1, float x2)
  19. {
  20.     return uni_func(x1) > uni_func(x2);
  21. }
  22. bool multi_CompareValue(float x1, float x2)
  23. {
  24.     return multi_func(x1) > multi_func(x2);
  25. }
  26.  
  27. void TablePrint_Uni(int N, float T, float x, float f_value, bool accepted)
  28. {
  29.     std::cout << "|     ";
  30.     if (N / 10 == 0)
  31.         std::cout << "  ";
  32.     else if (N / 100 == 0)
  33.         std::cout << " ";
  34.    
  35.     std::cout << N << "     |  " << T << " | " << x << " | " << f_value << " | ";
  36.  
  37.     if (accepted)
  38.         std::cout << " Accepted |";
  39.     else
  40.         std::cout << " Rejected |";
  41.  
  42.     std::cout << std::endl;
  43. }
  44.  
  45. void TablePrint(int N, float T, float x, float f_value, bool accepted)
  46. {
  47.     std::cout << "|     ";
  48.     if (N / 10 == 0)
  49.         std::cout << "  ";
  50.     else if (N / 100 == 0)
  51.         std::cout << " ";
  52.     std::cout << N << "      | ";
  53.  
  54.     if (T / 10 < 1)
  55.         std::cout << "    ";
  56.     else if (T / 100 < 1)
  57.         std::cout << "   ";
  58.     else if (T / 1000 < 1)
  59.         std::cout << "  ";
  60.     else if (T / 10000 < 1)
  61.         std::cout << " ";
  62.  
  63.     std::cout << T << "  | ";
  64.     std::cout << x << " | ";
  65.  
  66.     if (f_value > 0)
  67.         std::cout << " ";
  68.     std::cout<< f_value << " | ";
  69.  
  70.     if (accepted)
  71.         std::cout << " Accepted |";
  72.     else
  73.         std::cout << " Rejected |";
  74.  
  75.     std::cout << std::endl;
  76. }
  77.  
  78. int main()
  79. {
  80.     srand(clock());
  81.     std::cout << std::fixed << std::setprecision(4);
  82.  
  83.     bool accepted;
  84.     const float a = 1;
  85.     const float b = 4;
  86.  
  87.     const float T_max = 10000;
  88.     const float T_min = 0.1;
  89.     float T = T_max;
  90.    
  91.     float diff=0;
  92.  
  93.     float x1=(float)rand() / RAND_MAX * (b-a) + a;
  94.     float x2;
  95.  
  96.     //const float delta=0.1;
  97.  
  98.     int counter = 1;
  99.  
  100.     std::cout << std::endl;
  101.     std::cout << " UNIMODAL FUNCTION" << std::endl;
  102.     std::cout << line << std::endl << std::endl;
  103.     std::cout << " Table 1: For unimodal function" << std::endl;
  104.     std::cout << " ___________________________________________________________ " << std::endl;
  105.     std::cout << "|   Iteration  |      T      |   X1   |  f(x1)  | Acception |" << std::endl;
  106.     std::cout << "|--------------|-------------|--------|---------|-----------|" << std::endl;
  107.  
  108.     while (T > T_min)
  109.     {
  110.         //x2 = (float)rand() / RAND_MAX * 2 * delta + x1 - delta;
  111.         x2 = (float)rand() / RAND_MAX * (b - a) + a;
  112.  
  113.         diff = uni_func(x2) - uni_func(x1);
  114.         if (diff>0)
  115.         {
  116.             accepted = false;
  117.             if ((float)rand() / RAND_MAX < exp((float)-1*diff/T))
  118.             {
  119.                 accepted = true;
  120.                 x1 = x2;
  121.             }
  122.         }
  123.         else
  124.         {
  125.             accepted = true;
  126.             x1 = x2;
  127.         }
  128.  
  129.         TablePrint(counter, T, x1, uni_func(x1), accepted);
  130.         counter++;
  131.         T *= 0.95;
  132.     }
  133.     std::cout << "|______________|_____________|________|_________|___________|" << std::endl;
  134.  
  135.     std::cout << "Result for unimodal: " << uni_func(x1) << " in " << x1 << std::endl << std::endl;
  136.  
  137.  
  138.     std::cout << std::endl << " MULTIMODAL FUNCTION" << std::endl;
  139.     std::cout << line << std::endl;
  140.     std::cout << std::endl << " Table 2 : For multimodal function" << std::endl;
  141.     std::cout << " ___________________________________________________________" << std::endl;
  142.     std::cout << "|   Iteration  |      T      |   X1   |  f(x1)  | Acception |" << std::endl;
  143.     std::cout << "|--------------|-------------|--------|---------|-----------|" << std::endl;
  144.  
  145.     x1= (float)rand() / RAND_MAX * (b - a) + a;
  146.     T = T_max;
  147.     counter = 0;
  148.     diff=0;
  149.     while (T > T_min)
  150.     {
  151.         x2 = (float)rand() / RAND_MAX * (b - a) + a;
  152.  
  153.         diff = multi_func(x2) - multi_func(x1);
  154.         accepted = false;
  155.         if (diff > 0)
  156.         {
  157.             if (((float)rand() / RAND_MAX) < exp((float)-1 * diff / T))
  158.             {
  159.                 accepted = true;
  160.                 x1 = x2;
  161.             }
  162.         }
  163.         else
  164.         {
  165.             accepted = true;
  166.             x1 = x2;
  167.         }
  168.  
  169.        
  170.         TablePrint(counter, T, x1, multi_func(x1), accepted);
  171.         counter++;
  172.         T *= 0.95;
  173.     }
  174.     std::cout << "|______________|_____________|________|_________|___________|" << std::endl;
  175.     std::cout << "Result for multimodal: " << multi_func(x1) << " in " << x1 << std::endl;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement