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;
- using System.Threading;
- using System.Threading.Tasks;
- using Simulation.Events;
- using Simulation;
- using System.IO;
- // 24.05.2018
- /********************************************
- * Adam Kotlarek(a.kotlarek@gmail.com)
- * numer indeksu: 121304
- * grupa: RK
- *******************************************/
- namespace Simulation
- {
- public class Program
- {
- static void Main(/*string[] args*/)
- {
- SimulationContext simulationContext = new SimulationContext();
- Event currentEvent;
- Patient patientFirstInQueue;
- int loop = 4000000;
- int x = 0;
- int seed = 12334;
- long patientCount = 0;
- string[] patientCountArray = new string[loop];
- bool conditionalEvent = false;
- for (int i = 0; i < 15*10000 ; i++)
- {
- simulationContext.generator.Uniform(ref seed);
- if ((i % 10000) == 0)
- simulationContext.seeds[x++] = seed;
- }
- //Console.WriteLine("**********************************************");
- //Console.WriteLine("CURRENT SIMULATION TIME: {0}", simulationContext.simulationTime);
- PatientArrival patientArrival = new PatientArrival(simulationContext);
- patientArrival.Execute(simulationContext);
- DonorArrival donorArrival = new DonorArrival(simulationContext);
- donorArrival.Execute(simulationContext);
- //Display(simulationContext);
- //Console.WriteLine();
- ////////////////////////////DANE/////////////////////////////////
- string pathDesktop = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
- string filePath = pathDesktop + "\\kolejka.csv";
- if (!File.Exists(filePath))
- {
- File.Create(filePath).Close();
- }
- string delimter = " ";
- System.Collections.Generic.List<string[]> output = new System.Collections.Generic.List<string[]>();
- ////////////////////////////DANE/////////////////////////////////
- for (int i = 0; i < loop; ++i)
- {
- currentEvent = simulationContext.myBloodBank.EventPop();
- simulationContext.simulationTime = currentEvent.eventTime;
- //Console.WriteLine("**********************************************");
- //Console.WriteLine("CURRENT SIMULATION TIME: {0}", simulationContext.simulationTime);
- currentEvent.Execute(simulationContext);
- patientCount += simulationContext.myBloodBank.patientQueue.Count;
- patientCountArray[i] = simulationContext.myBloodBank.patientQueue.Count.ToString();
- do
- {
- conditionalEvent = false;
- /// Zamowienie
- if (simulationContext.myBloodBank.listOfBlood.Count() < simulationContext.myBloodBank.minimumBloodLevel &&
- simulationContext.myBloodBank.flagOrder == false)
- {
- conditionalEvent = true;
- Order order = new Order(simulationContext);
- order.Execute(simulationContext);
- }
- if (simulationContext.myBloodBank.patientQueue.Count > 0)
- {
- patientFirstInQueue = (Patient)simulationContext.myBloodBank.patientQueue.Peek();
- /// Zamowienie awaryjne
- if (patientFirstInQueue.bloodNeeded >= simulationContext.myBloodBank.listOfBlood.Count() &&
- simulationContext.myBloodBank.flagEmergencyOrder == false)
- {
- conditionalEvent = true;
- EmergencyOrder emergencyOrder = new EmergencyOrder(simulationContext);
- emergencyOrder.Execute(simulationContext);
- }
- /// Transfuzja
- if (patientFirstInQueue.bloodNeeded < simulationContext.myBloodBank.listOfBlood.Count())
- {
- conditionalEvent = true;
- Transfusion transfusion = new Transfusion(simulationContext);
- transfusion.Execute(simulationContext);
- }
- }
- } while (conditionalEvent == true);
- //Display(simulationContext);
- //Console.WriteLine();
- //Console.ReadKey();
- }
- /////////////////////////////////////////////////////////////
- output.Add(patientCountArray);
- int length = output.Count;
- using (System.IO.TextWriter writer = File.CreateText(filePath))
- {
- for (int index = 0; index < length; index++)
- {
- writer.WriteLine(string.Join(delimter, output[index]));
- }
- }
- ////////////////////////////////////////////////////////////
- Console.WriteLine("Emergency order number: {0}", simulationContext.emOrderCount);
- Console.WriteLine("Normal order number: {0}", simulationContext.norOrderCount);
- Console.WriteLine("Blood utilization %: {0}", (simulationContext.statUtilzation / simulationContext.statAddBlood) * 100);
- Console.WriteLine("Average patient queue: {0}", (long)(patientCount / loop));
- Console.Read();
- }
- public static void Display(SimulationContext simulationContext)
- {
- Console.WriteLine("**********************************************");
- Console.WriteLine("Number of events: {0}", simulationContext.myBloodBank.listOfEvents.Count());
- foreach(Event e in simulationContext.myBloodBank.listOfEvents)
- {
- Console.Write("{0} ", e.eventTime);
- }
- Console.WriteLine();
- Console.WriteLine("Number of patients in queue: {0}", simulationContext.myBloodBank.patientQueue.Count);
- foreach (Patient p in simulationContext.myBloodBank.patientQueue)
- {
- Console.Write("{0} ", p.id);
- }
- Console.WriteLine();
- Console.WriteLine("Number of blood in bloodbank: {0}", simulationContext.myBloodBank.listOfBlood.Count());
- foreach(Blood b in simulationContext.myBloodBank.listOfBlood)
- {
- Console.Write("{0} ", b.utilizationTime);
- }
- Console.WriteLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement