public List <Ticket> PrintTickets(MetaResouceState rs, List <IProduct> pro, IConOL cl) { List <Ticket> res = new List <Ticket>(); foreach (IProduct p in pro)//一张一张卖 { int n = p.Min(i => i.MetaResList.Count); for (int i = 0; i < n; i++) { if (p.All(j => !rs.MetaResDic[j.MetaResList[i]])) { Ticket t = new Ticket() { Product = p }; foreach (IResource r in p) { t.MetaResList.Add(r.MetaResList[i]); } res.Add(t); break; } } } return(res); }
public List <IProduct> OpenProductList(int time, MetaResouceState r, IConOL cl) { List <IProduct> OpenProductList = new List <IProduct>(); foreach (IProduct p in DataAdapter.ProSpace) { if (r.CanSupportProduct(p)) { OpenProductList.Add(p); } } return(OpenProductList); }
public double[][] BidPrice;//[时间][资源编号] 的投标价格 public List <IProduct> OpenProductList(int time, MetaResouceState r, IConOL cl) { List <IProduct> res = new List <IProduct>(); foreach (Product p in m_DataAdapter.ProSpace) { //Console.WriteLine("产品{0}\t价格{1}\t投标价格{2}", p.Description, p.Fare, p.Sum(i => Solver.DualValue1[time][m_DataAdapter.RS.IndexOf(i as Resource)])); if (r.CanSupportProduct(p) && p.Fare >= Math.Floor((p as List <Resource>).Sum(i => BidPrice[time2index(time)][1 + m_DataAdapter.RS.IndexOf(i as Resource)]))) { res.Add(p); } } return(res); }
public bool Process(PrimalArrivalList arr, out SellingRecordList Srlist, out ControlRecordList Crlist) { //初始化记录 Srlist = new SellingRecordList() { PAL = arr }; Crlist = new ControlRecordList() { PAL = arr }; //初始化资源 MetaResouceState rs = new MetaResouceState(InitState); //生成动态策略 IConOL conol = Controller.GenConOL(); if (conol != null) { conol.Update(rs); } List <IProduct> openProductList = Controller.OpenProductList(0, rs, conol);//初始开放产品 Crlist.UpdateOpenProducts(0, openProductList); for (int i = 0; i < arr.Count; i++)//顺序读取到达列表 { //生成开放产品集 openProductList = Controller.OpenProductList(arr[i].ArriveTime, rs, conol); //模拟旅客购票 List <IProduct> pro = (MarketInfo[arr[i].IndexOfMS] as IChoiceAgent).Select(openProductList, arr[i].ChoosingParam); if (pro == null) { continue; } //出票 List <Ticket> tickets = Controller.PrintTickets(rs, pro, conol); //更新资源状态 rs.UpdateAfterSelling(tickets); if (conol != null) { conol.Update(rs); } //记录产品情况 Crlist.UpdateOpenProducts(arr[i].ArriveTime, openProductList); //加入SellingRecordList Srlist.AddRecord(arr[i].ArriveTime, arr[i], pro, tickets); } return(true); }
public List <Ticket> PrintTickets(MetaResouceState rs, List <IProduct> pro, IConOL cl) { //(cl as CnNestingOL).NeedToRefresh.Clear(); List <Ticket> res = new List <Ticket>(); foreach (IProduct p in pro) { //从一个包含产品的列车中打印车票 BucketGroup tg = (cl as CnNestingOL).TrainGroupList.FirstOrDefault(i => i.ProList.Contains(p)); List <Bucket> temp = null; res.Add(tg.PrintTicket(rs, p, out temp)); (cl as CnNestingOL).NeedToRefresh.AddRange(temp); } return(res); }
public List <IProduct> OpenProductList(int time, MetaResouceState r, IConOL cl) { return((cl as CnNestingOL).OpenProductList(r)); }