Advertisement
Guest User

Untitled

a guest
May 24th, 2018
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.06 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using Simulation.Events;
  8. using Simulation;
  9. using System.IO;
  10.  
  11. // 24.05.2018
  12. /********************************************
  13.  * Adam Kotlarek(a.kotlarek@gmail.com)
  14.  * numer indeksu: 121304
  15.  * grupa: RK
  16.  *******************************************/
  17.  
  18. namespace Simulation
  19. {
  20.     public class Program
  21.     {
  22.         static void Main(/*string[] args*/)
  23.         {
  24.  
  25.             SimulationContext simulationContext = new SimulationContext();
  26.             Event currentEvent;
  27.             Patient patientFirstInQueue;
  28.             int loop = 4000000;
  29.             int x = 0;
  30.             int seed = 12334;
  31.             long patientCount = 0;
  32.             string[] patientCountArray = new string[loop];
  33.             bool conditionalEvent = false;
  34.  
  35.             for (int i = 0; i < 15*10000 ; i++)
  36.             {
  37.                 simulationContext.generator.Uniform(ref seed);
  38.                 if ((i % 10000) == 0)
  39.                     simulationContext.seeds[x++] = seed;
  40.             }
  41.  
  42.  
  43.  
  44.  
  45.             //Console.WriteLine("**********************************************");
  46.             //Console.WriteLine("CURRENT SIMULATION TIME: {0}", simulationContext.simulationTime);
  47.  
  48.             PatientArrival patientArrival = new PatientArrival(simulationContext);
  49.             patientArrival.Execute(simulationContext);
  50.  
  51.             DonorArrival donorArrival = new DonorArrival(simulationContext);
  52.             donorArrival.Execute(simulationContext);
  53.             //Display(simulationContext);
  54.  
  55.             //Console.WriteLine();
  56.  
  57.             ////////////////////////////DANE/////////////////////////////////
  58.             string pathDesktop = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  59.             string filePath = pathDesktop + "\\kolejka.csv";
  60.             if (!File.Exists(filePath))
  61.             {
  62.                 File.Create(filePath).Close();
  63.             }
  64.             string delimter = " ";
  65.             System.Collections.Generic.List<string[]> output = new System.Collections.Generic.List<string[]>();
  66.             ////////////////////////////DANE/////////////////////////////////
  67.  
  68.             for (int i = 0; i < loop; ++i)
  69.                     {
  70.                         currentEvent = simulationContext.myBloodBank.EventPop();
  71.                         simulationContext.simulationTime = currentEvent.eventTime;
  72.                         //Console.WriteLine("**********************************************");
  73.                         //Console.WriteLine("CURRENT SIMULATION TIME: {0}", simulationContext.simulationTime);
  74.                         currentEvent.Execute(simulationContext);
  75.                         patientCount += simulationContext.myBloodBank.patientQueue.Count;
  76.                         patientCountArray[i] = simulationContext.myBloodBank.patientQueue.Count.ToString();
  77.                     do
  78.                     {
  79.                     conditionalEvent = false;
  80.                     /// Zamowienie
  81.                     if (simulationContext.myBloodBank.listOfBlood.Count() < simulationContext.myBloodBank.minimumBloodLevel &&
  82.                             simulationContext.myBloodBank.flagOrder == false)
  83.                         {
  84.                             conditionalEvent = true;
  85.                             Order order = new Order(simulationContext);
  86.                             order.Execute(simulationContext);
  87.                         }
  88.  
  89.                         if (simulationContext.myBloodBank.patientQueue.Count > 0)
  90.                         {
  91.                             patientFirstInQueue = (Patient)simulationContext.myBloodBank.patientQueue.Peek();
  92.  
  93.                             /// Zamowienie awaryjne
  94.                             if (patientFirstInQueue.bloodNeeded >= simulationContext.myBloodBank.listOfBlood.Count() &&
  95.                                 simulationContext.myBloodBank.flagEmergencyOrder == false)
  96.                             {
  97.                                 conditionalEvent = true;
  98.                                 EmergencyOrder emergencyOrder = new EmergencyOrder(simulationContext);
  99.                                 emergencyOrder.Execute(simulationContext);
  100.                             }
  101.  
  102.                             /// Transfuzja
  103.                             if (patientFirstInQueue.bloodNeeded < simulationContext.myBloodBank.listOfBlood.Count())
  104.                             {
  105.                                 conditionalEvent = true;
  106.                                 Transfusion transfusion = new Transfusion(simulationContext);
  107.                                 transfusion.Execute(simulationContext);
  108.                             }
  109.                         }
  110.                     } while (conditionalEvent == true);
  111.  
  112.                         //Display(simulationContext);
  113.                         //Console.WriteLine();
  114.                         //Console.ReadKey();
  115.                        
  116.                     }
  117.             /////////////////////////////////////////////////////////////
  118.             output.Add(patientCountArray);
  119.             int length = output.Count;
  120.             using (System.IO.TextWriter writer = File.CreateText(filePath))
  121.             {
  122.                 for (int index = 0; index < length; index++)
  123.                 {
  124.                     writer.WriteLine(string.Join(delimter, output[index]));
  125.                 }
  126.             }
  127.             ////////////////////////////////////////////////////////////
  128.  
  129.             Console.WriteLine("Emergency order number: {0}", simulationContext.emOrderCount);
  130.             Console.WriteLine("Normal order number: {0}", simulationContext.norOrderCount);
  131.                     Console.WriteLine("Blood utilization %: {0}", (simulationContext.statUtilzation / simulationContext.statAddBlood) * 100);
  132.                     Console.WriteLine("Average patient queue: {0}", (long)(patientCount / loop));
  133.  
  134.            
  135.  
  136.             Console.Read();
  137.         }
  138.  
  139.  
  140.  
  141.         public static void Display(SimulationContext simulationContext)
  142.         {
  143.             Console.WriteLine("**********************************************");
  144.             Console.WriteLine("Number of events: {0}", simulationContext.myBloodBank.listOfEvents.Count());
  145.             foreach(Event e in simulationContext.myBloodBank.listOfEvents)
  146.             {
  147.                 Console.Write("{0} ", e.eventTime);
  148.             }
  149.             Console.WriteLine();
  150.  
  151.             Console.WriteLine("Number of patients in queue: {0}", simulationContext.myBloodBank.patientQueue.Count);
  152.             foreach (Patient p in simulationContext.myBloodBank.patientQueue)
  153.             {
  154.                 Console.Write("{0} ", p.id);
  155.             }
  156.             Console.WriteLine();
  157.  
  158.             Console.WriteLine("Number of blood in bloodbank: {0}", simulationContext.myBloodBank.listOfBlood.Count());
  159.             foreach(Blood b in simulationContext.myBloodBank.listOfBlood)
  160.             {
  161.                 Console.Write("{0} ", b.utilizationTime);
  162.             }
  163.             Console.WriteLine();
  164.         }
  165.  
  166.  
  167.  
  168.     }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement