public bool CanBundle(Element element) { if ((Bundle.bundleMax - Bundle.bundleSize) >= element.size) //max kanalow - tyle ile jest wykorzystywanych >= ilosc potrzebowanych do obslugi { return true; } else return false; }
public bool CanQueue(Element element) { if (Queue.queueSize < Queue.maxSize) { return true; } else return false; }
public void AddToQueue(Element element) { Queue.InsertElement(element); }
public void AddToBundle(Element element) { Bundle.InsertElement(element); }
public static void Simulation(Central central, double total_time) { double current_time = 0; Heap events = new Heap(); //MList events = new MList(); double[] czasy_wiazka = new double[10000000]; //time in , time out double[] czasy_kolejka = new double[10000000]; // time in, time in2 double[] czasy_system = new double[10000000]; // time in2, time out || time in, time out int w = 0, k = 0, s = 0; IList<double> timel = new List<double>(); //for (int i = 0; i < central.CStream.Count; i++) //iteruje po kazdym strumieniu //{ // double timeIn = current_time + central.CStream[i].getTime("space time"); //dodajem do czasu aktualnego czas odstepu kazdego strumienia // events.InsertEvent(EventType.arrival, timeIn, i); // central.CStream[i].licznik_pakietow++; //} while ((current_time < total_time) && (events.HeapSize !=0)) { for (int i = 0; i < central.CStream.Count; i++) //iteruje po kazdym strumieniu { double timeIn = current_time + central.CStream[i].getTime("space time"); //dodajem do czasu aktualnego czas odstepu kazdego strumienia events.InsertEvent(EventType.arrival, timeIn, i); central.CStream[i].licznik_pakietow++; } Event e = events.GetEvent(); if(e.time>current_time) { current_time = e.time; //timel.Add(current_time); if (central.Queue.IsEmpty() == false) //odpali sie gdy kolejka nie jest pusta { central.CheckQueue(current_time); // sprawdza czy nie ma elementów które czekają za długo, jeśli tak to usuwa je } switch (e.etype) { case EventType.arrival: Element element = new Element(e.stream_number, central.CStream[e.stream_number].getSize(), current_time, current_time + central.CStream[e.stream_number].getTime("duration time")); central.CStream[element.stream_number].licznik_pakietow += 1; bool CanWe1 = central.CanBundle(element); // sprawdzamy czy jest miejsce w wiązce if (CanWe1 == true) { central.AddToBundle(element); events.InsertEvent(EventType.departure, element.timeOut, e.stream_number); czasy_wiazka[w] = element.timeOut - element.timeIn; w++; czasy_system[s] = element.timeOut - element.timeIn; s++; } else { bool CanWe2 = central.CanQueue(element); // sprawdzamy czy jest miejsce w kolejce oczekiwań if (CanWe2 == true) { element.timeIn2 = element.timeIn; element.timeIn = current_time + central.CStream[e.stream_number].getTime("waiting time"); central.AddToQueue(element); events.InsertEvent(EventType.arrival, element.timeIn, e.stream_number); } else { central.CStream[e.stream_number].licznik_odrzuconych_pakietow++; } } break; case EventType.departure: central.EndElement(current_time); if (central.Queue.IsEmpty() == false) { Element el = central.Queue.GetElement(); el.timeIn = current_time; el.timeOut = current_time + el.timeOut; if (central.CanBundle(el)) { central.AddToBundle(el); events.InsertEvent(EventType.departure, el.timeOut, el.stream_number); czasy_kolejka[k] = el.timeIn - el.timeIn2; k++; czasy_system[s] = el.timeOut - el.timeIn2; s++; } } break; } } } string pstwo_odrzucenia = ""; string czas_sredni_kolejka = ""; string czas_sredni_wiazka = ""; string czas_sredni_system = ""; string tekst = ""; double suma_system = 0, suma_kolejka = 0, suma_wiazka = 0; for (int i = 0; i < s; i++) suma_system = czasy_system[i] + suma_system; for (int i = 0; i < k; i++) suma_kolejka = czasy_kolejka[i] + suma_kolejka; for (int i = 0; i < w; i++) suma_wiazka = czasy_wiazka[i] + suma_wiazka; double srednia_kolejka = 0; double srednia_wiazka = 0; double srednia_system=0; if (k == 0) srednia_kolejka = 0; else srednia_kolejka = suma_kolejka / k; if (w == 0) srednia_wiazka = 0; else srednia_wiazka = suma_wiazka / w; if (s == 0) srednia_system = 0; else srednia_system = suma_system / s; //for (int i = 0; i < timel.Count; i++) //{ // Console.WriteLine(timel[i]); //} for (int i = 0; i < central.CStream.Count; i++) { pstwo_odrzucenia += "Prawdopodobienstwo odrzucenia dla strumienia " + i + "\r\n" + ((double)central.CStream[i].licznik_odrzuconych_pakietow / (double)central.CStream[i].licznik_pakietow) * 100 + "%\r\n"; } czas_sredni_kolejka = "Czas średni oczekiwania w KOLEJCE \r\n" + srednia_kolejka + "ms\r\n"; czas_sredni_wiazka = "Czas średni oczekiwania w WIAZCE \r\n" + srednia_wiazka + "ms\r\n"; czas_sredni_system = "Czas średni oczekiwania w SYSTEMIE \r\n" + srednia_system + "ms\r\n"; tekst = pstwo_odrzucenia + czas_sredni_kolejka + czas_sredni_wiazka + czas_sredni_system; System.IO.File.WriteAllText(@"E:\Centrala-wynik.txt", tekst); }
public void InsertElement(Element e) { queue.Add(e); queueSize++; }
public void InsertElement(Element e) { bundle.Add(e); bundleSize += e.size; numberOfElements++; }