Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
 public List <IProduct> OpenProductList(int time, MetaResouceState r, IConOL cl)
 {
     return((cl as CnNestingOL).OpenProductList(r));
 }