Advertisement
kanciastopantalones

programik

Dec 15th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. // Dodanie przestrzeni nazw z biblioteki CSL
  6. using CSL;
  7. using CSL.Time;
  8. using CSL.Groups;
  9. using CSL.Generators.Discrete;
  10. using CSL.Statistics;
  11. using System.Diagnostics;
  12.  
  13. namespace CSLProjects
  14. {
  15. class ExampleC
  16. {
  17. Element[] zgloszenie;
  18. public Random random;
  19.  
  20. public void Run()
  21. {
  22.  
  23. uint maxLiczbaZgloszen = 1000;
  24. uint srOdstepZgloszen = 1000;
  25. uint srCzasObsl = 450;
  26. uint sumaZgloszen = 10000;
  27.  
  28. zgloszenie = new Element[maxLiczbaZgloszen];
  29. for (uint i = 0; i < maxLiczbaZgloszen; i++)
  30. {
  31. zgloszenie[i] = new Element();
  32. }
  33.  
  34. SetGroup wolne = new SetGroup(maxLiczbaZgloszen);
  35. QueueGroup kolejka = new QueueGroup(maxLiczbaZgloszen);
  36.  
  37. Timer nadZgl = new Timer();
  38. Timer konObsl = new Timer();
  39.  
  40. int stanObsl;
  41.  
  42. NegExp genOdstZgl = new NegExp(srOdstepZgloszen);
  43. NegExp genCzasuObsl = new NegExp(srCzasObsl);
  44.  
  45. StatD statCzasuPobytu = new StatD();
  46. StatCRect statDlKol = new StatCRect();
  47.  
  48. uint dlKol = 0;
  49. Timer zegarStat = new Timer();
  50.  
  51. Hist histLP = new Hist(7, 1, 1);
  52.  
  53. long liczbaObs;
  54. long sumaLiczbObs = 1000;
  55.  
  56. uint El = uint.MaxValue;
  57.  
  58. random = new Random();
  59.  
  60.  
  61. wolne.Load();
  62. kolejka.Zero();
  63. zegarStat.t = 0;
  64.  
  65. statDlKol.Clear();
  66. histLP.Clear();
  67. statCzasuPobytu.Clear();
  68.  
  69. liczbaObs = 0;
  70. stanObsl = -1;
  71. nadZgl.t = 0;
  72. nadZgl.SetOn();
  73.  
  74. while (true)
  75. {
  76. if (nadZgl.Now()) // Nadejście zgłoszenia, zerowanie liczników, wstawianie do kolejki, zebranie statystyki, ustalenie czasu nadejścia następnego zgłoszenia
  77. {
  78. wolne.Find(ref El, FindParameters.FIRST);
  79. wolne.From(El);
  80. zgloszenie[El].LP = 0;
  81. zgloszenie[El].t = 0;
  82. kolejka.To(El);
  83. dlKol++;
  84. statDlKol.Add(dlKol, -zegarStat.t);
  85. nadZgl.t = genOdstZgl.Get();
  86. }
  87.  
  88. if(konObsl.Now()) // Zakończenie obsługi zgłoszenia
  89. {
  90. zgloszenie[stanObsl].LP++; //Inkrementuj liczbe przetworzeń dla zgłoszenia, które jest na stanowisku obsługi
  91.  
  92. if (bRet(ref random)) // (1/3) Wstaw do kolejki
  93. {
  94. kolejka.To((uint)stanObsl); // Wstaw zgłoszenie ze stanowiska obsługi do kolejki
  95. dlKol++; // Inkrementuj długość kolejki
  96. statDlKol.Add(dlKol, -zegarStat.t); // Zbierz statystykę (średnia długość kolejki)
  97. }
  98. else // (2/3) Koniec obsługi, zbierz statystyki
  99. {
  100. liczbaObs++; // Zwiększ liczbę obsłużonych elementów
  101. statCzasuPobytu.Add(-zgloszenie[stanObsl].t); // Zbierz statystykę (średni czas pobytu)
  102. histLP.Add(zgloszenie[stanObsl].LP); // Zbierz histogram (liczba przejść przez stanowisko)
  103. }
  104.  
  105. stanObsl = -1; // Zwolnij stanowisko obsługi
  106. konObsl.SetOff(); // Wyłącz zegar (ustawiany przy wyborze elementu z kolejki)
  107. }
  108.  
  109. if (kolejka.Find(ref El, FindParameters.FIRST)) // Pobieranie elementu z kolejki, zebranie statystyki, ustalenie czasu obsługi
  110. {
  111. if (stanObsl == -1)
  112. {
  113. kolejka.From(El);
  114. dlKol--;
  115. statDlKol.Add(dlKol, -zegarStat.t);
  116. stanObsl = (int)El;
  117. konObsl.t = genCzasuObsl.Get();
  118. konObsl.SetOn();
  119. }
  120. }
  121. //else // Zakomentowane, obsługa wyżej
  122. //{
  123. //konObsl.SetOff();
  124. //}
  125.  
  126. if (liczbaObs >= sumaLiczbObs)
  127. {
  128. break;
  129. }
  130.  
  131. Time.TimeFlow();
  132. }
  133.  
  134. double sr = 3.14;
  135.  
  136. Console.WriteLine("Wyniki po przejsciu " + liczbaObs + " obserwacji.");
  137. Console.WriteLine("Czas symulacji: " + -zegarStat.t);
  138. statCzasuPobytu.GetStat(ref sr);
  139. Console.WriteLine("Sredni czas pobytu w systemie: " + sr);
  140. statDlKol.GetStat(ref sr, -zegarStat.t);
  141. Console.WriteLine("Srednia dlugosc kolejki: " + sr);
  142.  
  143. Console.WriteLine("Histogram liczby przejsc: ");
  144. Console.WriteLine(histLP.Out());
  145.  
  146. Console.ReadKey();
  147. }
  148.  
  149. bool bRet(ref Random _random)
  150. {
  151. double next = _random.NextDouble() * 3;
  152. if (next > 2)
  153. {
  154. return true;
  155. }
  156. else
  157. {
  158. return false;
  159. }
  160. }
  161.  
  162. /// <summary>
  163. /// klasa Element, dziedzicząca po klasie Timer, reprezentująca zgłoszenie w systemie.
  164. /// </summary>
  165. class Element : Timer
  166. {
  167. public uint LP;
  168. }
  169.  
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement