private static DPNProblemContext GenerateProblemContext() { RnsmWorkspace wor = GenerateWorkspace(); DPNProblemContext _ctx = new DPNProblemContext(wor) { TransferThreshold = 3, Vot = 1, ControlInterval = 3, PriceLevelList = new List <decimal> { 0.9m, 1, 1.1m }, BasicPriceDic = new Dictionary <IServiceSegment, decimal>() { { wor.RailwayTimeTable.TrainTrips.First().ServiceSegments.First(), 20m }, { wor.RailwayTimeTable.TrainTrips.First().ServiceSegments.Last(), 20m }, { wor.RailwayTimeTable.TrainTrips.Last().ServiceSegments.First(), 20m } }, Pal = new CustomerArrivalChain() { new CustomerArrival() { ArriveTime = new DateTime(1991, 7, 5, 0, 0, 1), QueueOrder = 1, Customer = new CustomerInfo() { MarSegID = 3 } }, new CustomerArrival() { ArriveTime = new DateTime(1991, 7, 5, 0, 2, 0), QueueOrder = 2, Customer = new CustomerInfo() { MarSegID = 3 } }, }, StartTime = new DateTime(1991, 7, 5, 0, 0, 0), EndTime = new DateTime(1991, 7, 5, 0, 10, 0), SitaDic = new Dictionary <int, decimal>() }; _ctx.SetParameter("BigM", 9999m); _ctx.SetParameter("Resolution", 1); _ctx.SetParameter("WaitingCost", 0.1); return(_ctx); }
/* * 路网 A----------B----------C * 列车1 A---30m--->B---30m--->C * 列车2 B---40m--->C * 价格等级 {0.9, 1, 1.1} * 旅客 A--------->B * A-------------------->C * B--------->C * 预售期长度 11 * 区间单价 20 * 时间成本 1 */ private static RnsmWorkspace GenerateWorkspace() { //Build a RNSM workspace RnsmWorkspace wor = new RnsmWorkspace(); #region Build railway netowrk wor.Net = new RailwayNetwork(); //Build stations wor.Net.RailwayStations = new List <RailwayStation>(); RailwayStation sta_A = new RailwayStation() { RailwayStationID = 1, StaName = "A" }; RailwayStation sta_B = new RailwayStation() { RailwayStationID = 2, StaName = "B" }; RailwayStation sta_C = new RailwayStation() { RailwayStationID = 3, StaName = "C" }; wor.Net.RailwayStations.Add(sta_A); wor.Net.RailwayStations.Add(sta_B); wor.Net.RailwayStations.Add(sta_C); //Build sections wor.Net.RailwaySections = new List <RailwaySection>(); wor.Net.RailwaySections.Add(new RailwaySection() { StartStation = sta_A, EndStation = sta_B, RailwaySectionID = 1 }); wor.Net.RailwaySections.Add(new RailwaySection() { StartStation = sta_B, EndStation = sta_C, RailwaySectionID = 2 }); #endregion #region Generate a timetable wor.RailwayTimeTable = new TrainDiagram(); wor.RailwayTimeTable.Add(new TrainTrip { Name = "Train01", StopStaions = new List <StopStation> { new StopStation() { Station = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 0, 0) }, new StopStation() { Station = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 30, 0), DepTime = new DateTime(1991, 7, 5, 8, 35, 0) }, new StopStation() { Station = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 5, 0) }, }, ServiceSegments = new List <ServiceSegment> { new ServiceSegment() { DepStation = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 0, 0), ArrStation = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 30, 0) }, new ServiceSegment() { DepStation = sta_B, DepTime = new DateTime(1991, 7, 5, 8, 35, 0), ArrStation = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 5, 0) } } });//Train 1 wor.RailwayTimeTable.Add(new TrainTrip { Name = "Train02", StopStaions = new List <StopStation>(), ServiceSegments = new List <ServiceSegment> { new ServiceSegment() { DepStation = sta_B, DepTime = new DateTime(1991, 7, 5, 9, 0, 0), ArrStation = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 40, 0), } } });//Train 2 #endregion #region Generate demand wor.Mar = new RailwayMarket(); wor.Mar.TimeHorizon = 10; (wor.Mar as List <RailwayMarketSegment>).AddRange(new List <RailwayMarketSegment>() { new RailwayMarketSegment { MSID = 1, Description = "A->B", OriSta = sta_A, DesSta = sta_B }, new RailwayMarketSegment { MSID = 2, Description = "B->C", OriSta = sta_B, DesSta = sta_C }, new RailwayMarketSegment { MSID = 3, Description = "A->C", OriSta = sta_A, DesSta = sta_C, } }); #endregion return(wor); }
private static IRnsmWorkspace GenerateWorkspace1() { //Build a RNSM workspace RnsmWorkspace wor = new RnsmWorkspace(); #region Build railway netowrk wor.Net = new RailwayNetwork(); //Build stations wor.Net.RailwayStations = new List <RailwayStation>(); RailwayStation sta_A = new RailwayStation() { RailwayStationID = 1, StaName = "A" }; RailwayStation sta_B = new RailwayStation() { RailwayStationID = 2, StaName = "B" }; RailwayStation sta_C = new RailwayStation() { RailwayStationID = 3, StaName = "C" }; wor.Net.RailwayStations.Add(sta_A); wor.Net.RailwayStations.Add(sta_B); wor.Net.RailwayStations.Add(sta_C); //Build sections wor.Net.RailwaySections = new List <RailwaySection>(); wor.Net.RailwaySections.Add(new RailwaySection() { StartStation = sta_A, EndStation = sta_B, RailwaySectionID = 1 }); wor.Net.RailwaySections.Add(new RailwaySection() { StartStation = sta_B, EndStation = sta_C, RailwaySectionID = 2 }); #endregion #region Generate a timetable wor.RailwayTimeTable = new TrainDiagram(); wor.RailwayTimeTable.Add(new TrainTrip { Name = "Train1", StopStaions = new List <StopStation> { new StopStation() { Station = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 0, 0) }, new StopStation() { Station = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 30, 0), DepTime = new DateTime(1991, 7, 5, 8, 35, 0) }, new StopStation() { Station = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 5, 0) }, }, ServiceSegments = new List <ServiceSegment> { new ServiceSegment() { DepStation = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 0, 0), ArrStation = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 30, 0) }, new ServiceSegment() { DepStation = sta_B, DepTime = new DateTime(1991, 7, 5, 8, 35, 0), ArrStation = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 5, 0) } }, Carriage = new Base.TranResource.TrainCarriage(5) });//Train 1 wor.RailwayTimeTable.Add(new TrainTrip { Name = "Train2", StopStaions = new List <StopStation>() { new StopStation() { Station = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 15, 0) }, new StopStation() { Station = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 55, 0), DepTime = new DateTime(1991, 7, 5, 9, 0, 0) }, new StopStation() { Station = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 40, 0) }, }, ServiceSegments = new List <ServiceSegment> { new ServiceSegment() { DepStation = sta_A, DepTime = new DateTime(1991, 7, 5, 8, 15, 0), ArrStation = sta_B, ArrTime = new DateTime(1991, 7, 5, 8, 55, 0) }, new ServiceSegment() { DepStation = sta_B, DepTime = new DateTime(1991, 7, 5, 9, 0, 0), ArrStation = sta_C, ArrTime = new DateTime(1991, 7, 5, 9, 40, 0), } }, Carriage = new Base.TranResource.TrainCarriage(5) });//Train 2 #endregion #region Generate demand wor.Mar = new RailwayMarket() { AggRo = new List <Interval>() { new Interval() { StartDate = new DateTime(1991, 7, 5, 0, 0, 0), StartTime = 0, EndDate = new DateTime(1991, 7, 5, 0, 10, 10), EndTime = 10, } }, TimeHorizon = 10 }; wor.Mar.ConvertToInttime = x => { for (int i = 0; i < wor.Mar.AggRo.Count; i++) { if (x >= wor.Mar.AggRo[i].StartDate && x <= wor.Mar.AggRo[i].EndDate) { return(wor.Mar.AggRo[i].StartTime + (int)((wor.Mar.AggRo[i].EndTime - wor.Mar.AggRo[i].StartTime) * (x - wor.Mar.AggRo[i].StartDate).TotalSeconds / (wor.Mar.AggRo[i].EndDate - wor.Mar.AggRo[i].StartDate).TotalSeconds)); } ; } throw new Exception("时间超出范围"); }; //将刻度时间转化为真实时间 (wor.Mar as List <RailwayMarketSegment>).AddRange(new List <RailwayMarketSegment>() { new RailwayMarketSegment { MSID = 1, Description = "A->B", OriSta = sta_A, DesSta = sta_B }, new RailwayMarketSegment { MSID = 2, Description = "B->C", OriSta = sta_B, DesSta = sta_C }, new RailwayMarketSegment { MSID = 3, Description = "A->C", OriSta = sta_A, DesSta = sta_C, } }); #endregion return(wor); }