Example #1
0
        //manar
        public Enums.DayType gettypeofnewsdays(int rnum)
        {
            Enums.DayType daytype = Enums.DayType.Good;
            int           size    = this.DayTypeDistributions.Count;
            bool          found;

            for (int i = 0; i < size; i++)
            {
                int range = this.DayTypeDistributions[i].MinRange;
                found = false;
                int mx = this.DayTypeDistributions[i].MaxRange;
                if (mx == 0)
                {
                    mx = 100;
                }
                while (range <= mx)
                {
                    if (rnum == range)
                    {
                        daytype = this.DayTypeDistributions[i].DayType;
                        found   = true;
                        break;
                    }
                    ++range;
                }
                if (found == true)
                {
                    break;
                }
            } //endfor
            return(daytype);
        }     //end
Example #2
0
        }     //end

        public int getdemand(int rnum, Enums.DayType newsdatatype)
        {
            int demand = 0,
                size   = this.DemandDistributions.Count,
                ind    = (int)newsdatatype;
            bool found;

            for (int i = 0; i < size; i++)
            {
                int range = this.DemandDistributions[i].DayTypeDistributions[ind].MinRange;
                found = false;
                int mx = this.DemandDistributions[i].DayTypeDistributions[ind].MaxRange;
                if (mx == 0)
                {
                    mx = 100;
                }
                while (range <= mx)
                {
                    if (rnum == range)
                    {
                        demand = this.DemandDistributions[i].Demand;
                        found  = true;
                        break;
                    }
                    ++range;
                }
                if (found == true)
                {
                    break;
                }
            } //endfor
            return(demand);
        }     //end
Example #3
0
        //OPERATION

        Enums.DayType GetDayType(int Entry)
        {
            Enums.DayType Out = new Enums.DayType();
            foreach (DayTypeDistribution DTD in DayTypeDistributions)
            {
                if (Entry <= DTD.MaxRange && Entry >= DTD.MinRange)
                {
                    Out = DTD.DayType;
                }
            }
            return(Out);
        }
 private int GetDemand(int rand, Enums.DayType dayType)
 {
     for (int i = 0; i < DemandDistributions.Count; i++)
     {
         var temp = DemandDistributions[i].DayTypeDistributions.Find(x => x.DayType == dayType);
         if (rand >= temp.MinRange && rand <= temp.MaxRange)
         {
             return(DemandDistributions[i].Demand);
         }
     }
     return(rand);
 }
 public int get_demand(int ran, Enums.DayType da)
 {
     for (int i = 0; i < DemandDistributions.Count; i++)
     {
         for (int j = 0; j < DemandDistributions[i].DayTypeDistributions.Count; j++)
         {
             if (DemandDistributions[i].DayTypeDistributions[j].MinRange <= ran && DemandDistributions[i].DayTypeDistributions[j].MaxRange >= ran && DemandDistributions[i].DayTypeDistributions[j].DayType == da)
             {
                 return(DemandDistributions[i].Demand);
             }
         }
     }
     return(0);
 }
        int getDemand(Enums.DayType DT, int randomNum)
        {
            int index = (int)DT;

            for (int i = 0; i < DemandDistributions.Count; i++)
            {
                if (DemandDistributions[i].DayTypeDistributions[index].MinRange <= randomNum && DemandDistributions[i].DayTypeDistributions[index].MaxRange >= randomNum)
                {
                    index = i;
                    break;
                }
            }
            return(DemandDistributions[index].Demand);
        }
 public void setter(Enums.DayType DT, double P, ref double cumSum, ref int minRange)
 {
     this.DayType         = DT;
     this.Probability     = P;
     cumSum              += P;
     this.CummProbability = cumSum;
     this.MinRange        = minRange;
     this.MaxRange        = int.Parse((cumSum * 100).ToString());
     minRange             = this.MaxRange + 1;
     if (cumSum == 1)
     {
         this.MaxRange = 0;
         minRange      = 0;
     }
 }
Example #8
0
        int GetDemand(int Entry, Enums.DayType DTE)
        {
            int Out = -1;

            foreach (DemandDistribution DD in DemandDistributions)
            {
                if (DD.DayTypeDistributions[(int)DTE].MaxRange >= Entry && DD.DayTypeDistributions[(int)DTE].MinRange <= Entry)
                {
                    Out = DD.Demand;
                    break;
                }
            }
            if (Out == -1)
            {
                throw new Exception("Warning demand distrubution didn't match any of the known ranges!");
            }
            return(Out);
        }
Example #9
0
        public async Task <ServiceResponse <GetDeparturesDTO> > GetDepartures(string dayType, int lineId)
        {
            ServiceResponse <GetDeparturesDTO> response = new ServiceResponse <GetDeparturesDTO>();

            Enums.DayType day = (Enums.DayType)Enum.Parse(typeof(Enums.DayType), dayType);
            //Enums.LineType line = (Enums.LineType) Enum.Parse(typeof(Enums.LineType), lineType);
            List <DepartureDTO> departures = new List <DepartureDTO>();

            try
            {
                Timetable timetable = await _context.Timetables
                                      .Include(t => t.Departures)
                                      .FirstOrDefaultAsync(t => t.Active == true && t.DayType == day && t.LineId == lineId);

                if (timetable != null)
                {
                    foreach (var departure in timetable.Departures)
                    {
                        departures.Add(new DepartureDTO
                        {
                            Id = departure.Id,
                            // Removing the date part
                            Time = departure.Time.ToString().Split(' ')[1].Substring(0, 5)
                        }
                                       );
                    }
                    departures.OrderByDescending(d => d.Time);
                    response.Data = new GetDeparturesDTO {
                        TimetableId = timetable.Id, Departures = departures
                    };
                }
                else
                {
                    response.Success = false;
                    response.Message = "Timetable not found.";
                }
            }
            catch (Exception e)
            {
                response.Success = false;
                response.Message = e.Message;
            }
            return(response);
        }
Example #10
0
        public static int demand(int number, Enums.DayType type, List <DemandDistribution> distribution)
        {
            int x = 0;

            if (type == Enums.DayType.Good)
            {
                for (int i = 0; i < distribution.Count; ++i)
                {
                    if (number >= distribution[i].DayTypeDistributions[0].MinRange && number <= distribution[i].DayTypeDistributions[0].MaxRange)
                    {
                        return(distribution[i].Demand);
                    }
                }
            }
            else if (type == Enums.DayType.Fair)
            {
                for (int i = 0; i < distribution.Count; ++i)
                {
                    if (number >= distribution[i].DayTypeDistributions[1].MinRange && number <= distribution[i].DayTypeDistributions[1].MaxRange)
                    {
                        return(distribution[i].Demand);
                    }
                }
            }
            else if (type == Enums.DayType.Poor)
            {
                for (int i = 0; i < distribution.Count; ++i)
                {
                    if (number >= distribution[i].DayTypeDistributions[2].MinRange && number <= distribution[i].DayTypeDistributions[2].MaxRange)
                    {
                        return(distribution[i].Demand);
                    }
                }
            }
            return(x);
        }
Example #11
0
        public List <DemandDistribution> demandFill(List <int> D, List <double> P1, List <double> P2, List <double> P3, Enums.DayType DT1, Enums.DayType DT2, Enums.DayType DT3)
        {
            List <DemandDistribution> res = new List <DemandDistribution>();
            int    count = D.Count;
            double c1, c2, c3 = c2 = c1 = 0;
            int    min1, min2, min3 = min2 = min1 = 1;

            for (int i = 0; i < count; i++)
            {
                DemandDistribution item = new DemandDistribution();
                item.Demand = D[i];
                DayTypeDistribution d1 = new DayTypeDistribution(), d2 = new DayTypeDistribution(), d3 = new DayTypeDistribution();
                //fill d1
                d1.setter(DT1, P1[i], ref c1, ref min1);
                item.DayTypeDistributions.Add(d1);
                //fill d2
                d2.setter(DT2, P2[i], ref c2, ref min2);
                item.DayTypeDistributions.Add(d2);
                //fill d3
                d3.setter(DT3, P3[i], ref c3, ref min3);
                item.DayTypeDistributions.Add(d3);
                res.Add(item);
            }
            if (c1 != 1)
            {
                invalidprob[0] = true;
            }
            if (c2 != 1)
            {
                invalidprob[1] = true;
            }
            if (c3 != 1)
            {
                invalidprob[2] = true;
            }
            return((c1 != 1 || c2 != 1 || c3 != 1) ? null : res);
        }
        private void demandFill_Click(object sender, EventArgs e)
        {
            Program.f1.s.DemandDistributions.Clear();
            List <int>    D = new List <int>();
            List <double> P1 = new List <double>(), P2 = new List <double>(), P3 = new List <double>();

            Enums.DayType DT11 = Enums.DayType.Good, DT2 = Enums.DayType.Fair, DT3 = Enums.DayType.Poor;
            for (int i = 0; i < dgv_d.Rows.Count - 1; ++i)
            {
                string val;
                if (dgv_d.Rows[i].Cells["dDemand"].Value != null)
                {
                    val = dgv_d.Rows[i].Cells["dDemand"].Value.ToString();
                    if (Program.f1.s.isNum(val) == true)
                    {
                        D.Add(int.Parse(val));
                    }
                    else
                    {
                        MessageBox.Show("Invalid Demand Cell " + (i + 1).ToString() + " in Demand Distro.", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                if (dgv_d.Rows[i].Cells["dGoodProb"].Value != null)
                {
                    val = dgv_d.Rows[i].Cells["dGoodProb"].Value.ToString();
                    if (Program.f1.s.isNum(val) == true)
                    {
                        P1.Add(double.Parse(val));
                    }
                    else
                    {
                        MessageBox.Show("Invalid Good Probability Cell " + (i + 1).ToString() + " in Demand Distro.", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                if (dgv_d.Rows[i].Cells["dFairProb"].Value != null)
                {
                    val = dgv_d.Rows[i].Cells["dFairProb"].Value.ToString();
                    if (Program.f1.s.isNum(val) == true)
                    {
                        P2.Add(double.Parse(val));
                    }
                    else
                    {
                        MessageBox.Show("Invalid Fair Probability Cell " + (i + 1).ToString() + " in Demand Distro.", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                if (dgv_d.Rows[i].Cells["dPoorProb"].Value != null)
                {
                    val = dgv_d.Rows[i].Cells["dPoorProb"].Value.ToString();
                    if (Program.f1.s.isNum(val) == true)
                    {
                        P3.Add(double.Parse(val));
                    }
                    else
                    {
                        MessageBox.Show("Invalid Fair Probability Cell " + (i + 1).ToString() + " in Demand Distro.", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            while (P1.Count < D.Count)
            {
                P1.Add(0);
            }
            while (P2.Count < D.Count)
            {
                P2.Add(0);
            }
            while (P3.Count < D.Count)
            {
                P3.Add(0);
            }
            if (D.Count < P1.Count || D.Count < P2.Count || D.Count < P3.Count)
            {
                MessageBox.Show("Error,Probability Fields with no Demands matched fields!\nAdd the incomplete Demands", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                List <DemandDistribution> d = new List <DemandDistribution>();
                d = Program.f1.s.demandFill(D, P1, P2, P3, DT11, DT2, DT3);
                if (d == null)
                {
                    //Good Wrong Cumulative Sum
                    if (Program.f1.s.invalidprob[0] == true)
                    {
                        MessageBox.Show("Probability Input for Good Days Invalid!", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    //Fair Wrong Cumulative Sum
                    if (Program.f1.s.invalidprob[1] == true)
                    {
                        MessageBox.Show("Probability Input for Fair Days Invalid!", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    //Poor Wrong Cumulative Sum
                    if (Program.f1.s.invalidprob[2] == true)
                    {
                        MessageBox.Show("Probability Input for Poor Days Invalid!", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    Program.f1.s.DemandDistributions = d;
                    dgv_d.Rows.Clear();
                    //Fill Data Grid View
                    foreach (DemandDistribution item in d)
                    {
                        dgv_d.Rows.Add(
                            item.Demand,
                            //Good
                            item.DayTypeDistributions[0].Probability,
                            item.DayTypeDistributions[0].CummProbability,
                            item.DayTypeDistributions[0].MinRange,
                            item.DayTypeDistributions[0].MaxRange,
                            //Fair
                            item.DayTypeDistributions[1].Probability,
                            item.DayTypeDistributions[1].CummProbability,
                            item.DayTypeDistributions[1].MinRange,
                            item.DayTypeDistributions[1].MaxRange,
                            //Poor
                            item.DayTypeDistributions[2].Probability,
                            item.DayTypeDistributions[2].CummProbability,
                            item.DayTypeDistributions[2].MinRange,
                            item.DayTypeDistributions[2].MaxRange
                            );
                    }
                    MessageBox.Show(" Done :) ");
                }
            }
        }
 public DayTypeDistribution(Enums.DayType DayType, decimal Probability)
 {
     this.DayType     = DayType;
     this.Probability = Probability;
 }
Example #14
0
        /// <summary>
        /// Calculates the distribution for a given demand distribution
        /// </summary>
        /// <param name="Distribution">Demand distribution</param>
        /// <param name="RandomNumber">A random number between 0 and 99</param>
        /// <returns>The desired value that corrisponds to the given random number</returns>
        static private int CalculateDistribution(List <DemandDistribution> Distribution, Enums.DayType dayType, int RandomNumber)
        {
            int j = 0;

            while (j < Distribution[0].DayTypeDistributions.Count)
            {
                if (Distribution[0].DayTypeDistributions[j].DayType == dayType)
                {
                    break;
                }
                j++;
            }
            if (j == Distribution[0].DayTypeDistributions.Count)
            {
                throw new ArgumentException("The given day type doesn't exist");
            }
            for (int i = 0; i < Distribution.Count; i++)
            {
                if (CalculateSingleRowDistribution(Distribution[i].DayTypeDistributions[j],
                                                   (i == 0) ? null : Distribution[i - 1].DayTypeDistributions[j],
                                                   RandomNumber))
                {
                    return(Distribution[i].Demand);
                }
            }
            throw new Exception("Couldn't determine demand value");
        }