daily pastebin goal
18%
SHARE
TWEET

Global minimum (simulated annealing)

HomoCivicus Mar 19th, 2019 (edited) 69 in 144 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. int main() {
  8.     srand(time(NULL));
  9.  
  10.     double x, x_new, e, e_new;
  11.  
  12.     // Первоначальные значения
  13.     x = rand() % 201 - 100;
  14.     printf("? %lf\n", x);
  15.     fflush(stdout);
  16.     scanf("%lf", &e);
  17.  
  18.     for (double t = 10000; t > 10e-6; t *= 0.7) {
  19.         for (int i = 0; i < 100; i++) {
  20.             // Рандомный выбор новой точки из окрестности данной
  21.             x_new = x + ((double)rand() / RAND_MAX) * 50 - 25;
  22.             // Энергия в данной точке
  23.             printf("? %lf\n", x_new);
  24.             fflush(stdout);
  25.             scanf("%lf", &e_new);
  26.             /* Переходим к данной точке, если значение энергии в ней
  27.             уменьшается; иначе - переход определяется рандомно */
  28.             if (e_new < e || ((double)rand() / RAND_MAX) < exp((e - e_new) / t)) {
  29.                 e = e_new;
  30.                 x = x_new;
  31.             }
  32.         }
  33.     }
  34.  
  35.     printf("! %lf\n", x);
  36.     fflush(stdout);
  37.  
  38.     return 0;
  39. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top