Example #1
0
        ////////////// FillInput /////////////
        private void DistributionsOfNewsDays()
        {
            DayTypeDistributions.ElementAt(0).CummProbability = DayTypeDistributions.ElementAt(0).Probability;
            DayTypeDistributions.ElementAt(0).MinRange        = 1;
            DayTypeDistributions.ElementAt(0).MaxRange        = Convert.ToInt32(DayTypeDistributions.ElementAt(0).CummProbability * 100);

            DayTypeDistributions.ElementAt(1).CummProbability = DayTypeDistributions.ElementAt(1).Probability + DayTypeDistributions.ElementAt(0).CummProbability;
            if (DayTypeDistributions.ElementAt(1).Probability == 0)
            {
                DayTypeDistributions.ElementAt(1).MinRange = DayTypeDistributions.ElementAt(0).MaxRange;
                DayTypeDistributions.ElementAt(1).MaxRange = Convert.ToInt32(DayTypeDistributions.ElementAt(1).CummProbability * 100);
            }
            else
            {
                DayTypeDistributions.ElementAt(1).MinRange = DayTypeDistributions.ElementAt(0).MaxRange + 1;
                DayTypeDistributions.ElementAt(1).MaxRange = Convert.ToInt32(DayTypeDistributions.ElementAt(1).CummProbability * 100);
            }


            DayTypeDistributions.ElementAt(2).CummProbability = DayTypeDistributions.ElementAt(2).Probability + DayTypeDistributions.ElementAt(1).CummProbability;
            if (DayTypeDistributions.ElementAt(2).Probability == 0)
            {
                DayTypeDistributions.ElementAt(2).MinRange = DayTypeDistributions.ElementAt(1).MaxRange;
                DayTypeDistributions.ElementAt(2).MaxRange = Convert.ToInt32(DayTypeDistributions.ElementAt(2).CummProbability * 100);
            }
            else
            {
                DayTypeDistributions.ElementAt(2).MinRange = DayTypeDistributions.ElementAt(1).MaxRange + 1;
                DayTypeDistributions.ElementAt(2).MaxRange = Convert.ToInt32(DayTypeDistributions.ElementAt(2).CummProbability * 100);
            }
        }
Example #2
0
 public void ReadINPUT(string textfilename)
 {
     string[] Separator = new string[1] {
         "," + " "
     };
     string[] lines = System.IO.File.ReadAllLines("../../TestCases/" + textfilename + ".txt");
     NumOfNewspapers = Convert.ToInt32(lines.ElementAt(1));
     NumOfRecords    = Convert.ToInt32(lines.ElementAt(4));
     PurchasePrice   = Convert.ToDecimal(lines.ElementAt(7));
     SellingPrice    = Convert.ToDecimal(lines.ElementAt(13));
     ScrapPrice      = Convert.ToDecimal(lines.ElementAt(10));
     UnitProfit      = SellingPrice - PurchasePrice;
     string[] DayTypes = lines.ElementAt(16).Split(Separator, StringSplitOptions.None);
     for (int i = 0; i < 3; i++)
     {
         DayTypeDistribution DTD = new DayTypeDistribution((Enums.DayType)(i), Convert.ToDecimal(DayTypes[i]));
         DayTypeDistributions.Add(DTD);
     }
     for (int i = 19; i < lines.Count(); i++)
     {
         DayTypes = lines.ElementAt(i).Split(Separator, StringSplitOptions.None);
         DemandDistribution DD = new DemandDistribution();
         DD.Demand = Convert.ToInt32(DayTypes[0]);
         for (int j = 1; j <= 3; j++)
         {
             DayTypeDistribution DTD = new DayTypeDistribution((Enums.DayType)(j - 1), Convert.ToDecimal(DayTypes[j]));
             DD.DayTypeDistributions.Add(DTD);
         }
         DemandDistributions.Add(DD);
     }
     DistributionsOfNewsDays();
     DistributionsOfDemand();
 }
        public void readfile(string fna)
        {
            FileStream   fs = new FileStream(fna, FileMode.Open);
            StreamReader sr = new StreamReader(fs);

            while (sr.Peek() != -1)
            {
                string fineline = sr.ReadLine();
                if (fineline == "")
                {
                    continue;
                }
                else if (fineline == "NumOfNewspapers")
                {
                    NumOfNewspapers = int.Parse(sr.ReadLine());
                }
                else if (fineline == "NumOfRecords")
                {
                    NumOfRecords = int.Parse(sr.ReadLine());
                }
                else if (fineline == "PurchasePrice")
                {
                    PurchasePrice = decimal.Parse(sr.ReadLine());
                }
                else if (fineline == "ScrapPrice")
                {
                    ScrapPrice = decimal.Parse(sr.ReadLine());
                }
                else if (fineline == "SellingPrice")
                {
                    SellingPrice = decimal.Parse(sr.ReadLine());
                    UnitProfit   = SellingPrice - PurchasePrice;
                }
                else if (fineline == "DayTypeDistributions")
                {
                    string[] g  = sr.ReadLine().Split(',');
                    int      cp = 0;
                    for (int f = 0; f < g.Length; f++)
                    {
                        DayTypeDistribution xy = new DayTypeDistribution();
                        int prob = Convert.ToInt32(decimal.Parse(g[f]) * 100);
                        xy.Probability     = prob;
                        xy.MinRange        = cp + 1;
                        cp                += prob;
                        xy.CummProbability = cp;
                        xy.MaxRange        = cp;
                        if (f == 0)
                        {
                            xy.DayType = Enums.DayType.Good;
                        }
                        else if (f == 1)
                        {
                            xy.DayType = Enums.DayType.Fair;
                        }
                        else if (f == 2)
                        {
                            xy.DayType = Enums.DayType.Poor;
                        }
                        DayTypeDistributions.Add(xy);
                    }
                }
                else if (fineline == "DemandDistributions")
                {
                    int [] cp = new int[3];
                    while (sr.Peek() != -1)
                    {
                        string td = sr.ReadLine();
                        if (td == "" || td == null)
                        {
                            break;
                        }
                        string[]           l = td.Split(',');
                        DemandDistribution u = new DemandDistribution();
                        u.Demand = int.Parse(l[0]);
                        for (int f = 0; f < 3; f++)
                        {
                            DayTypeDistribution xy = new DayTypeDistribution();
                            int prob = Convert.ToInt32(decimal.Parse(l[f + 1]) * 100);
                            xy.Probability     = prob;
                            xy.MinRange        = cp[f] + 1;
                            cp[f]             += prob;
                            xy.CummProbability = cp[f];
                            xy.MaxRange        = cp[f];
                            if (f == 0)
                            {
                                xy.DayType = Enums.DayType.Good;
                            }
                            else if (f == 1)
                            {
                                xy.DayType = Enums.DayType.Fair;
                            }
                            else if (f == 2)
                            {
                                xy.DayType = Enums.DayType.Poor;
                            }
                            u.DayTypeDistributions.Add(xy);
                        }
                        DemandDistributions.Add(u);
                    }
                }
            }
            fs.Close();
        }
Example #4
0
        ///////////// SimulationTable ////////////////
        public void fillTable()
        {
            Random rand = new Random();

            for (int i = 1; i <= NumOfRecords; i++)
            {
                SimulationCase sc = new SimulationCase();
                sc.DayNo = i;

                sc.RandomNewsDayType = rand.Next(1, 101);
                sc.RandomDemand      = rand.Next(1, 101);

                if (sc.RandomNewsDayType >= DayTypeDistributions.ElementAt(0).MinRange&& sc.RandomNewsDayType <= DayTypeDistributions.ElementAt(0).MaxRange)
                {
                    sc.NewsDayType = Enums.DayType.Good;
                }
                else if (sc.RandomNewsDayType >= DayTypeDistributions.ElementAt(1).MinRange&& sc.RandomNewsDayType <= DayTypeDistributions.ElementAt(1).MaxRange)
                {
                    sc.NewsDayType = Enums.DayType.Fair;
                }
                else
                {
                    sc.NewsDayType = Enums.DayType.Poor;
                }


                if (sc.NewsDayType == Enums.DayType.Good)
                {
                    for (int j = 0; j < DemandDistributions.Count; j++)
                    {
                        if (sc.RandomDemand >= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(0).MinRange&& sc.RandomDemand <= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(0).MaxRange)
                        {
                            sc.Demand = DemandDistributions.ElementAt(j).Demand;
                        }
                    }
                }



                else if (sc.NewsDayType == Enums.DayType.Fair)
                {
                    for (int j = 0; j < DemandDistributions.Count; j++)
                    {
                        if (sc.RandomDemand >= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(1).MinRange&& sc.RandomDemand <= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(1).MaxRange)
                        {
                            sc.Demand = DemandDistributions.ElementAt(j).Demand;
                        }
                    }
                }
                else
                {
                    for (int j = 0; j < DemandDistributions.Count; j++)
                    {
                        if (sc.RandomDemand >= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(2).MinRange&& sc.RandomDemand <= DemandDistributions.ElementAt(j).DayTypeDistributions.ElementAt(2).MaxRange)
                        {
                            sc.Demand = DemandDistributions.ElementAt(j).Demand;
                        }
                    }
                }



                sc.DailyCost = NumOfNewspapers * PurchasePrice;
                if (sc.Demand >= NumOfNewspapers)
                {
                    sc.SalesProfit = NumOfNewspapers * SellingPrice;
                    sc.LostProfit  = (sc.Demand - NumOfNewspapers) * (SellingPrice - PurchasePrice);
                    sc.ScrapProfit = 0;
                }

                else if (NumOfNewspapers > sc.Demand)
                {
                    sc.SalesProfit = sc.Demand * SellingPrice;
                    sc.ScrapProfit = (NumOfNewspapers - sc.Demand) * ScrapPrice;
                    sc.LostProfit  = 0;
                }
                sc.DailyNetProfit = sc.SalesProfit - sc.DailyCost - sc.LostProfit + sc.ScrapProfit;
                SimulationTable.Add(sc);
            }
        }
        public void InputData(string[] lines)
        {
            int stringType = 0;

            char[] delimiters = { ',', ' ' };
            foreach (string line in lines)
            {
                if (line == "\n" || line.Length == 0)
                {
                    continue;
                }
                switch (line)
                {
                case "NumOfNewspapers":
                    stringType = 1;
                    continue;

                case "NumOfRecords":
                    stringType = 2;
                    continue;

                case "PurchasePrice":
                    stringType = 3;
                    continue;

                case "ScrapPrice":
                    stringType = 4;
                    continue;

                case "SellingPrice":
                    stringType = 5;
                    continue;

                case "DayTypeDistributions":
                    stringType = 6;
                    continue;

                case "DemandDistributions":
                    stringType = 7;
                    continue;
                }

                switch (stringType)
                {
                case 1:
                    NumOfNewspapers = int.Parse(line);
                    break;

                case 2:
                    NumOfRecords = int.Parse(line);
                    break;

                case 3:
                    PurchasePrice = decimal.Parse(line);
                    break;

                case 4:
                    ScrapPrice = decimal.Parse(line);
                    break;

                case 5:
                    SellingPrice = decimal.Parse(line);
                    break;

                case 6:
                    string[] distributions = line.Split(delimiters);
                    int      type          = 0;
                    decimal  cummProb      = 0;
                    foreach (string distribution in distributions)
                    {
                        if (distribution.Length == 0)
                        {
                            continue;
                        }
                        DayTypeDistribution DTD = new DayTypeDistribution();
                        DTD.DayType         = (Enums.DayType)type;
                        DTD.Probability     = decimal.Parse(distribution);
                        DTD.MinRange        = decimal.ToInt32(cummProb * 100 + 1);
                        cummProb           += DTD.Probability;
                        DTD.MaxRange        = decimal.ToInt32(cummProb * 100);
                        DTD.CummProbability = cummProb;
                        type += 1;

                        DayTypeDistributions.Add(DTD);
                    }
                    break;

                case 7:
                    string[]           numbers   = line.Split(delimiters);
                    int                typeCase7 = 0;
                    bool               flag      = false;
                    DemandDistribution DD        = new DemandDistribution();
                    foreach (string number in numbers)
                    {
                        if (number.Length == 0)
                        {
                            continue;
                        }
                        if (flag)
                        {
                            DayTypeDistribution DTD = new DayTypeDistribution();
                            DTD.DayType     = (Enums.DayType)typeCase7;
                            DTD.Probability = decimal.Parse(number);
                            typeCase7      += 1;

                            DD.DayTypeDistributions.Add(DTD);
                        }
                        else
                        {
                            flag      = true;
                            DD.Demand = int.Parse(number);
                        }
                    }
                    DemandDistributions.Add(DD);
                    break;
                }
            }

            decimal[] cummSum = { 0, 0, 0 };
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < DemandDistributions.Count; j++)
                {
                    DemandDistributions[j].DayTypeDistributions[i].MinRange = decimal.ToInt32(cummSum[i] * 100 + 1);
                    cummSum[i] += DemandDistributions[j].DayTypeDistributions[i].Probability;
                    DemandDistributions[j].DayTypeDistributions[i].MaxRange        = decimal.ToInt32(cummSum[i] * 100);
                    DemandDistributions[j].DayTypeDistributions[i].CummProbability = cummSum[i];
                }
            }

            UnitProfit = SellingPrice - PurchasePrice;
        }
 public void ClearSystem()
 {
     DayTypeDistributions.Clear();
     DemandDistributions.Clear();
     SimulationTable.Clear();
 }
        public void LoadCase(string fileName)
        {
            var lines = File.ReadAllLines(path + fileName);

            NumOfNewspapers = int.Parse(lines[1]);
            NumOfRecords    = int.Parse(lines[4]);
            PurchasePrice   = decimal.Parse(lines[7]);
            ScrapPrice      = decimal.Parse(lines[10]);
            SellingPrice    = decimal.Parse(lines[13]);
            UnitProfit      = SellingPrice - PurchasePrice;

            #region
            // day type distribution
            var DayTypes = lines[16].Split(',');
            var cummProb = 0.0m;
            foreach (var day in DayTypes)
            {
                var dayTypeDistribution = new DayTypeDistribution
                {
                    Probability = decimal.Parse(day),
                    MinRange    = (int)(cummProb * 100) + 1
                };
                cummProb += dayTypeDistribution.Probability;
                dayTypeDistribution.CummProbability = cummProb;
                dayTypeDistribution.MaxRange        = (int)(cummProb * 100);

                DayTypeDistributions.Add(dayTypeDistribution);
            }
            DayTypeDistributions[0].DayType = Enums.DayType.Good;
            DayTypeDistributions[1].DayType = Enums.DayType.Fair;
            DayTypeDistributions[2].DayType = Enums.DayType.Poor;
            #endregion

            #region
            // Demand distribution
            decimal goodCumm = 0.0m, fairCumm = 0.0m, poorCum = 0.0m;
            for (int i = 19; i < lines.Length; i++)
            {
                var values = lines[i].Split(',');                       // demand, good, fair, poor

                var goodDay = new DayTypeDistribution
                {
                    DayType     = Enums.DayType.Good,
                    Probability = decimal.Parse(values[1]),
                    MinRange    = (int)(goodCumm * 100) + 1,
                    MaxRange    = (int)((goodCumm + decimal.Parse(values[1])) * 100)
                };
                goodCumm += goodDay.Probability;
                goodDay.CummProbability = goodCumm;

                var fairDay = new DayTypeDistribution
                {
                    DayType     = Enums.DayType.Fair,
                    Probability = decimal.Parse(values[2]),
                    MinRange    = (int)(fairCumm * 100) + 1,
                    MaxRange    = (int)((fairCumm + decimal.Parse(values[2])) * 100)
                };
                fairCumm += fairDay.Probability;
                fairDay.CummProbability = fairCumm;

                var poorDay = new DayTypeDistribution
                {
                    DayType     = Enums.DayType.Poor,
                    Probability = decimal.Parse(values[3]),
                    MinRange    = (int)(poorCum * 100) + 1,
                    MaxRange    = (int)((poorCum + decimal.Parse(values[3])) * 100)
                };
                poorCum += poorDay.Probability;
                fairDay.CummProbability = poorCum;

                var demandDistribution = new DemandDistribution
                {
                    Demand = int.Parse(values[0])
                };
                if (goodDay.Probability > 0)
                {
                    demandDistribution.DayTypeDistributions.Add(goodDay);
                }
                if (fairDay.Probability > 0)
                {
                    demandDistribution.DayTypeDistributions.Add(fairDay);
                }
                if (poorDay.Probability > 0)
                {
                    demandDistribution.DayTypeDistributions.Add(poorDay);
                }

                DemandDistributions.Add(demandDistribution);
            }
            #endregion
        }