コード例 #1
0
        //是否能将某个航班改为调机航班,减少多余的取消航班
        public static bool FixByConvertToEmptyFly(List <Airline> AirlineList, bool IsTry)
        {
            int StartIndex, EndIndex;
            var range = GetTyphoonRange(AirlineList);

            StartIndex = range.StartIndex;
            EndIndex   = StartIndex + 1;
            //StartIndex 是受   台风影响的航班
            //EndIndex   是不受 台风影响的航班!
            if (EndIndex == -1 || StartIndex == -1)
            {
                return(false);
            }
            if (CheckCondition.TyphoonAirport.Contains(AirlineList[StartIndex].StartAirPort))
            {
                //转为空飞
                int StartIndexClone = StartIndex;
                int EndIndexClone   = EndIndex;
                if (IsCanEmptyFly(AirlineList, ref StartIndex, ref EndIndex))
                {
                    if (StartIndexClone != StartIndex || EndIndexClone != EndIndex)
                    {
                        return(false);
                    }
                    var FirstAirline = AirlineList[StartIndex];
                    var EmptyFly     = Utility.DeepCopy(FirstAirline);
                    //修复空飞
                    EmptyFly.FixMethod = enmFixMethod.EmptyFly;
                    EmptyFly.Problem   = GetProblem(FirstAirline);
                    EmptyFly.StartTime = EmptyFly.Problem.TakeOffBeforeThisTime;
                    var key = EmptyFly.PlaneType + int.Parse(EmptyFly.StartAirPort).ToString("D2") +
                              int.Parse(EmptyFly.EndAirPort).ToString("D2");
                    EmptyFly.EndTime           = EmptyFly.StartTime.AddMinutes(Solution.FlyTimeDic[key]);
                    EmptyFly.ModifiedStartTime = EmptyFly.Problem.TakeOffBeforeThisTime;
                    if (!IsTry)
                    {
                        EmptyFlyList.Add(EmptyFly);
                    }
                    AirlineList[StartIndex].FixMethod = enmFixMethod.Cancel;
                    return(AdjustAirLineList(AirlineList));
                }
            }
            return(false);
        }
コード例 #2
0
        public static double FixByEmptyFlyAdvanced(List <Airline> AirlineList, int BestEndIndex, bool IsTry)
        {
            int StartIndex, NewEndIndex;
            var range = GetTyphoonRange(AirlineList);

            StartIndex  = range.StartIndex;
            NewEndIndex = BestEndIndex;
            var EmptyFly = GetEmptyFly(AirlineList, StartIndex, NewEndIndex);

            for (int i = StartIndex; i < NewEndIndex; i++)
            {
                AirlineList[i].FixMethod = enmFixMethod.Cancel;
            }
            CoreAlgorithm.AdjustAirLineList(AirlineList);
            if (!IsTry)
            {
                EmptyFlyList.Add(EmptyFly);
            }
            return(Statistics.WriteResult(AirlineList) + (IsTry ? Statistics.EmptyFlyParm : 0));
        }