コード例 #1
0
            /// <summary>
            /// Read the configuration of a simple RCQueues model from CSV files
            /// </summary>
            /// <param name="dir">The directory of CSV files, i.e., Resource.csv and Activities.csv</param>
            public static Statics ReadFromCSVs(string dir)
            {
                var simpleRCQs = new Statics();

                #region Read Resources
                foreach (var r in ReadDataDictFromCSV(string.Format("{0}\\{1}.csv", dir, Key.Resources)))
                {
                    simpleRCQs.AddResource(r[Key.Id], Convert.ToDouble(r[Key.Capacity]), r[Key.Description]);
                }
                #endregion

                #region Read Activities
                var data_activities = ReadDataDictFromCSV(string.Format("{0}\\{1}.csv", dir, Key.Activities));
                foreach (var r in data_activities)
                {
                    #region Get range of batch size
                    int?           minBatchSize = null, maxBatchSize = null;
                    BatchSizeRange batchSizeRange = new BatchSizeRange();
                    if (r.ContainsKey(Key.BatchSize_Min) && r[Key.BatchSize_Min] != null && r[Key.BatchSize_Min].Length > 0)
                    {
                        minBatchSize = int.Parse(r[Key.BatchSize_Min]);
                    }
                    if (r.ContainsKey(Key.BatchSize_Max) && r[Key.BatchSize_Max] != null && r[Key.BatchSize_Max].Length > 0)
                    {
                        maxBatchSize = int.Parse(r[Key.BatchSize_Max]);
                    }
                    if (minBatchSize != null && maxBatchSize != null)
                    {
                        batchSizeRange = new BatchSizeRange(minBatchSize.Value, maxBatchSize.Value);
                    }
                    else if (minBatchSize != null)
                    {
                        batchSizeRange = new BatchSizeRange(minBatchSize.Value, int.MaxValue);
                    }
                    else if (maxBatchSize != null)
                    {
                        batchSizeRange = new BatchSizeRange(1, maxBatchSize.Value);
                    }
                    #endregion

                    simpleRCQs.AddActivity(
                        id: r[Key.Id],
                        duration: rs => TimeSpan.FromMinutes(
                            Gamma.Sample(rs, Convert.ToDouble(r[Key.Duration_MeanInMinutes]), Convert.ToDouble(r[Key.Duration_CV]))),
                        batchSizeRange: batchSizeRange,
                        requirements: r[Key.Requirements].Split(';').Where(str => str.Length > 0).Select(str =>
                    {
                        var splits = str.Split(':');
                        return(splits[0], splits.Length > 1 ? Convert.ToDouble(splits[1]) : 1.0);
                    }).ToList(),
                        description: r[Key.Description]
                        );
                }
                foreach (var r in data_activities)
                {
                    if (r[Key.Succeedings].Length > 0)
                    {
                        foreach (var succStr in r[Key.Succeedings].Split(';'))
                        {
                            var splits = succStr.Split(':');
                            if (splits.Length > 1)
                            {
                                simpleRCQs.AddSucceeding(r[Key.Id], splits[1], Convert.ToDouble(splits[0]));
                            }
                            else
                            {
                                simpleRCQs.AddSucceeding(r[Key.Id], splits[0], 1);
                            }
                        }
                    }
                }
                #endregion

                #region Read Arrivals
                foreach (var r in File.ReadAllLines(string.Format("{0}\\{1}.csv", dir, Key.Arrivals)))
                {
                    var line = r.Split(',').Where(s => s != null && s.Length > 0).ToList();
                    switch (line[0])
                    {
                    case Key.MeanHourlyRate:
                        simpleRCQs.Generator.MeanHourlyRate = double.Parse(line[1]);
                        break;

                    case Key.SeasonalFactors_HoursOfDay:
                        simpleRCQs.Generator.SeasonalFactors_HoursOfDay = line.GetRange(1, line.Count - 1)
                                                                          .Select(str => double.Parse(str)).ToList();
                        break;

                    case Key.SeasonalFactors_DaysOfWeek:
                        simpleRCQs.Generator.SeasonalFactors_DaysOfWeek = line.GetRange(1, line.Count - 1)
                                                                          .Select(str => double.Parse(str)).ToList();
                        break;

                    case Key.SeasonalFactors_DaysOfMonth:
                        simpleRCQs.Generator.SeasonalFactors_DaysOfMonth = line.GetRange(1, line.Count - 1)
                                                                           .Select(str => double.Parse(str)).ToList();
                        break;

                    case Key.SeasonalFactors_MonthsOfYear:
                        simpleRCQs.Generator.SeasonalFactors_MonthsOfYear = line.GetRange(1, line.Count - 1)
                                                                            .Select(str => double.Parse(str)).ToList();
                        break;

                    case Key.SeasonalFactors_Years:
                        simpleRCQs.Generator.SeasonalFactors_Years = line.GetRange(1, line.Count - 1)
                                                                     .Select(str => double.Parse(str)).ToList();
                        break;
                    }
                }
                #endregion

                return(simpleRCQs);
            }