Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Q
  6. {
  7.     double MS, Tp1, Tp2;
  8.  
  9. };
  10.  
  11. int n[2] = { 0, 0 }, Dis;
  12. Q *Q1, *Q2;
  13.  
  14. double genExp(double lambda)
  15. {
  16.     double u, x;
  17.  
  18.     u = (double)rand() / (RAND_MAX + 1);
  19.     x = -1 / lambda*log(1 - u);
  20.  
  21.     return x;
  22. }
  23.  
  24. double genGauss(double medie, double sigma)
  25. {
  26.     double s = 0; int i;
  27.  
  28.     for (i = 1; i <= 12; i++)
  29.         s += (double)rand() / RAND_MAX;
  30.  
  31.     return medie + sigma*(s - 6);
  32. }
  33.  
  34.  
  35. int evUrmator()
  36. {
  37.     if (n[1] == 0 && n[2] == 0)
  38.         return 1;
  39.     if (n[2] == 0)
  40.     {
  41.         if (Dis <= Q1[1].Tp1) return 1;
  42.         if (Q1[1].Tp2 == 0) return 2;
  43.         return 4;
  44.     }
  45.     if (n[1] == 0)
  46.     {
  47.         if (Dis <= Q2[1].Tp2) return 1;
  48.         if (Q1[1].Tp1 == 0) return 3;
  49.         return 5;
  50.     }
  51.     if (Dis<Q1[1].Tp1 && Dis<Q2[1].Tp2)
  52.         return 1;
  53.     if (Q1[1].Tp1<Q2[1].Tp2)
  54.     {
  55.         if (Q1[1].Tp2 == 0) return 2;
  56.         return 4;
  57.     }
  58.     //if(Q2[1].Tp2<=Q1[1].Tp1)
  59.     else
  60.     {
  61.         if (Q2[1].Tp1 == 0) return 3;
  62.         return 5;
  63.     }
  64.     return 0;
  65. }
  66.  
  67.  
  68.  
  69. int main()
  70. {
  71.     double lambda, DS, NS = 1000000;
  72.     double miu[2] = { 10, 10 };
  73.     double STR = 0, CT = 0, ceas = 0, Tp[10], k,TRm;
  74.  
  75.     cout << "Lambda = ";
  76.     cin >> lambda;
  77.  
  78.     for (int i = 1; i <= 2; i++)
  79.     {
  80.         Tp[i] = genExp(miu[i]);
  81.     }
  82.     Q1[1] = { ceas, Tp[1], Tp[2] };
  83.  
  84.     Dis = genExp(lambda);
  85.     do
  86.     {
  87.  
  88.         k = evUrmator();
  89.         if (k == 1)
  90.         {
  91.             ceas += Dis;
  92.  
  93.             if (n[1] > 0)
  94.             {
  95.                 Q1[1].Tp1 -= Dis;
  96.             }
  97.             if (n[2] > 0)
  98.             {
  99.                 Q2[1].Tp2 -= Dis;
  100.             }
  101.  
  102.             Tp[1] = genExp(miu[1]);
  103.             Tp[2] = genExp(miu[2]);
  104.  
  105.             if (n[1] <= n[2])
  106.             {
  107.                 n[1]++;
  108.                 Q1[n[1]] = { ceas, Tp[1], Tp[2] };
  109.             }
  110.             else
  111.             {
  112.                 n[2]++;
  113.                 Q2[n[2]] = { ceas, Tp[1], Tp[2] };
  114.             }
  115.  
  116.             Dis = genExp(lambda);
  117.  
  118.         }
  119.         else if (k == 2)
  120.         {
  121.             ceas += Q1[1].Tp1;
  122.             Q2[1].Tp2 -= Q1[1].Tp1;
  123.             Dis -= Q1[1].Tp1;
  124.  
  125.             STR += ceas - Q1[1].MS;
  126.             CT++;
  127.  
  128.             n[1]--;
  129.             for (int i = 1; i <= n[1]; i++)
  130.             {
  131.                 Q1[i] = Q1[i + 1];
  132.             }
  133.         }
  134.         else if (k == 3)
  135.         {
  136.             ceas += Q2[1].Tp2;
  137.             Q1[1].Tp1 -= Q2[1].Tp2;
  138.             Dis -= Q2[1].Tp2;
  139.  
  140.             STR += ceas - Q2[1].MS;
  141.             CT++;
  142.  
  143.             n[2]--;
  144.             for (int i = 1; i <= n[2]; i++)
  145.             {
  146.                 Q2[i] = Q2[i + 1];
  147.             }
  148.         }
  149.         else if (k == 4)
  150.         {
  151.             ceas += Q1[1].Tp1;
  152.             Q2[1].Tp2 -= Q1[1].Tp1;
  153.             Dis -= Q1[1].Tp1;
  154.  
  155.             Q1[1].Tp1 = 0;
  156.  
  157.             n[2]++;
  158.  
  159.             Q2[n[2]] = Q1[1];
  160.  
  161.             n[1]--;
  162.  
  163.             for (int i = 1; i <= n[1]; i++)
  164.             {
  165.                 Q1[i] = Q1[i + 1];
  166.             }
  167.         }
  168.         else if (k == 5)
  169.         {
  170.             ceas += Q2[1].Tp2;
  171.             Q1[1].Tp1 = Q2[1].Tp2;
  172.             Dis -= Q2[1].Tp2;
  173.  
  174.             Q2[2].Tp2 = 0;
  175.             n[1]++;
  176.             Q1[n[1]] = Q2[1];
  177.  
  178.             n[2]--;
  179.             for (int i = 1; i <= n[2]; i++)
  180.             {
  181.                 Q2[i] = Q2[i + 1];
  182.             }
  183.         }
  184.  
  185.     } while (ceas < DS);
  186.  
  187. TRm = STR / NS;
  188.  
  189. cout << "TRm = " << TRm;
  190.  
  191. system("Pause");
  192. return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement