Пример #1
0
        private bool InsertInRandomNonFilledBreak(TaskScore taskData)
        {
            List <BreakSchedule> breaksWithEnoughSpace = Solution.AdvertisementsScheduledOnBreaks.Values.Where
                                                         (
                b => b.BreakData.SpanUnits >= b.UnitFill + taskData.AdConstraints.AdSpanUnits
                                                         ).ToList();

            if (breaksWithEnoughSpace.Count == 0)
            {
                return(false);
            }
            int           breakNum = Random.Next(breaksWithEnoughSpace.Count);
            BreakSchedule schedule = breaksWithEnoughSpace[breakNum];
            int           position = Random.Next(schedule.Count + 1);
            Insert        insert   = new Insert()
            {
                TvBreak            = schedule.BreakData,
                AdvertisementOrder = taskData.AdConstraints,
                Position           = position,
                Instance           = Instance,
                Solution           = Solution,
            };

            insert.Asses();
            insert.Execute();
            Reporter.AddEntry(insert.GenerateReportEntry());
            return(true);
        }
 private void ChooseMoveToPerform(List<int> positions, TaskScore taskScore, BreakSchedule breakSchedule)
 {
     foreach(var position in positions)
     {
         Insert move = new Insert()
         {
             Solution = Solution,
             Position = position,
             TvBreak = breakSchedule.BreakData,
             AdvertisementOrder = taskScore.AdConstraints,
         };
         move.Asses();
         if(move.OverallDifference.HasScoreImproved() && !move.OverallDifference.AnyCompatibilityIssuesIncreased())
         {
             move.Execute();
             Reporter.AddEntry(move.GenerateReportEntry());
             _numberOfMoves += 1;
             _movePerformed = true;
         }
         else
         {
             break;
         }
         if (CurrentTime.Elapsed >= TimeLimit) break;
     }
 }
        private void PerformIfTransformationImprovesScore(TaskScore taskScore, BreakSchedule breakSchedule)
        {
            Insert move = new Insert()
            {
                Solution           = Solution,
                Position           = breakSchedule.Count,
                TvBreak            = breakSchedule.BreakData,
                AdvertisementOrder = taskScore.AdConstraints,
            };

            move.Asses();
            if (move.OverallDifference.HasScoreImproved() && !move.OverallDifference.AnyCompatibilityIssuesIncreased())
            {
                move.Execute();
                Reporter.AddEntry(move.GenerateReportEntry());
                _numberOfMoves += 1;
                _movePerformed  = true;
            }
        }
Пример #4
0
        private void InsertInRandomBreak(TaskScore taskData)
        {
            int           breakNum = Random.Next(Instance.Breaks.Count);
            TvBreak       tvBreak  = Instance.Breaks.Values.ToList()[breakNum];
            BreakSchedule schedule = Solution.AdvertisementsScheduledOnBreaks[tvBreak.ID];
            int           position = Random.Next(schedule.Count + 1);
            Insert        insert   = new Insert()
            {
                TvBreak            = schedule.BreakData,
                AdvertisementOrder = taskData.AdConstraints,
                Position           = position,
                Instance           = Instance,
                Solution           = Solution,
            };

            insert.Asses();
            insert.Execute();
            Reporter.AddEntry(insert.GenerateReportEntry());
        }