Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- // Dodanie przestrzeni nazw z biblioteki CSL
- using CSL;
- using CSL.Time;
- using CSL.Groups;
- using CSL.Generators.Discrete;
- using CSL.Statistics;
- using System.Diagnostics;
- namespace CSLProjects
- {
- class ExampleC
- {
- Element[] zgloszenie;
- public Random random;
- public void Run()
- {
- uint maxLiczbaZgloszen = 1000;
- uint srOdstepZgloszen = 1000;
- uint srCzasObsl = 450;
- uint maxLiczbaObs = 1000; //temp 1000
- zgloszenie = new Element[maxLiczbaZgloszen];
- for (uint i = 0; i < maxLiczbaZgloszen; i++)
- {
- zgloszenie[i] = new Element(); //utowrzenie zasobów wolnych
- }
- SetGroup wolne = new SetGroup(maxLiczbaZgloszen);
- QueueGroup kolejka = new QueueGroup(maxLiczbaZgloszen);
- Timer nadZgl = new Timer();
- Timer konObsl = new Timer();
- int stanObsl;
- NegExp genOdstZgl = new NegExp(srOdstepZgloszen);
- NegExp genCzasuObsl = new NegExp(srCzasObsl);
- StatD statCzasuPobytu = new StatD();
- StatCRect statDlKol = new StatCRect();
- uint dlKol = 0;
- Timer zegarStat = new Timer();
- Hist histLP = new Hist(7, 1, 1);
- long liczbaObs;
- uint El = uint.MaxValue;
- random = new Random();
- wolne.Load();
- kolejka.Zero();
- zegarStat.t = 0;
- statDlKol.Clear();
- histLP.Clear();
- statCzasuPobytu.Clear();
- liczbaObs = 0;
- stanObsl = -1;
- nadZgl.t = 0;
- nadZgl.SetOn();
- while (true)
- {
- if (nadZgl.Now())
- {
- wolne.Find(ref El, FindParameters.FIRST);
- wolne.From(El);
- zgloszenie[El].LP = 0;
- zgloszenie[El].t = 0;
- kolejka.To(El);
- dlKol++;
- statDlKol.Add(dlKol, -zegarStat.t);
- nadZgl.t = genOdstZgl.Get();
- }
- if (konObsl.Now())
- {
- if (bRet(ref random)) // czy cofnąć do kolejki
- {
- zgloszenie[stanObsl].LP += 1;
- kolejka.To((uint)stanObsl);
- dlKol++;
- statDlKol.Add(dlKol, -zegarStat.t);
- }
- else
- {
- wolne.To((uint)stanObsl);
- }
- histLP.Add(zgloszenie[stanObsl].LP);
- liczbaObs++;
- stanObsl = -1;
- konObsl.SetOff();
- }
- if (stanObsl == -1)
- {
- if (kolejka.Find(ref El, FindParameters.FIRST))
- {
- kolejka.From(El);
- dlKol--;
- statDlKol.Add(dlKol, -zegarStat.t);
- statCzasuPobytu.Add(-zgloszenie[El].t);
- stanObsl = (int)El;
- konObsl.t = genCzasuObsl.Get();
- konObsl.SetOn();
- }
- }
- if(liczbaObs % 1000 == 0)
- Console.WriteLine("Liczba obserwacji " + liczbaObs);
- if (maxLiczbaObs <= liczbaObs)
- {
- break;
- }
- Time.TimeFlow();
- }
- double sr = -1;
- Console.WriteLine("Wyniki po przejsciu " + liczbaObs + " obserwacji.");
- Console.WriteLine("Czas symulacji: " + -zegarStat.t);
- statCzasuPobytu.GetStat(ref sr);
- Console.WriteLine("Sredni czas pobytu w systemie: " + sr);
- statDlKol.GetStat(ref sr);
- Console.WriteLine("Srednia dlugosc kolejki: " + sr);
- Console.WriteLine("Histogram liczby przejsc: ");
- Console.WriteLine(histLP.Out());
- Console.ReadKey();
- }
- bool bRet(ref Random _random)
- {
- double next = _random.NextDouble() * 3;
- if (next > 2)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// klasa Element, dziedzicząca po klasie Timer, reprezentująca zgłoszenie w systemie.
- /// </summary>
- class Element : Timer
- {
- public uint LP = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement