Guest User

Untitled

a guest
Nov 17th, 2014
215
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <math.h>
  3. #include <ctime>
  4. #include <stdlib.h>
  5. using namespace std;
  6.  
  7. //function
  8. double pi = 3.14;
  9. double F(double a, double b, double c, double x)
  10. {
  11.     double y;
  12.     y = a*(x*x - b*cos(c*pi*x));
  13.     return y;
  14. }
  15.  
  16. double random_pop()
  17. {
  18.     srand(time(NULL));
  19.     double number = rand();
  20.     return number;
  21. }
  22.  
  23.  
  24. void main()
  25. {
  26.     int t = 0;
  27.     int rep = 5; //iteracje
  28.     //tu pozniej wczytac wszystkie dane
  29.     double x[3] = { (-0.9), 0, 0.9 };
  30.     double y[3] = { 9.5428565, -7.0393774, 9.2934581 };
  31.  
  32.     //population
  33.     double pop[3][3];
  34.     for (int i = 0; i<3; i++)
  35.     {
  36.         for (int j = 0; j<3; j++)
  37.         {
  38.             pop[i][j] = random_pop();
  39.         }
  40.     }
  41.  
  42.     for (t; t < rep; t++)
  43.     {
  44.         //evaulation
  45.         double calc_y[3];
  46.         for (int i = 0; i<3; i++)
  47.         {
  48.             calc_y[i] = F(pop[i][1], pop[i][2], pop[i][3], x[i]);
  49.         }
  50.  
  51.         //proportional selection
  52.         double prob[3];
  53.         double sum = 0;
  54.         for (int i = 0; i<3; i++)
  55.         {
  56.             sum = sum + calc_y[i];
  57.         }
  58.         for (int i = 0; i<3; i++)
  59.         {
  60.             prob[i] = calc_y[i] / sum;
  61.         }
  62.  
  63.         //mutation
  64.         for (int i = 0; i < 3; i++)
  65.         {
  66.             if (prob[i] > 0.5)
  67.             {
  68.                 /*pop[i][1] = pop[i][1] ^ (1 << 3);
  69.                 pop[i][2] = pop[i][2] ^ (1 << 3);
  70.                 pop[i][3] = pop[i][3] ^ (1 << 3);*/
  71.                 pop[i][1] = pop[i][1] + pop[i][1] * 0.01;
  72.                 pop[i][2] = pop[i][2] + pop[i][2] * 0.01;
  73.                 pop[i][3] = pop[i][3] + pop[i][3] * 0.01;
  74.             }
  75.             else { continue; }
  76.         }
  77.  
  78.         cout << "Iteration nr " << t << ": a=" << pop[t][1] << " b=" << pop[t][2] << " c=" << pop[t][3] << endl;
  79.     }
  80.     system("pause");
  81. }
RAW Paste Data