private void inputs(string filename)
 {
     string[] lines = File.ReadAllLines(filename);
     OrderUpTo              = Int32.Parse(lines[1]);
     ReviewPeriod           = Int32.Parse(lines[4]);
     StartInventoryQuantity = Int32.Parse(lines[7]);
     StartLeadDays          = Int32.Parse(lines[10]);
     StartOrderQuantity     = Int32.Parse(lines[13]);
     NumberOfDays           = Int32.Parse(lines[16]);
     string[] temp;
     for (int i = 19; i < 24; i++)
     {
         temp = lines[i].Split(',');
         DemandDistribution.Add(new Distribution());
         DemandDistribution[i - 19].Value       = Int32.Parse(temp[0]);
         DemandDistribution[i - 19].Probability = Decimal.Parse(temp[1]);
     }
     for (int i = 26; i < 29; i++)
     {
         temp = lines[i].Split(',');
         LeadDaysDistribution.Add(new Distribution());
         LeadDaysDistribution[i - 26].Value       = Int32.Parse(temp[0]);
         LeadDaysDistribution[i - 26].Probability = Decimal.Parse(temp[1]);
     }
 }
        private SimulationSystem LoadSystemFromUI()
        {
            List <DemandDistribution> demandDistributions = new List <DemandDistribution>();

            for (int i = 0; i < DemandDistributionGrid.Rows.Count - 1; i++)
            {
                DataGridViewRow    row = DemandDistributionGrid.Rows[i];
                DemandDistribution demandDistribution = new DemandDistribution()
                {
                    Demand = int.Parse((string)row.Cells[0].Value)
                };
                for (int j = 1; j < 4; j++)
                {
                    demandDistribution.DayTypeDistributions.Add(new DayTypeDistribution()
                    {
                        Probability = decimal.Parse((string)row.Cells[j].Value),
                        DayType     = (Enums.DayType)(j - 1)
                    });
                }
                demandDistributions.Add(demandDistribution);
            }
            return(new SimulationSystem()
            {
                NumOfNewspapers = (int)NumOfNewsPapers.Value,
                NumOfRecords = (int)NumofRecords.Value,
                PurchasePrice = PurchasePrice.Value,
                ScrapPrice = ScrapPrice.Value,
                SellingPrice = SellingPrice.Value,
                DemandDistributions = demandDistributions,
                DayTypeDistributions = new List <DayTypeDistribution>()
                {
                    new DayTypeDistribution()
                    {
                        Probability = GoodProbability.Value,
                        DayType = Enums.DayType.Good
                    },
                    new DayTypeDistribution()
                    {
                        Probability = FairProbability.Value,
                        DayType = Enums.DayType.Fair
                    },
                    new DayTypeDistribution()
                    {
                        Probability = PoorProbabilty.Value,
                        DayType = Enums.DayType.Poor
                    }
                }
            });
        }
Example #3
0
        private void button2_Click(object sender, EventArgs e)
        {
            DemandDistribution  d  = new DemandDistribution();
            DayTypeDistribution dd = new DayTypeDistribution();
            int cnt = 0;

            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                d = new DemandDistribution();
                mySystem.DemandDistributions.Add(d);
                mySystem.DemandDistributions[i].Demand = int.Parse(dataGridView1[0, i].Value.ToString());
                for (int j = 1; j < mySystem.DayTypeDistributions.Count + 1; j++)
                {
                    dd         = new DayTypeDistribution();
                    dd.DayType = (Enums.DayType)(j - 1);
                    if (i == 0)
                    {
                        dd.Probability     = double.Parse(dataGridView1[j, i].Value.ToString());
                        dd.CummProbability = double.Parse(dataGridView1[j, i].Value.ToString());
                        dd.MinRange        = 1;
                        dd.MaxRange        = (int)(dd.CummProbability * 100);
                    }
                    else
                    {
                        dd.Probability = double.Parse(dataGridView1[j, i].Value.ToString());


                        dd.CummProbability =
                            dd.Probability + mySystem.DemandDistributions[i - 1].DayTypeDistributions[Math.Abs(j - 1)].CummProbability;
                        dd.MinRange =
                            (mySystem.DemandDistributions[i - 1].DayTypeDistributions[j - 1].MaxRange) + 1;
                        dd.MaxRange = (int)(dd.CummProbability * 100);
                    }
                    mySystem.DemandDistributions[i].DayTypeDistributions.Add(dd);

                    cnt++;
                }
            }
        }
Example #4
0
        private void read_data_Click(object sender, EventArgs e)
        {
            string test = "", filename = "";

            test     = testcase.Text.ToString();
            filename = @"C:\Users\Mahmoud\Desktop\Task2\Template\NewspaperSellerSimulation\TestCases\TestCase" + test[0] + ".txt";
            if (File.Exists(filename))
            {
                string text = System.IO.File.ReadAllText(filename);

                DayTypeDistribution D = new DayTypeDistribution();

                string[] lines = System.IO.File.ReadAllLines(filename);
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i] == "NumOfNewspapers")
                    {
                        i++;
                        simulationSystem.NumOfNewspapers = Convert.ToInt32(lines[i]);
                    }
                    if (lines[i] == "NumOfRecords")
                    {
                        i++;
                        simulationSystem.NumOfRecords = Convert.ToInt32(lines[i]);
                    }
                    if (lines[i] == "PurchasePrice")
                    {
                        i++;
                        simulationSystem.PurchasePrice = Convert.ToDecimal(lines[i]);
                    }
                    if (lines[i] == "ScrapPrice")
                    {
                        i++;
                        simulationSystem.ScrapPrice = Convert.ToDecimal(lines[i]);
                    }
                    if (lines[i] == "SellingPrice")
                    {
                        i++;
                        simulationSystem.SellingPrice = Convert.ToDecimal(lines[i]);
                    }
                    if (lines[i] == "DayTypeDistributions")
                    {
                        i++;
                        string[] DayTypeD;
                        DayTypeD    = lines[i].Split(',');
                        DayTypeD[1] = DayTypeD[1].Remove(0, 1);
                        DayTypeD[2] = DayTypeD[2].Remove(0, 1);

                        D             = new DayTypeDistribution();
                        D.DayType     = Enums.DayType.Good;
                        D.Probability = Convert.ToDecimal(DayTypeD[0]);
                        simulationSystem.DayTypeDistributions.Add(D);

                        D             = new DayTypeDistribution();
                        D.DayType     = Enums.DayType.Fair;
                        D.Probability = Convert.ToDecimal(DayTypeD[1]);
                        simulationSystem.DayTypeDistributions.Add(D);

                        D             = new DayTypeDistribution();
                        D.DayType     = Enums.DayType.Poor;
                        D.Probability = Convert.ToDecimal(DayTypeD[2]);
                        simulationSystem.DayTypeDistributions.Add(D);
                    }
                    if (lines[i] == "DemandDistributions")
                    {
                        i++;
                        string[]           DemandDist;
                        DemandDistribution demDist;
                        bool firstTime = true;
                        while (i < lines.Length)
                        {
                            demDist        = new DemandDistribution();
                            DemandDist     = lines[i].Split(',');
                            demDist.Demand = Convert.ToInt32(DemandDist[0]);
                            for (int j = 1; j < DemandDist.Length; j++)
                            {
                                D = new DayTypeDistribution();
                                DemandDist[j].Remove(0, 1);

                                if (j == 1)
                                {
                                    D.DayType = Enums.DayType.Good;
                                }
                                else if (j == 2)
                                {
                                    D.DayType = Enums.DayType.Fair;
                                }
                                else
                                {
                                    D.DayType = Enums.DayType.Poor;
                                }

                                D.Probability = Convert.ToDecimal(DemandDist[j]);
                                demDist.DayTypeDistributions.Add(D);
                            }
                            simulationSystem.DemandDistributions.Add(demDist);
                            i++;
                        }
                    }
                }
                MessageBox.Show("file has been read successfully");
            }
            else
            {
                MessageBox.Show("error in reading file");
            }
        }
        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.Contains("OrderUpTo"))
                {
                    OrderUpTo = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("ReviewPeriod"))
                {
                    ReviewPeriod = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("StartInventoryQuantity"))
                {
                    StartInventoryQuantity = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("StartLeadDays"))
                {
                    StartLeadDays = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("StartOrderQuantity"))
                {
                    StartOrderQuantity = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("NumberOfDays"))
                {
                    NumberOfDays = int.Parse(sr.ReadLine());
                }
                else if (fineline.Contains("DemandDistribution"))
                {
                    int cp = 0;
                    while (true)
                    {
                        string td = sr.ReadLine();
                        if (td == "")
                        {
                            break;
                        }
                        string[]     l = td.Split(',');
                        Distribution x = new Distribution();
                        x.Value = int.Parse(l[0]);
                        int pro = Convert.ToInt32(float.Parse(l[1]) * 100);
                        x.Probability     = pro;
                        x.CummProbability = cp + pro;
                        x.MinRange        = cp + 1;
                        cp        += pro;
                        x.MaxRange = cp;
                        DemandDistribution.Add(x);
                    }
                }
                else if (fineline.Contains("LeadDaysDistribution"))
                {
                    int cp = 0;
                    while (true)
                    {
                        string td = sr.ReadLine();
                        if (td == "" || td == null)
                        {
                            break;
                        }
                        string[]     l = td.Split(',');
                        Distribution x = new Distribution();
                        x.Value = int.Parse(l[0]);
                        int pro = Convert.ToInt32(float.Parse(l[1]) * 100);
                        x.Probability     = pro;
                        x.CummProbability = cp + pro;
                        x.MinRange        = cp + 1;
                        cp        += pro;
                        x.MaxRange = cp;
                        LeadDaysDistribution.Add(x);
                    }
                }
            }
            fs.Close();
        }
Example #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            sys = new SimulationSystem();

            // pass inputs to the system object
            sys.NumOfNewspapers = Convert.ToInt32(numOfNewspapers_txt.Text);
            sys.NumOfRecords    = Convert.ToInt32(numOfRecords_txt.Text);
            sys.PurchasePrice   = Convert.ToDecimal(purchasePrice_txt.Text);
            sys.SellingPrice    = Convert.ToDecimal(sellingPrice_txt.Text);
            sys.ScrapPrice      = Convert.ToDecimal(scrapPrice_txt.Text);

            DayTypeDistribution goodDist, fairDist, poorDist;

            goodDist = new DayTypeDistribution {
                DayType     = Enums.DayType.Good,
                Probability = Convert.ToDecimal(good_txt.Text)
            };
            sys.DayTypeDistributions.Add(goodDist);

            fairDist = new DayTypeDistribution
            {
                DayType     = Enums.DayType.Fair,
                Probability = Convert.ToDecimal(fair_txt.Text)
            };
            sys.DayTypeDistributions.Add(fairDist);

            poorDist = new DayTypeDistribution
            {
                DayType     = Enums.DayType.Poor,
                Probability = Convert.ToDecimal(poor_txt.Text)
            };
            sys.DayTypeDistributions.Add(poorDist);

            int numOfdemandDists = demandDists_dgv.Rows.Count - 1;
            DemandDistribution  demandDist;
            DayTypeDistribution dayDist;

            for (int i = 0; i < numOfdemandDists; i++)
            {
                demandDist        = new DemandDistribution();
                demandDist.Demand = Convert.ToInt32(demandDists_dgv.Rows[i].Cells[0].Value);

                for (int j = 0; j < sys.DayTypeDistributions.Count; j++)
                {
                    dayDist             = new DayTypeDistribution();
                    dayDist.DayType     = sys.DayTypeDistributions[j].DayType;
                    dayDist.Probability = Convert.ToDecimal(demandDists_dgv.Rows[i].Cells[j + 1].Value);

                    demandDist.DayTypeDistributions.Add(dayDist);
                }

                sys.DemandDistributions.Add(demandDist);
            }


            // call process functions
            sys.Initialize_Inputs();
            sys.Start_Process();

            // fill gui with result data
            results_dgv.Rows.Clear();
            foreach (var record in sys.SimulationTable)
            {
                results_dgv.Rows.Add(record.DayNo, record.RandomNewsDayType, record.NewsDayType.ToString(), record.RandomDemand, record.Demand, record.SalesProfit, record.LostProfit, record.ScrapProfit, record.DailyNetProfit);
            }
        }
Example #7
0
        public void ReadInput(string filepath)
        {
            string       str;
            FileStream   fs = new FileStream(filepath, FileMode.Open);
            StreamReader SR = new StreamReader(fs);

            //    char s = (char)SR.Read();
            while (SR.Peek() != -1)
            {
                str = SR.ReadLine();
                if (str == "OrderUpTo")
                {
                    OrderUpTo = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "ReviewPeriod")
                {
                    ReviewPeriod = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "StartLeadDays")
                {
                    StartLeadDays = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "StartInventoryQuantity")
                {
                    StartInventoryQuantity = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "StartOrderQuantity")
                {
                    StartOrderQuantity = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "NumberOfDays")
                {
                    NumberOfDays = int.Parse(SR.ReadLine());
                    SR.ReadLine();
                    continue;
                }
                else if (str == "DemandDistribution")
                {
                    str = SR.ReadLine();
                    while (str != "")
                    {
                        string[]     substrings = str.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        Distribution DD         = new Distribution();
                        DD.Value       = int.Parse(substrings[0]);
                        DD.Probability = decimal.Parse(substrings[1]);
                        str            = SR.ReadLine();
                        DemandDistribution.Add(DD);
                    }
                    generate_cumulative_range(DemandDistribution);
                    continue;
                }
                else if (str == "LeadDaysDistribution")
                {
                    str = SR.ReadLine();
                    while (str != "" && str != null)
                    {
                        string[]     substrings = str.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        Distribution LTD        = new Distribution();
                        LTD.Value       = int.Parse(substrings[0]);
                        LTD.Probability = decimal.Parse(substrings[1]);
                        str             = SR.ReadLine();
                        LeadDaysDistribution.Add(LTD);
                    }
                    generate_cumulative_range(LeadDaysDistribution);
                    continue;
                }
            }
            SR.Close();
        }
        public void fillSimSysObj(string[] sysData)
        {
            simSys.NumOfNewspapers = Convert.ToInt32(sysData[1]);
            simSys.NumOfRecords    = Convert.ToInt32(sysData[4]);
            simSys.PurchasePrice   = Convert.ToDecimal(sysData[7]);
            simSys.ScrapPrice      = Convert.ToDecimal(sysData[10]);
            simSys.SellingPrice    = Convert.ToDecimal(sysData[13]);

            //DayTypeDistributionTable
            string[] Day_line = sysData[16].Split(new string[] { ", " }, StringSplitOptions.None);
            for (int j = 0; j < 3; j++)
            {
                DayTypeDistribution dayTypeDistributionRow = new DayTypeDistribution();
                if (j == 0)
                {
                    dayTypeDistributionRow.DayType = Enums.DayType.Good;
                }
                else if (j == 1)
                {
                    dayTypeDistributionRow.DayType = Enums.DayType.Fair;
                }
                else if (j == 2)
                {
                    dayTypeDistributionRow.DayType = Enums.DayType.Poor;
                }

                dayTypeDistributionRow.Probability = Convert.ToDecimal(Day_line[j]);
                simSys.DayTypeDistributions.Add(dayTypeDistributionRow);
                //lsaaa
            }

            int i = 19;

            while (i < sysData.Count())
            {
                string[]           Demand_line           = sysData[i].Split(new string[] { ", " }, StringSplitOptions.None);
                DemandDistribution demandDistributionRow = new DemandDistribution();
                demandDistributionRow.Demand = Convert.ToInt32(Demand_line[0]);
                for (int j = 1; j <= 3; j++)
                {
                    DayTypeDistribution dayTypeDistributionRow = new DayTypeDistribution();
                    if (j == 1)
                    {
                        dayTypeDistributionRow.DayType = Enums.DayType.Good;
                    }
                    if (j == 2)
                    {
                        dayTypeDistributionRow.DayType = Enums.DayType.Fair;
                    }
                    if (j == 3)
                    {
                        dayTypeDistributionRow.DayType = Enums.DayType.Poor;
                    }
                    dayTypeDistributionRow.Probability = Convert.ToDecimal(Demand_line[j]);
                    demandDistributionRow.DayTypeDistributions.Add(dayTypeDistributionRow);
                }

                simSys.DemandDistributions.Add(demandDistributionRow);
                i++;
            }
        }
        ///////////// My Methods /////////////

        public void ReadFromFile(string path)
        {
            Distribution  distribution;
            List <string> fileLines = new List <string>();
            StreamReader  sr        = new StreamReader(path);

            while (!sr.EndOfStream)
            {
                fileLines.Add(sr.ReadLine());
            }
            sr.Close();

            int idx0 = fileLines.IndexOf("OrderUpTo");

            OrderUpTo = Convert.ToInt32(fileLines[idx0 + 1]);

            int idx1 = fileLines.IndexOf("ReviewPeriod");

            ReviewPeriod = Convert.ToInt32(fileLines[idx1 + 1]);

            int idx2 = fileLines.IndexOf("StartInventoryQuantity");

            StartInventoryQuantity = Convert.ToInt32(fileLines[idx2 + 1]);

            int idx3 = fileLines.IndexOf("StartLeadDays");

            StartLeadDays = Convert.ToInt32(fileLines[idx3 + 1]);

            int idx4 = fileLines.IndexOf("StartOrderQuantity");

            StartOrderQuantity = Convert.ToInt32(fileLines[idx4 + 1]);

            int idx5 = fileLines.IndexOf("NumberOfDays");

            NumberOfDays = Convert.ToInt32(fileLines[idx5 + 1]);

            int idx6 = fileLines.IndexOf("DemandDistribution");

            for (int i = idx6 + 1; i < fileLines.Count(); ++i)
            {
                if (string.IsNullOrEmpty(fileLines[i]))
                {
                    break;
                }

                distribution = new Distribution();
                string[] numbers = fileLines[i].Split(new string[] { ", " }, StringSplitOptions.None);
                distribution.Value       = Convert.ToInt32(numbers[0]);
                distribution.Probability = Convert.ToDecimal(numbers[1]);
                DemandDistribution.Add(distribution);
            }

            int idx7 = fileLines.IndexOf("LeadDaysDistribution");

            for (int i = idx7 + 1; i < fileLines.Count(); ++i)
            {
                if (string.IsNullOrEmpty(fileLines[i]))
                {
                    break;
                }

                distribution = new Distribution();
                string[] numbers = fileLines[i].Split(new string[] { ", " }, StringSplitOptions.None);
                distribution.Value       = Convert.ToInt32(numbers[0]);
                distribution.Probability = Convert.ToDecimal(numbers[1]);
                LeadDaysDistribution.Add(distribution);
            }
        }
Example #10
0
        /// <summary>
        /// Extracts simulation system out of a file
        /// </summary>
        /// <param name="path">path to simulation system file</param>
        static public SimulationSystem FromFile(string path)
        {
            FileStream       file   = new FileStream(path, FileMode.Open, FileAccess.Read);
            StreamReader     reader = new StreamReader(file);
            SimulationSystem system = new SimulationSystem();

            while (reader.Peek() != -1)
            {
                string header = reader.ReadLine().Trim();
                switch (header)
                {
                case "NumOfNewspapers":
                    system.NumOfNewspapers = int.Parse(reader.ReadLine());
                    break;

                case "NumOfRecords":
                    system.NumOfRecords = int.Parse(reader.ReadLine());
                    break;

                case "PurchasePrice":
                    system.PurchasePrice = decimal.Parse(reader.ReadLine());
                    break;

                case "ScrapPrice":
                    system.ScrapPrice = decimal.Parse(reader.ReadLine());
                    break;

                case "SellingPrice":
                    system.SellingPrice = decimal.Parse(reader.ReadLine());
                    break;

                case "DayTypeDistributions":
                {
                    string    line = reader.ReadLine().Trim();
                    decimal[] arr  = Array.ConvertAll(line.Split(','), decimal.Parse);
                    int       i    = 0;
                    foreach (decimal d in arr)
                    {
                        system.DayTypeDistributions.Add(new DayTypeDistribution()
                            {
                                Probability = d,
                                DayType     = (Enums.DayType)i++
                            });
                    }
                }
                break;

                case "DemandDistributions":
                {
                    string line;
                    while (!string.IsNullOrWhiteSpace(line = reader.ReadLine()))
                    {
                        decimal[]          arr    = Array.ConvertAll(line.Split(','), decimal.Parse);
                        DemandDistribution demand = new DemandDistribution()
                        {
                            Demand = decimal.ToInt32(arr[0])
                        };
                        int i = 0;
                        for (int j = 1; j < arr.Length; j++)
                        {
                            demand.DayTypeDistributions.Add(new DayTypeDistribution()
                                {
                                    Probability = arr[j],
                                    DayType     = (Enums.DayType)i++
                                });
                        }
                        system.DemandDistributions.Add(demand);
                    }
                }
                break;

                default:
                    if (!string.IsNullOrWhiteSpace(header))
                    {
                        throw new FormatException("Test case file contains an unknown header: " + header);
                    }
                    break;
                }
            }
            reader.Close();
            return(system);
        }